我正在尝试编写MIPS汇编程序以从用户获取两个整数,将其保存到数组中的内存并打印它。这就是我到目前为止所拥有的。我的节目打印了一些我没有放入的大号。我对这个游戏很新。有人请帮忙!
这是我的代码:
.text
.globl main
main:
li $v0, 4
la $a0, prompt
syscall
li $t0, 0 #count for the loop to get two integers
getnum:
li $v0, 5 #read integer
syscall
sw $v0, num($s0) #save the integer from user input into num and $s0 has address for num, I'm not sure if i did this right
addi $s0, $s0, 4 # increment $s0 by 4 to save another integer
addi $t0, $t0, 1 #increment the counter
ble $t0, 1, getnum #if counter $t0, is less then or equal to 1, it will go through the loop again
printnum:
la $a0, num($s0) #load address of num to print
li $v0, 1 #print int
syscall
addi $s0, $s0, 4
addi $t1, $t1, 1
ble $t1, 1, printnum #does it twice
li $v0, 10
syscall
.data
num:
.word 0, 0 # i want to store my two numbers here
prompt:
.asciiz "Enter 2 positive integers: "
答案 0 :(得分:2)
你的问题有两个。
首先,您要加载整数的地址而不是实际的整数。要将此更改la
修改为lw
。
其次,因为您在$s0
循环中增加getnum
两次并立即在printnum
循环中使用它,所以它太遥远了,您需要添加move $s0, $zero
解决这个问题。
此外,您的代码似乎依赖于$s0
启动程序的值为0的事实,这可能不是一个很好的假设。明确将其设置为零会更好。