2009-11-28 85 views
0

我正在爲一個簡單的計算器編寫MIPS代碼,並想知道如何根據用戶輸入分支到相應的函數。例如,如果用戶希望添加兩個數字,您如何確保計算器跳轉到添加標籤,而不是可能的乘法或減法?分支到標籤

+0

請發佈一些信息。你有什麼,你需要什麼。你已經有一些你可以告訴我們的代碼了嗎? – EricSchaefer 2009-11-28 17:47:55

+0

我有代碼,當用戶輸入要執行的函數(+ - * /)時,它將其作爲ascii值存儲在其中一個臨時寄存器中。我的問題是,如何確保用戶輸入的功能跳轉到執行該功能的正確標籤。 例如,如果用戶想要添加數字,則跳轉到添加而不是減去(如下所示)。 addnum: add.s $ F12,F1 $,$ F0#加在一起數量和投放系統調用結果寄存器 Ĵ結果 subnum: sub.s $ F12,F1 $,$ F0 Ĵ結果 – Taylor 2009-11-28 17:55:34

+0

我滾回到'[作業]'的添加 - 在這種情況下,您需要首先詢問它。請參閱http://meta.stackexchange.com/questions/10811/homework-on-stackoverflow – 2009-11-28 18:15:06

回答

1

將用戶輸入註冊到註冊表中。

然後使用beq指令將它與第一個ascii值比較,比如說'+'。

.data 
plus: .asciiz "+" 
sub: .asciiz "-" 
prod: .asciiz "*" 
div .asciiz "/" 

.text 
.global calculator 
.align 2 
.ent calculator 

calculator: 
    //t0 holds user input 

    la $t1,plus 
    lb $t1,0($t1) 
    beq $t0,$t1,add 

    //now check for subtraction, division product. Same code, just change the address (add) 

    //if none matched, jump to error 
    b error 

add: 
    //addition code goes here 
division: 
    //division code goes here 
product: 
    //product code goes here 
subtraction: 
    //subtraction code goes here. 

error: 
    //error code goes here. 
+0

據我所見,這種方法只能用於3種不同類型的輸入,而不是4種。所以我怎樣才能確保它如果有第四個值需要比較,則分支到另一個標籤? 假設用戶輸入'+'(ascii 43),並將其與ascii 45( - )進行比較,如果小於,則可以使用分支,但'*'的ascii也小於45,那麼我該如何確定它會轉到'+'標籤而不是'*'。 – Taylor 2009-11-28 18:49:10

+0

不要把它想成大於/小於。把它看成更像一個switch語句。 – Tom 2009-11-28 18:55:01

+0

我已經編碼了一個這樣的例子。如果有必要,會發布它,但試着理解這一點。 – Tom 2009-11-28 20:10:37