跳转到 x86 汇编语言中的特定行

And*_*een 3 x86 assembly masm

在 x86 汇编语言中,是否可以指定跳转到特定行号?在这里,我正在尝试使用jmp行号 3的指令。(我还不知道一种将标签作为参数传递给函数的方法,所以我尝试使用行号而不是在这种情况下标签。)

.686p
.model flat,stdcall
.stack 2048
.data

ExitProcess proto, exitcode:dword
.code

start:

jmp 3; this produces the error shown below

mov ax, 0
mov bx, 0
mov ah, 1

invoke  ExitProcess, 0
end start
Run Code Online (Sandbox Code Playgroud)

上面的代码产生错误1>p4.asm(11): error A2076: jump destination must specify a label

Car*_*rum 7

您可以在该行放置一个标签。根据您的汇编语言方言,您可能能够使用数字本地标签,或者您可能需要使用符号标签。一个可能的例子如下。我这里只有 NASM 来测试,所以我不确定这个例子是否能很好地映射到 MASM,但你应该明白:

start:
    jmp .line3
    mov ax, 0
.line3:
    mov bx, 0
    mov ah, 1
Run Code Online (Sandbox Code Playgroud)

NASM 使用前导.来标识局部标签。

  • 这取决于调用约定,但对于 ia32,将适当的地址推送到堆栈上的正确位置即可。对于 x86_64,您需要将它放在适当的寄存器中。类似于`lea rcx, label`。 (3认同)