вызов эквивалента условий прыжка - PullRequest
1 голос
/ 14 марта 2011

в сборке 80x86, есть ли эквивалентный способ использовать 'call', как мы делаем с 'je' 'jl' 'jg' 'jne'?я хочу 'звонить' только если условие выполнено ..?

я хочу реализовать:

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

используя je

спасибо!

Ответы [ 4 ]

4 голосов
/ 14 марта 2011

Не напрямую, нет - инструкция вызова всегда безусловна.В зависимости от того, что вы делаете с je / jl / etc., Вы можете получить (несколько) похожий эффект с косвенным вызовом, таким как call [ebx], и иметь таблицу переходов, которая содержит адрес 'null'процедура, которая будет вызываться при ebx = 0:

.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
2 голосов
/ 14 марта 2011

Использовать соответствующую команду перехода для перехода к оператору вызова?Вы уже пробовали это?

1 голос
/ 14 марта 2011

Вы также можете нажать на обратный адрес и перейти.

1 голос
/ 14 марта 2011

Как насчет перехода прямо на адрес звонка?

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