[英]MIPS assembly for a simple for loop
我需要將此 C 代碼轉換為 MIPS 程序集。 這是 C 代碼:
int tmp = 0;
for (int j = 0; j < 15; ++j)
tmp = tmp * 2 + 3
這是我的 MIPS 匯編代碼。 是正確的翻譯嗎? 如果您看到任何錯誤,我真的很想知道。
# 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 到 14,所以你的 bgt 指令應該是: bgt $t0,14,exit
我想。
.
您不要在循環之前將 j ($t0) 設置為零。
.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 $v10,0
syscall
我也不知道你在運行什么 MIPS 模擬器,但我知道其中一些不是常量,他們要求你將它們分配給寄存器。 所以像 bgt Rsrc1, Src2, label 一樣,通常如果你在 src2 中放入一個整數,計算機會翻譯它,但我知道對於一些你會得到一個錯誤 add $v0, $t1, 3 因為它不會翻譯 add阿迪與 mul 相同。 我知道我的 SPIM 模擬器不允許這樣做。
add $vo, $vo, $zero
add $t0, $t0, $zero
LOOP:
slti $t1, $t0, 15
beq $t1, $zero, EXIT
addi $t0, $t0, 1
addi $t2, $zero, 2
mul $t3, $v0, $t2
addi $v0, $t3, 3
j LOOP
EXIT:
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.