抱歉这个无知的问题,但我对 x86 感到很困惑。
EDX 与 DX 本质上是相同的寄存器吗?我知道 EDX 是 32 位,而 DX 是 16 位。
如果我将 0x1 移动到 EDX,0x1 也会在 DX 中吗?
[76543210 76543210 76543210 76543210 76543210 76543210 76543210 76543210] bits
[ RDX ]
[ EDX ]
[ DX ]
[ DH ][ DL ]
DX 只是 EDX 的低 16b :)
mov EDX, 0x1; --> DX = 0x1
mov EDX, 0x12345678; --> DX = 0x5678
此外,如果您在 64 位系统上,EDX 是 RDX 寄存器的低 32 位,它是一个 64 位寄存器。
您可以将其视为指针:
long theRealRDX;
long * rdx = &theRealRDX;
int * edx = (int*)&theRealRDX;
short int * dx = (short int*)&theRealRDX;
char * dl = (char*)&theRealRDX;
除了 nrz 评论中提到的高部分擦除