首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >传递参数: MIPS

传递参数: MIPS
EN

Stack Overflow用户
提问于 2014-02-13 08:49:59
回答 2查看 21.6K关注 0票数 5

我想将一个字符作为参数传递给MIPS中的函数。我是这样做的:将字符存储到寄存器$a0中,使用jal移动到函数,然后使用lw将$a0中的内容提取到一个单独的寄存器中?

如果有人能给我一个在MIPS中传递一两个参数的例子,我将不胜感激。我找到了许多关于MIPS调用约定的信息,但没有任何简单简洁的示例。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2014-02-13 12:20:18

不需要使用lw,它用于从内存中提取单词。您可以在子例程中简单地使用$a0

看看这个"print-char“函数的例子:

代码语言:javascript
复制
.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调用约定将这些寄存器指定为保存的被调用者。

票数 4
EN

Stack Overflow用户

发布于 2021-03-28 03:48:31

一种非常简单的方法是将参数加载到临时寄存器中,然后使用:

代码语言:javascript
复制
move $a0,$t0

这样,存储在temp寄存器中的参数将作为参数给出

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/21743135

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档