Translate rom C to MIPS assembly language Using byte address
Translate rom C to MIPS assembly language.
+Using byte addressed memory and the following register assignments
i=$s0
j=$s1
k=$s2
starting address a = $s3
starting address b = $s4
========C translate to MIPS code==============
a) i = j +21;
-------------------------------------------
b) k = i – ( j + k )
-------------------------------------------
c) j = b[2] * 8
-------------------------------------------
d) b[2*j] = 10;
-------------------------------------------
f) a[i]++
-------------------------------------------
Solution
Here is the MIPS code for the given fragments...
a)
#i = j + 21
addi $s0, $s1, 21 #s0 = s1 + 21
b)
#k = i - (j+k)
sub $s2, $s0, $s2 # s2 = s0 - s2 i.e k = i - k
sub $s2, $s2, $s1 # s2 = s2- s1 i.e k = k - j
c)
#j = b[2] * 8
la $t0, b #t0 = &b
lw $t1, 8($t0) #t1 = b[2] , each word is 4 bytes, so element 2 is at offset 8
mul $t1, $t1, 8 #t1 = t1 * 8
move $s1, $t1 #j = $t1
d)
#b[2*j] = 10
li $t1, 10 #t1 = 10
mul $t2, $s1, 2 #t2 = j * 2
mult $t2, $t2, 4 #each is 4 bytes offset
la $t3, b # t3 = &b
add $t3, $t3, $t2 #t3 = b + 2j
sw $t1, ($t3) #b[2j] = t1
f)
#a[i]++
la $t1, a # t1 = &a
move $t2, $s0 #t2 = i
mul $t2, $t2, 4 #each is 4 bytes so offset
add $t1, $t1, $t2 #t1 = &a[i]
lw $t3 , 0($t1) #t3 = a[i]
addi $t3, $t3, 1#t3 = t3 + 1
sw $t3, 0($t1) #a[i] = t3

