2014-11-03 85 views
0

我有這個節目,我只寫了:用MIPS編寫的程序如何知道返回什麼?

countzeroes:

li  $v0, 0 # count = 0 
    li  $t0, 0 # int i = 0 
    li  $v1, 1 # compare bit = 1 

cz_loop:

bge  $t0, 32, cz_exit # exit loop if i >= 32 
    andi $t1, $a0, 1 # bit = arg0 & 1 
    beq  $t1, $v1, cz_skip # skip if bit = 1 
    addi $v0, $v0, 1 # adds 1 to count 

cz_skip:

srl  $a0, $a0, 1 # shifts input right by 1 
    add  $t0, $t0, 1 # i++ 

    j  cz_loop 

cz_exit:

jr  $ra 

非常簡單,只需計算一個32位字中的零數。我想知道程序如何知道如何在最後返回$ v0?我知道v0和v1是返回寄存器,但我想知道這兩個是否總是返回。如果沒有,該程序如何知道返回v0?

另外,我知道jr $ ra跳轉到返回地址 - 但是這是什麼意思?

感謝您的幫助。

回答

2

「程序如何知道如何在最後返回$ v0?」

它不知道,你正在寫$ v0的「返回」值,實際上你可以在任何可用的寄存器中返回「結果或返回值」,比如臨時值,這只是一個約定$ v0寄存器返回值(MIPS)。

「我在想,如果這兩個總是返回」

請記住,在你的程序中的任何子程序,你總是可以訪問所有的寄存器,所以沒有「限購」什麼寄存器存儲值,可以是語義稱爲「返回值」,所以我可以很容易地創建一個返回$ t0,$ t1,$ t2中的3個數字的方法,但這是我的選擇,也可以在堆棧中返回值,這有很多可能性,並且這取決於並闡述了良好的編程習慣以及調用約定,這裏您可以找到MIPS調用約定:https://courses.cs.washington.edu/courses/cse410/09sp/examples/MIPSCallingConventionsSummary.pdf

「jr $ ra跳轉到返回地址 - 但是這是什麼意思?」

程序是按指令執行的(程序有一個指令指針又稱程序計數器),當你調用一個子程序時,下一條指令的地址被存儲在$ ra寄存器中,那麼當你使得jr $ ra ,程序執行返回到該地址(指令指針獲取$ ra的值)。

+0

謝謝@ kevinkl3。我想知道在這種情況下程序知道如何返回v0? – jstnchng 2014-11-03 06:24:25

+0

因爲你在那個寄存器addi $ v0中存儲返回值,所以如果你爲這個addi $ v1,$ v1,1改變了這個指令,那麼$ 1,#1加1,程序將返回價值在$ v1,它不知道這完全取決於你。 – kevinkl3 2014-11-03 06:30:42

2

在MIPS中,您會看到三種不同的跳轉。 j,jr & jal。 j:它被認爲是無條件跳轉。只需做:

j function 

jr:又名跳轉到註冊。正如名字聽起來你跳到註冊。這是當你有一個寄存器已經保存在你想要跳回到你的程序的某個地方。它通常會看起來像這樣:

jr $ra 

$嶺是其中有您JAL前事先預留寄存器(見下文)會跳轉程序返回到該地址。

jal:aka跳轉和鏈接將下一條指令的地址複製到寄存器中,然後跳轉到地址標籤。換句話說,jal和jr兩者主要用於通常在退出調用之後進行的功能。

例:

main: 
     #program 
     jal function 
     #continue with program 
    function: 
     # 
     #do something 
     # 
     jr $ra 

而且,最有用的網站時,我開始學習:http://logos.cs.uic.edu/366/notes/mips%20quick%20tutorial.htm

,我希望有人告訴我,當我開始有些其他快速提示:

  • 始終啓動與「主」:
  • 請注意乘以 的高位/低位寄存器之間的差異並劃分整數
  • 始終跟蹤您的註冊表,因爲有這麼多$ s和$ t 和$ f和$ p以及$ a和$ v寄存器一起工作的情況下,事情可能會很快得到混亂。
+0

'j函數'可能是一個不好的例子,除非你想談論尾部優化。 *函數內的跳轉*是'j'的典型用例。順便說一句,這些都是*無條件跳轉。你沒有提到任何MIPS的條件跳轉指令,例如BLTZ(如果小於零的分支)。還有很多其他的,如[MIPS insn set reference guide](http://www.mrc.uidaho.edu/mrc/people/jff/digital/MIPSir.html)所列)。 – 2016-11-29 19:36:33

相關問題