Assembly 汇编:在程序内部使用返回函数
是否可以在程序集中执行类似于此代码的过程:Assembly 汇编:在程序内部使用返回函数,assembly,x86,return,procedure,Assembly,X86,Return,Procedure,是否可以在程序集中执行类似于此代码的过程: 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 如您所见,我想从
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
如您所见,我想从number1
调用number2
部分,执行number2
code并返回跳到number2
时离开的位置
你知道怎么做吗
。。。回到我跳到2号时离开的位置
我猜你是说在你跳下去之后?如果您返回到跳转,您将处于无限循环中。如果是这样,您可以使用call
而不是jmp
as(数字是执行顺序):
不使用调用的另一种方法
:
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
我不知道您使用的是什么汇编程序,但假设标签是正确的。不清楚问题出在哪里。
@@number2
部分直接跟在@@number1
部分后面,因此不需要跳转到它。你能用一个更现实的例子吗?@Michael-我想知道如何从程序中的数字1跳到数字2段。跳转到number2段之后,我想执行number2段中的代码,然后我想返回number1段。我不想回到第1段,我想回到我对编译器说跳到第2段的地方。也许现在更清楚了?:)我当时没有写过例子,但你为什么要这么做呢?其效果是您将执行两次@@number2
部分。这就是你想要实现的吗?您是否尝试过使用调用指令?
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