rdx与edx之间的关系
在x86架构中,RDX和EDX是密切相关的寄存器,它们属于同一寄存器组的不同部分,体现了x86的寄存器层次结构。以下是它们的关系和区别:
1. 寄存器层次
- RDX:64位寄存器(在x86-64架构中引入)。
- EDX:32位寄存器,是
RDX的低32位部分。 - DX:16位寄存器,是
EDX的低16位部分。 - DH/DL:8位寄存器,分别是
DX的高8位(DH)和低8位(DL)。
它们的结构如下(从高位到低位):
64位: |----------------------------- RDX -----------------------------|
32位: |--------------- EDX ----------------|
16位: |------- DX --------|
8位: |-- DH --|-- DL --|
2. 操作时的行为
- 写入
EDX时:会清零RDX的高32位(即RDX的高32位被置0,低32位更新为EDX的值)。
例如:mov edx, 0x12345678 ; RDX = 0x0000000012345678 - 写入
RDX时:会同时更新EDX(因为EDX是RDX的一部分)。mov rdx, 0xFFFFFFFF87654321 ; EDX = 0x87654321
3. 用途
- EDX:在32位模式下,常用于存储数据、乘除法的高位结果(如
MUL/DIV)、函数返回值等。 - RDX:在64位模式下扩展为64位,用途类似(如64位乘除法、系统调用参数等)。
4. 示例代码
; 64位模式下
mov edx, 0x1234 ; RDX = 0x0000000000001234 (高32位清零)
mov rdx, 0xFFFFFFFF ; EDX = 0xFFFFFFFF (RDX完整更新)
mov eax, edx ; 读取EDX的值
5. 注意事项
- 在x86-64中,对32位寄存器(如
EDX)的写入会隐式清零高32位,但对16位或8位寄存器的操作(如DX/DL)不会影响高位。 - 这种设计保持了向后兼容性,允许32位代码在64位模式下正常运行。
如果需要保留高位数据,需使用64位(RDX)操作。
Do not communicate by sharing memory; instead, share memory by communicating.

浙公网安备 33010602011771号