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