9

抱歉这个无知的问题,但我对 x86 感到很困惑。

EDX 与 DX 本质上是相同的寄存器吗?我知道 EDX 是 32 位,而 DX 是 16 位。

如果我将 0x1 移动到 EDX,0x1 也会在 DX 中吗?

4

4 回答 4

21
[76543210 76543210 76543210 76543210 76543210 76543210 76543210 76543210] bits
[                                  RDX                                  ]
                                    [                EDX                ]                 
                                                      [       DX        ]
                                                      [  DH    ][   DL  ]
于 2013-04-02T21:37:38.300 回答
12

DX 只是 EDX 的低 16b :)

mov EDX, 0x1;         --> DX = 0x1
mov EDX, 0x12345678; --> DX = 0x5678
于 2013-03-15T21:20:01.140 回答
4

此外,如果您在 64 位系统上,EDX 是 RDX 寄存器的低 32 位,它是一个 64 位寄存器。

于 2013-03-15T21:22:39.163 回答
1

您可以将其视为指针:

long theRealRDX;
long *     rdx = &theRealRDX;
int  *     edx = (int*)&theRealRDX;
short int * dx = (short int*)&theRealRDX;
char *      dl = (char*)&theRealRDX;

除了 nrz 评论中提到的高部分擦除

于 2013-03-15T21:42:24.340 回答