0

是否可以在汇编中执行与此类似的程序代码:

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

如您所见,我想调用number2part from number1,执行number2代码并返回到我跳到时离开的位置number2

你有什么想法吗?

4

1 回答 1

0

...并回到我跳到number2时离开的位置。

我猜你的意思是你跳之后?如果您返回跳跃,您将处于无限循环中。如果是这样,您可以使用call而不是jmpas(数字是执行顺序):

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

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

于 2013-10-23T15:30:54.457 回答