0

私はJava のbOR $a0, $a1, $a2 elseような何かを行う方法を見つけようとしif(a=b||a=c){blablabla}else{blabla}ていますが、mips32 でそれを行う方法がわかりません。何か案が?

4

3 に答える 3

0

aあなたがに$a0b$a1、そしてあなたがするだろうと仮定cします$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:
于 2012-12-21T01:33:03.537 に答える
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 は値を比較し、je は最後の比較で値が等しいことが示された場合にジャンプする条件分岐です。基本的に、どこでも gotos を使用しています。繰り返しますが、これは疑似コードですが、MIPS の類似物を簡単に見つけることができます。

そういえば、これを見つけました: http://jjc.hydrus.net/cs61c/handouts/loops4.pdf

于 2012-12-21T01:00:20.547 に答える
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:
于 2012-12-21T01:06:09.117 に答える