Microsoft内联汇编和引用,或者在这种情况下为什么BYTE PTR [ByteRef]不起作用?

| 好的,所以我有一个C ++函数,在其中尝试使用内联汇编
void ToggleBit(unsigned char &Byte, unsigned int Bit)
{
    /* In C:
    *    Byte ^= (1<<Bit);
    */
    __asm
    {
        push edx
        push ecx
        mov  ecx, Bit
        xor  edx, edx
        mov  edx, 1
        sal  dl, cl
        xor  BYTE PTR [Byte], dl
        pop  ecx
        pop  edx
    }
}
这应该工作,对不对?由于Byte是一个引用(本质上是一个常量指针),因此必须取消引用它才能访问数据...但是它没有用! 在调试以下代码后:
mov  edx, Byte           
;edx = 0x0040f9d3
mov  bl, BYTE PTR [Byte]
;bl = 0xd3
我不明白为什么会这样。     
已邀请:
如您所说,引用与汇编中的指针相同。要访问引用/指针,您必须首先读取指针值,然后取消引用它:
mov ecx, Byte      ; Or  mov ecx, [Byte]  which is the same thing
xor [ecx], dl
当您访问
BYTE PTR [Byte]
处的值时,它将访问指针值的第一个字节(指向的地址)而不是指向的值。     

要回复问题请先登录注册