我试图编程一个函数来使用除了4之外的额外参数(因为我的mips版本只支持$ a0- $ a3),但是我的代码不正确。这里是我的代码在主(片段):使用多个mips参数> 4
li $t0,40 #temp value for our 5th arg.
addi $sp, $sp, -4 #decrement stack pointer by 4
sw $t0, 0($sp) #save the value of $t0 on the stack.
jal printf
它设置一个临时值为40,给堆栈上的空间,并保存它。然后我的功能被调用。作为一个测试,看看这个工作,在函数内部当我移动这些临时变量$ A0〜$ A3自己保存的寄存器的同行,我有这样的代码:
lw $t0, 0($sp)
addi $sp, $sp, 4
move $a0,$t0
li $v0, 1
syscall
...但只打印出0而不是40,所以即时做一些不正确的事情。任何帮助将不胜感激(和upvoted)
为什么会在堆栈中为寄存器中的参数保留空间?维基百科页面指出,参数5和参数在堆栈上传递,而不是从1到4. – blackcompe 2012-04-18 20:38:36
这就是如何定义调用约定,它确实允许调用例程将其参数保存在堆栈中的已知位置。维基页面不完整。请参阅http://www.mips.com/media/files/MD00565-2B-MIPS32-QRC-01.01.pdf。 – markgz 2012-04-18 21:24:23
我明白你的意思,你是正确的。 – blackcompe 2012-04-18 21:48:47