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
  

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 starti
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 starti

Get Help Now

Submit a Take Down Notice

Tutor
Tutor: Dr Jack
Most rated tutor on our site