2012-12-21 63 views
0

我試圖找到一種方法,這樣做bOR $a0, $a1, $a2 else,像在Java if(a=b||a=c){blablabla}else{blabla},但我不想出一個辦法做到這一點在MIPS32。任何想法?可能是OR分支mips32?

+0

你可以寫在C(例如)的代碼,然後編譯和拆卸。 –

回答

0

假設你有a$a0b$a1c$a2那麼你會做

beq $a0, $a1, if 
    beq $a0, $a2, if 
    bgez $zero, else 
if: 
    .. code if a=b or a=c 
    bgez $zero, endif 
else: 
    .. code otherwise 
endif: 
+0

它的作品,謝謝! :) – qwerty

0

它一直以來的青睞我做任何集會,但由於沒有人迴應,這是我記得的東西。我希望你接受這個答案,如果沒有其他理由,那麼我會重新爲你做最糟糕的噩夢。

做任何種類的組合邏輯的,你需要做比較,其次是條件跳轉。因此,舉例來說,一個的if/else形式的語句:

if (a == b || a == c) { 
    cond1 
} 
else { 
    cond2 
} 
cond3 

被翻譯如下(僞代碼):

cmp a,b 
    je cond1 
    cmp a,c 
    je cond1 
    ... 
cond2: 
    ... 
    jmp cond3 

cond1: 
    ... 
cond3: 
    ... 

CMP比較值,乙腦是一種有條件的分支跳轉如果最後的比較顯示值相等。基本上,你使用gotos到處都是。再次,這是僞代碼,但您應該很容易找到MIPS類似物。

說到這,我發現這一點: http://jjc.hydrus.net/cs61c/handouts/loops4.pdf

+0

mmmm但我得到的問題實際上是在比較中,因爲如果只能添加2個參數以mips進行比較,因爲只有二進制答案,我可以取出b和c之外的間隔,但如果例如i說,這是無效的,當A qwerty

0

x86代碼,但它應該給一個想法。

cmp  eax, ebx 
    je  blablabla 
    cmp  eax, ecx 
    jne  blabla 

blablabla: ; if a == b || a == c 
    ;do your blablabla sutff here 
    jmp  Continue 

blabla: ; else 
    ;do your blabla sutff here 

Continue: