• 汇编语言ADDR运算符:传递指针参数

    ADDR 运算符同样可用于 32 位模式,在使用 INVOKE 调用过程时,它可以传递指针参数。比如,下面的 INVOKE 语句给 FillArray 过程传递了 myArray 的地址:

    INVOKE FillArray, ADDR myArray

    传递给 ADDR 的参数必须是汇编时常数。下面的例子就是错误的:

    INVOKE mySub, ADDR [ebp+12 ]          ;错误

    ADDR 运算符只能与 INVOKE 一起使用,下面的例子也是错误的:

    mov esi, ADDR myArray                         ;错误

    【示例】下例中的 INVOKE 伪指令调用 Swap,并向其传递了一个双字数组前两个元素的地址:

    .data
    Array DWORD 20 DUP(?)
    .code
    ...
    INVOKE Swap,
        ADDR Array,
        ADDR [Array+4]

    假设使用 STDCALL 规范,那么汇编器生成的相应代码如下所示:

    push OFFSET Array+4
    push OFFSET Array
    call Swap

更多...

加载中...