汇编代码的问题
Trouble with assembly code
所以我一直在学习汇编并为 class 开发一个小项目。
它是一个简单的程序,无需使用内置的 mult 指令即可将两个数字相乘。相反,它通过轮班添加来实现。但是我无法让它在 QtSpim 控制台中显示结果。
.text
main:
li $v0, 0
li $t0, 1
li $t1, 0
li $a0, 2
li $a1, 3
main_loop:
beq $a1, $zero, main_end
beq $a0, $zero, main_end
and $t1, $t0, $a1
beq $t1, 1, main_do_add
beq $t1, 0, main_do_shift
main_do_add:
addu $v0, $v0, $a0
main_do_shift:
sll $a0, $a0, 1
srl $a1, $a1, 1
j main_loop
main_end:
li $v0, 10
我对汇编还很陌生,这是第一个真正的程序。所以我不确定我做错了什么。
您只是忘记打印该值。
这是经过更正和注释的程序。注意:我没有检查你的乘法逻辑,但结果是 6,所以我猜这就是你想要的。
我建议为几乎每个 asm 行添加侧边栏注释,这样您就可以遵循您的逻辑并将其与您用来实现它的指令进行比较。
无论如何,这是代码[请原谅不必要的样式清理]:
.text
main:
li $v0,0
li $t0,1
li $t1,0
li $a0,2
li $a1,3
main_loop:
beq $a1,$zero,main_end
beq $a0,$zero,main_end
and $t1,$t0,$a1
beq $t1,1,main_do_add
beq $t1,0,main_do_shift
main_do_add:
addu $v0,$v0,$a0
main_do_shift:
sll $a0,$a0,1
srl $a1,$a1,1
j main_loop
main_end:
# BUGFIX -- this was missing
move $a0,$v0 # get result to argument register
li $v0,1 # print integer
syscall
li $v0,10 # exit program
syscall
所以我一直在学习汇编并为 class 开发一个小项目。 它是一个简单的程序,无需使用内置的 mult 指令即可将两个数字相乘。相反,它通过轮班添加来实现。但是我无法让它在 QtSpim 控制台中显示结果。
.text
main:
li $v0, 0
li $t0, 1
li $t1, 0
li $a0, 2
li $a1, 3
main_loop:
beq $a1, $zero, main_end
beq $a0, $zero, main_end
and $t1, $t0, $a1
beq $t1, 1, main_do_add
beq $t1, 0, main_do_shift
main_do_add:
addu $v0, $v0, $a0
main_do_shift:
sll $a0, $a0, 1
srl $a1, $a1, 1
j main_loop
main_end:
li $v0, 10
我对汇编还很陌生,这是第一个真正的程序。所以我不确定我做错了什么。
您只是忘记打印该值。
这是经过更正和注释的程序。注意:我没有检查你的乘法逻辑,但结果是 6,所以我猜这就是你想要的。
我建议为几乎每个 asm 行添加侧边栏注释,这样您就可以遵循您的逻辑并将其与您用来实现它的指令进行比较。
无论如何,这是代码[请原谅不必要的样式清理]:
.text
main:
li $v0,0
li $t0,1
li $t1,0
li $a0,2
li $a1,3
main_loop:
beq $a1,$zero,main_end
beq $a0,$zero,main_end
and $t1,$t0,$a1
beq $t1,1,main_do_add
beq $t1,0,main_do_shift
main_do_add:
addu $v0,$v0,$a0
main_do_shift:
sll $a0,$a0,1
srl $a1,$a1,1
j main_loop
main_end:
# BUGFIX -- this was missing
move $a0,$v0 # get result to argument register
li $v0,1 # print integer
syscall
li $v0,10 # exit program
syscall