2014-02-21 24 views
0

我在MIPS彙編程序,需要做的工作,子程序,並運行計算如下:如何從主去使用JAL指令

1)從在控制檯讀取一系列整數由用戶輸入。

2.)有效條目介於10到99(含)之間。

3.)如果一個條目無效,該條目被拒絕並且錯誤消息被打印到屏幕上。

4.)當輸入-1時,讀數停止。

5.)輸入-1後,程序顯示條目數量,條目總數和條目整數平均值。

我已經創建了一個主和子程序模板here。正如你所看到的那樣,main我已經爲我的五個子程序調用了子程序,你可以看到。我使用jal跳轉到進行計算的指定子程序。

我在正確的軌道上至少我主要部分和使用JAL的呢?

我還沒有運行程序,因爲顯然我沒有任何代碼在子程序中執行計算來執行五個指定的要求。順便說一句,我使用QtSpim作爲我的模擬器。

任何幫助和輸入是非常感謝。

回答

1

跳轉al將返回IP地址保存在$ ra中。因此,在您的子程序可以通過跳回到$ RA如下返回:

... 
    jal sub_routine 
    ...  # <- jr $ra returns here 

sub_routine: 
    ... # do some work 
    jr $ra 

如果需要調用另一個函數,你必須保存$ RA,後容易在棧上,再次調用JAL之前。

$ ra是最後一個註冊表,所以$ 31。

來源:http://math-atlas.sourceforge.net/devel/assembly/mipsabi32.pdf第3-12頁

+0

所以在我verifyUserInput_p子程序我想出的需要計算什麼的僞代碼。你可以看到我的意思[** here **](https://gist.github.com/anonymous/0ca370838509dd28c518)。 – zokiboi

+0

基本上我試圖實現的是,如果用戶的整數輸入介於10和99之間,則返回到子程序調用並要求另一個整數。如果用戶輸入的值不在10和99之間,則打印出錯信息並要求用戶重試。但是,如果用戶輸入'-1',程序將停止運行並顯示總條目數,所有條目總和以及條目的整數平均值。 – zokiboi

+0

是的,這通常很好。儘管在打印出錯信息之前您可能想檢查數字是否爲-1。另外,如果你想在子例程中完成所有這些事情,你需要將棧上的$ ra寄存器(如果我是正確的:mov $ ra,($ sp),添加$ sp,-4,$ SP)在你明天$ rr之前彈出它。 –