我试图找到一种方法来做一些类似bOR $a0, $a1, $a2 else的事情,比如java中的if(a=b||a=c){blablabla}else{blabla},但是我想不出在mips32中做这件事的方法。有什么想法吗?
发布于 2012-12-21 09:33:04
假设您在$a0中有a,在$a1中有b,在$a2中有c,那么您应该这样做
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-21 09:00:21
我已经很久没有做过任何组装了,但由于没有人回应,这是我记得的。我希望你接受这个答案,如果没有其他原因,我正在为你重新经历我最糟糕的噩梦。
要在汇编中执行任何类型的逻辑,都需要进行比较,然后是条件跳转。例如,一个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-21 09:06:09
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:https://stackoverflow.com/questions/13982820
复制相似问题