CS5031 Exercises 5: Compiled ARM Code

1. Assuming
a) all variables are held in registers
b) all variables are held on the stack
write ARM code for

int a1, a2, a3, a4, b, c, d, i, j, k;
 . . .
a1 = b * 10 + c;
a2 = b + 15 * c;
a3 = (b + c) * d / (i + j * k);
a4 = -b + c;

2. Assuming i, j and k are in registers, but a is on the stack, write ARM code for

int i, j, k, a[3][4][5];
 . . .
a[i][j][k]= 6;

3. Assuming all variables are in registers, write ARM code for

do
	statement;
while (a<b);
 . . .
for (i=0; i<100; i++)
	statement;

4. Show the stack layout for the following declaration

struct vehicle {
	char make[10];
	int cc;
	boolean taxed;
	char regno[7];
	enum {red,blue,white} colour;
	struct {
		int unladen_weight;
		int gross_weight;
	} weight;
} mycar;

5. Show the stack layout and write down the ARM code for the following C function.

int test(void)
{
	int i, j, k, m, x, y;
	j= k= m= 1;
	for (i= 100; i>=90; i--)
		while (j<100)
			if (k==1)
				if (m==2) j++;
				else j+= 10;
	x= 1;
	y= i+x * (j+k/10);
	return 0;
}