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