【发布时间】:2018-09-30 01:04:46
【问题描述】:
关于如何正确遵循 MIPS 函数调用约定,有很多很好的例子。但是,我对如何仅在“调用”时使用函数感到困惑。以下将打印 51(使用 MARS):
.data
strproc: .asciiz "procedure example"
strnl: .ascii "\n"
.text
printnl: li $v0, 1
li $a0, 5
syscall
#jal printnl
li $v0, 1
li $a0, 1
syscall
但是,我真的希望能够仅在跳转和链接到(“调用”时)时执行与printnl 标签关联的指令。这在 MIPS 中可行吗?作为您答案的一部分,请随意批评我的设计倾向。我不确定应该如何编写一个可能需要大量重复指令的简单汇编程序。
我确实尝试过这个(但它没有组装):
.data
strproc: .asciiz "procedure example"
strnl: .ascii "\n"
printnl: li $v0, 1
li $a0, 5
syscall
.text
li $v0, 1
li $a0, 1
syscall
jal printnl
【问题讨论】:
-
只需将例程放在控制流通常无法到达的位置,例如在你的主要程序之后。
-
你能举个例子吗? MIPS 中“主程序”的语义是什么?似乎有一些针对此的指令,但我还没有找到正确的指令。
-
除非您重定向它,否则执行会从一条指令进行到下一条指令。在 SPIM 中,我猜想执行从文本段的开头开始。你通过执行系统调用 10 退出程序。如果你把你的例程放在之后,除非你明确地调用它,否则控制永远不会到达它。
标签: assembly mips mips32 mars-simulator