2012-02-06 66 views
5

Tôi cần dịch mã C này sang hội đồng MIPS. Đây là mã C:Lắp ráp MIPS cho một vòng lặp đơn giản

int tmp = 0; 
for (int j = 0; j < 15; ++j) 
    tmp = tmp * 2 + 3 

Đây là mã lắp ráp MIPS của tôi. Đây có phải là bản dịch chính xác không? Nếu bạn thấy bất kỳ sai lầm nào tôi thực sự muốn biết.

# tmp = $v0 
# j = $t0 

.globl main 

main: 
    li $v0,0 

loop: 
    bgt $t0,15,exit 
    addi $t0,$t0,1 
    mul $t1,$v0,2 
    add $v0,$t1, 3 
    j loop 

exit: 
+0

Nhân với sức mạnh của 2 lần sử dụng sll. Đừng ** không ** sử dụng mul –

Trả lời

5

vòng lặp của bạn đi 0-14, vì vậy hướng dẫn BGT của bạn nên là: bgt $t0,14,exit tôi nghĩ.

.

1

Bạn không đặt j ($ t0) thành 0 trước vòng lặp.

0
.data 
mensage: asciiz "Text Test" 
newline: asciiz "\n" 
.text 

# tmp = $v0 
# j = $t0 

main: 
    li $t0,0 
    li $t1,0 
    li $t3,0 
loop: 
    bgt $t0,15,exit 
    addi $t0,$t0,1 
    j loop 
    mul $t1,$t1,2 
    add $t3,$t1,3 
exit: 

li $v0,0 
syscall 
Các vấn đề liên quan