相当于跳跃条件

时间:2011-03-14 15:01:43

标签: assembly x86 nasm

在80x86汇编中,有没有像'je''jl''jg''jne'那样使用'call'的方法? 我只想在满足条件的情况下“打电话”..?

我想实施:

cmp   eax, 1
je    something
; and continuing from here
; ....
; ...
jmp   end
something:
    ret

使用je

谢谢!

4 个答案:

答案 0 :(得分:4)

不直接,不 - 调用指令始终是无条件的。根据你使用je / jl / etc进行的操作,你可以通过像call [ebx]之类的间接调用获得(某种程度上)类似的效果,并且拥有一个包含'a'地址的跳转表。当ebx = 0时将调用的null'过程:

.code
proc1 proc
    ; whatever
null_proc::
    ret
proc1 endp

proc2 proc
   ; whatever
   ret
proc2 endp

main proc
    lea ebx, jmp_table[eax]
    call [ebx]
main endp

.data

jmp_table dd null_proc, proc1, proc2

end

答案 1 :(得分:2)

使用适当的跳转命令跳转到call语句?你已经试过了吗?

答案 2 :(得分:1)

如何直接跳到通话地址?

cmp   eax, 1
je    address_of_the_call
; else code
; ....
; ....

答案 3 :(得分:1)

您也可以按下返回地址并跳转。