是否可以在汇编中执行类似于此的过程代码:
procedure proc near
push bp
mov bp, sp
mov si, word ptr[bp + 4]
@@number1:
do something and then
jmp @@number2
@@number2:
do something and then
ret
@@end
mov sp, bp
pop bp
procedure endp
如您所见,我想从number2
致电number1
部分,执行number2
代码并返回我跳到number2
时离开的位置
你有什么想法怎么做?
答案 0 :(得分:0)
...然后回到我跳到number2时离开的位置。
我猜你的意思是在跳之后?如果你回到跳跃,你将处于无限循环中。如果是这样,您可以使用call
而不是jmp
(数字是执行顺序):
procedure proc near
push bp ; 1
mov bp, sp ; 2
mov si, word ptr[bp + 4] ; 3
@@number1:
do something and then ; 4
call @@number2 ; 5
jmp @@end ; 8
@@number2:
do something and then ; 6
ret ; 7
@@end
mov sp, bp ; 9
pop bp ; 10
ret ; 11
procedure endp
另一种不使用call
的方式:
procedure proc near
push bp ; 1
mov bp, sp ; 2
mov si, word ptr[bp + 4] ; 3
@@number1:
do something and then ; 4
jmp @@number2 ; 5
@@number2_1:
jmp @@end ; 8
@@number2:
do something and then ; 6
jmp @@number2_1 ; 7
@@end:
mov sp, bp ; 9
pop bp ; 10
ret ; 11
procedure endp
我不知道您使用的汇编程序,但假设标签是正确的。