1、EAX
编号:0
存储数据范围:0x00000000 - 0xFFFFFFFF
用途:累加器
2、ECX
编号:1
存储数据范围:0x00000000 - 0xFFFFFFFF
用途:计数
3、EDX
编号:2
存储数据范围:0x00000000 - 0xFFFFFFFF
用途:I/O指针
4、EBX
编号:3
存储数据范围:0x00000000 - 0xFFFFFFFF
用途:DS段的数据指针
5、ESP
编号:4
存储数据范围:0x00000000 - 0xFFFFFFFF
用途:堆栈指针
6、EBP
编号:5
存储数据范围:0x00000000 - 0xFFFFFFFF
用途:SS段的数据指针
7、ESI
编号:6
存储数据范围:0x00000000 - 0xFFFFFFFF
用途:字符串操作的源指针,SS段的数据指针
8、EDI
编号:7
存储数据范围:0x00000000 - 0xFFFFFFFF
用途:字符串操作的目标指针,ES段的数据指针
注意上面的用途是CPU在设计的时候建议用途,并不一定要这样使用。
最好将这8个32位通用寄存器背熟EAX、ECX、EDX、EBX、ESP、EBP、ESI、EDI以及它们对应的编号。
再简单介绍一下16位和8位寄存器
寄存器 | 编号(二进制) | 编号(十进制) | ||
---|---|---|---|---|
32位 | 16位 | 8位 | ||
EAX | AX | AL | 000 | 0 |
ECX | CX | CL | 001 | 1 |
EDX | DX | DL | 010 | 2 |
EBX | BX | BL | 011 | 3 |
ESP | SP | AH | 100 | 4 |
EBP | BP | CH | 101 | 5 |
ESI | DI | DH | 110 | 6 |
EDI | SI | BH | 111 | 7 |
上面的表格看出什么来了吗?这几个32位寄存器就是由16位扩展而来,去掉前面的E就是16位。16位就是从32位中间切一刀,而8位就是从16位中间再切一刀。8位中有高8位和低8位,以EAX为例,高8位就是AH,低8位就是AL,ECX、EDX和这一样。如果我们在汇编中使用mov ax,0x1指令,则会改变后4位的值(注意是16进制),汇编中使用move ah,0x1指令,则会改变第三和第四位的值(从右往左数)。