目录
[案例1:mov al, 98(修改低8位)](#案例1:mov al, 98(修改低8位))
[案例3:mov ah, 0xFF(修改高8位)](#案例3:mov ah, 0xFF(修改高8位))

一、32位寄存器中支持高低八位的寄存器
在32位x86架构中,只有以下4个寄存器 同时支持低8位 和高8位的独立访问:
| 32位寄存器 | 低8位寄存器 | 高8位寄存器 | 说明 |
|---|---|---|---|
| EAX | AL | AH | 累加器,最常用 |
| EBX | BL | BH | 基址寄存器 |
| ECX | CL | CH | 计数器寄存器 |
| EDX | DL | DH | 数据寄存器 |
其余寄存器(ESI、EDI、EBP、ESP)只有低8位访问方式,没有对应的高8位寄存器。
二、低八位与高八位的基本概念
32位寄存器由4个字节组成(32位),以 EAX 为例,其结构如下:
EAX = | Byte 3(31-24位) | Byte 2(23-16位) | Byte 1(15-8位) | Byte 0(7-0位) |
最高字节 中字节 高8位(AH) 低8位(AL)
-
低8位:Byte 0(最低有效字节),对应 AL/BL/CL/DL
-
高8位:Byte 1(第8-15位),对应 AH/BH/CH/DH
三、实际案例与二进制编码
案例1:mov al, 98(修改低8位)
mov eax, 0x12345678
mov al, 98
执行前(EAX = 0x12345678)二进制:
0001 0010 0011 0100 0101 0110 0111 1000
Byte3 Byte2 Byte1(AH) Byte0(AL)

执行后(EAX = 0x12345662)二进制:
0001 0010 0011 0100 0101 0110 0110 0010
Byte3 Byte2 Byte1(AH) Byte0(AL)
变化:
-
AL(低8位):
0111 1000(0x78) →替换0110 0010(0x62 = 98) -
AH(高8位):
0101 0110(0x56) 保持不变

案例2:同时操作低8位和高8位(EBX)
mov ebx, 0x00000000
mov bl, 0xAB ; 修改低8位
mov bh, 0xCD ; 修改高8位
执行后 EBX = 0x0000CDAB
二进制显示:
0000 0000 0000 0000 1100 1101 1010 1011
Byte3 Byte2 Byte1(BH) Byte0(BL)
高8位 = 0xCD 低8位 = 0xAB
案例3:mov ah, 0xFF(修改高8位)
执行前:
... 0101 0110 0111 1000 (AH=0x56, AL=0x78)
执行后:
... 1111 1111 0111 1000 (AH=0xFF, AL=0x78)
EAX 变为 0x1234FF78
四、64位寄存器中的低高八位
64位寄存器(RAX等)包含8个字节,低高八位的访问方式与32位完全兼容:
RAX = | Byte7 | Byte6 | Byte5 | Byte4 | Byte3 | Byte2 | Byte1(AH) | Byte0(AL) |
案例4:64位下修改低8位
mov rax, 0x1122334455667788
mov al, 0x99
执行后 :最低字节变为 0x99,结果为 0x1122334455667799
二进制局部变化(最低16位):
-
执行前:
0111 1000 1000 1000(AH=0x77, AL=0x88) -
执行后:
0111 1000 1001 1001(AH不变,AL=0x99)
五、总结
-
支持高低8位的寄存器 只有 EAX、EBX、ECX、EDX ,分别对应 AL/AH、BL/BH、CL/CH、DL/DH。
-
低8位 = 寄存器最低字节(第0-7位),高8位 = 第8-15位。
-
mov al, xx只修改最低8位,其他字节完全不变。 -
mov ah, xx只修改第8-15位(高8位),不影响低8位和其他高位字节。 -
这种字节级访问在字符处理、标志位操作、颜色值提取和汇编优化中非常常用。
