102k views
5 votes
Convert the following C program to MIPS program. Assuming that i, j, k, f, are stored in registers $s0, $s1, $s2, $s3 already. (40 pts)

1) f = i + j + k +1;
2) f = i - 2;
3) f = i;
4) f = -i;
5) f = i ? ( j + k );
6) f = i & j;
7) f = i/16 (Hint: relationship between multiplication/division and shift)
8) f = i*2 - 3;
9) f = i++;
10) f = ++i;

1 Answer

2 votes

Here's the MIPS program that corresponds to the given C program, with comments explaining each step:

# 1) f = i + j + k + 1

add $s3, $s0, $s1 # $s3 = i + j

add $s3, $s3, $s2 # $s3 = i + j + k

addi $s3, $s3, 1 # $s3 = i + j + k + 1

move $s3, $s3 # f = $s3

# 2) f = i - 2

addi $s3, $s0, -2 # $s3 = i - 2

move $s3, $s3 # f = $s3

# 3) f = i

move $s3, $s0 # f = i

# 4) f = -i

sub $s3, $zero, $s0 # $s3 = 0 - i = -i

move $s3, $s3 # f = $s3

# 5) f = i ? (j + k)

beq $s0, $zero, skip # If i is zero, skip the next instruction

add $s3, $s1, $s2 # $s3 = j + k

skip:

move $s3, $s3 # f = $s3

# 6) f = i & j

and $s3, $s0, $s1 # $s3 = i & j

move $s3, $s3 # f = $s3

# 7) f = i/16

srl $s3, $s0, 4 # $s3 = i / 16 (shift right logical by 4 bits)

move $s3, $s3 # f = $s3

# 8) f = i*2 - 3

sll $t0, $s0, 1 # $t0 = i * 2 (shift left logical by 1 bit)

addi $s3, $t0, -3 # $s3 = i * 2 - 3

move $s3, $s3 # f = $s3

# 9) f = i++

addi $s0, $s0, 1 # $s0 = i + 1

move $s3, $s0 # f = i

# 10) f = ++i

addi $s0, $s0, 1 # $s0 = i + 1

move $s3, $s0 # f = i (since i was already incremented)

User Anilyeni
by
8.5k points