我正在尝试创建一个将变量与0进行比较的汇编程序,如果它低于0则跳转:
mov eax, [ebx]
cmp eax, 0
jl input1
但是,我跳转到一个 ret 的标签,因此它需要在子例程完成时返回的位置。如何在跳转之前找到指令指针的当前位置并将其推入堆栈?
这是input1子程序:
input1:
push inputnumber
lea eax, inputmsg
push eax
call printf
add esp, 8
push ebx
lea eax, format
push eax
call scanf
add esp, 8
ret
答案 0 :(得分:3)
使用call
。由于没有条件版本,请使用反向条件跳转跳过它。 E.g。
mov eax, [ebx]
cmp eax, 0
jge skip ; reversed jl
call input1
skip:
...
如果它应该是一个范围检查循环,例如:
do {
inputnumber = input1();
} while (inputnumber < 0 || inputnumber > 100);
然后你可以这样做:
repeat:
call input1
mov eax, [inputnumber]
cmp eax, 0
jl repeat
cmp eax, 100
jg repeat