0

我正在尝试找到一种方法来做类似bOR $a0, $a1, $a2 else的事情,比如if(a=b||a=c){blablabla}else{blabla}在 java 中,但我不知道在 mips32 中做这件事的方法。任何的想法?

4

3 回答 3

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 是一个条件分支,如果最后一次比较显示值相等,则跳转。基本上,您到处都在使用 goto。同样,这是伪代码,但您应该很容易找到 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 回答
0

假设你有ain $a0, bin$a1cin$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 回答