我正在尝试编写一个函数,要求用户输入两个数字,一次一个。第一个顺利,但是我遇到第二个问题(我复制了行,“ask”是一个字符串,要求用户添加输入)。有什么问题?
main:
addi $sp, $29, -8
sw $31, 0($29) # save register 31 (ra) (since there is a nested / recursive procedure)
sw $0, 4($29) # Space for parameter n1 on stack
li $v0, 4 # Ask for number
la $a0, ask
syscall
li $v0, 5 # read int
syscall # $v0 holds the integer - n1
sw $v0, 4($29) # save n1 on stack
move $a0, $v0 # prepare argument for func
sw $0, 4($29) # Space for parameter n2 on stack
li $v1, 4 # Ask for number
la $a1, ask
syscall
li $v1, 5 # read int
syscall # $v1 holds the integer - n2
sw $v1, 4($29) # save n2 on stack
move $a1, $v1 # prepare argument for func
谢谢!
答案 0 :(得分:0)
下面:
sw $0, 4($29) # Space for parameter n2 on stack
你覆盖堆栈中的n1。
您只为一个参数预留空间并在堆栈中返回地址。
系统调用也使用某些寄存器来存储某些数据。你无法决定:
li $v1, 4 # Ask for number
la $a1, ask
syscall