2012-08-22 51 views
0

我學習MIPS 32位彙編在NIOS II IDE,我已經得到了倍增存儲在R4和R5兩個數字一個完整的工作子程序,並返回結果中R2:如何調用這個子程序?

 .global muladd   # makes label "main" globally known 

     .text     # Instructions follow 
     .align 2    # Align instructions to 4-byte words 

muladd: 
    movi r2, 0 # total = 0 
    movi r8, 0 # i = 0 
L1: # if(i >= a) goto L2 
    bge r8, r4, L2 # a i r4 
    # total = total + b 
    add r2, r2, r5 # öka b med r5 
    addi r8, r8, 1 # i = i + 1 
    br L1 # goto L1 
L2: # return(total) 
ret 

我怎樣才能調用子程序並從中打印出來,以確保它按預期工作?這是我的第一個子程序,之前我從來沒有調用子程序,所以如果我不能馬上理解所有的東西,請原諒我。

+0

環境????彙編? – perilbrain

+0

@An ymous謝謝您的評論。我已經用更多關於環境和彙編程序的信息更新了這個問題。它的Altera DE2開發板採用32位MIPS,我使用的IDE稱爲Nios II,它也是使用的處理器的名稱。如果您喜歡,請提出更多問題。 –

+0

永遠不要面對這樣的環境,但如果它正在生產精靈然後使用[int 0x80](http://asm.sourceforge.net/articles/linasm.html)。還要調用一個例程必須有一個'call'指令或一個'跳轉'指令。 – perilbrain

回答

1

您調用子程序從主這樣的:

main: 
    ... 
    li r4, 123 // load some test data into r4 and r5 
    li r5, 1 
    jal muladd // call muladd. Return address is stored in r31 
    nop   // branch delay slot 
    // muladd returns to this address. 
    // If muladd worked correctly r2 should contain decimal 123+1, or 124 
    // print subroutine call goes here 
    ... 

Muladd返回使用jr r31(跳轉到包含在寄存器31中的地址)。您的非標準環境可能會拼寫爲ret

+0

謝謝你的回答。在我的情況下,我可以只使用聲明'電話' –

+0

是的,我認爲這將適用於您的環境。 – markgz