我想将一个字符作为参数传递给MIPS中的函数。我是这样做的:将字符存储到寄存器$a0中,使用jal移动到函数,然后使用lw将$a0中的内容提取到一个单独的寄存器中?
如果有人能给我一个在MIPS中传递一两个参数的例子,我将不胜感激。我找到了许多关于MIPS调用约定的信息,但没有任何简单简洁的示例。
发布于 2014-02-13 12:20:18
不需要使用lw,它用于从内存中提取单词。您可以在子例程中简单地使用$a0。
看看这个"print-char“函数的例子:
.text
main:
#save $ra on stack
addi $sp $sp -4
sw $fp 0($sp)
move $fp $sp
addi $sp $sp -4
sw $ra -4($fp)
#call sub-routine
addi $a0 $zero 'A'
jal printchar
#restore and shrink stack
lw $ra -4($fp)
lw $fp 0($fp)
addi $sp $sp 8
jr $ra
#prints a char and then a new line
printchar:
#call print-char syscall
addi $v0 $zero 11
syscall
addi $a0 $zero 10
syscall
jr $ra正如所演示的,$a0寄存器的值只是在子例程中使用,因为它返回在jal之前给出的值。
还演示了调用子路由所需的堆栈的适当扩展和收缩。正如您将注意到的,子例程不执行此操作,因为它不调用子例程,因此不需要保存$ra。如果子例程使用$s寄存器,则还需要在子例程中进行堆栈操作,因为MIPS调用约定将这些寄存器指定为保存的被调用者。
发布于 2021-03-28 03:48:31
一种非常简单的方法是将参数加载到临时寄存器中,然后使用:
move $a0,$t0这样,存储在temp寄存器中的参数将作为参数给出
https://stackoverflow.com/questions/21743135
复制相似问题