可能OR分支mips32?

时间:2012-12-21 00:51:28

标签: assembly mips32

我正试图找到一种方法来执行类似bOR $a0, $a1, $a2 else之类的东西,例如java中的if(a=b||a=c){blablabla}else{blabla},但我不知道如何在mips32中做到这一点。有什么想法吗?

3 个答案:

答案 0 :(得分: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

答案 1 :(得分: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:

答案 2 :(得分: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: