汇编:在程序中使用return函数

时间:2013-10-23 14:52:03

标签: 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

如您所见,我想从number2致电number1部分,执行number2代码并返回我跳到number2时离开的位置

你有什么想法怎么做?

1 个答案:

答案 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

我不知道您使用的汇编程序,但假设标签是正确的。