[英]MIPS-Assembly: How to 'define' subroutine for later use
關於如何正確遵循 MIPS 函數調用約定,有很多很好的例子。 但是,我只在 'call' 時才遇到如何使用函數的問題。 以下將打印 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
除非您重定向它,否則執行會從一條指令進行到下一條指令。 在 SPIM 中,我猜執行從文本段的開頭開始,並在您調用退出系統調用(系統調用 #10)時結束。 如果將例程放在退出系統調用、函數返回或任何其他無條件分支之后,則除非明確調用,否則控制永遠不會到達它。 例如:
.data
strproc:.asciiz "procedure example"
strnl: .ascii "\n"
.text
# entry point
li $v0, 1
li $a0, 1
syscall # print integer 1
jal println # call println
li $v0, 10
syscall # exit program
printnl:li $v0, 1
li $a0, 5
syscall # print integer 5
jr $ra # return from function
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.