寄存器的分类:
通用寄存器:数据寄存器、指针寄存器、变址寄存器
(1)数据寄存器
数据寄存器主要用来保存操作数和运算结果等信息,从而节省读取操作数所需占用总线和访问存储器的时间。
32位CPU有4个32位的通用寄存器
EAX(累加器)、EBX(基址寄存器)、ECX(计数寄存器)、EDX(数据寄存器)。
16位:
AX(累加器)、BX(基址寄存器)、CX(计数寄存器)、DX(数据寄存器)。
8位寄存器组:
AX:AH、AL
BX:BH、BL、
CX:CH、CL
DX:DH、DL 8位寄存器,
只能存放8位数据,不能存放地址。
AX中0-7八位为低位,表示为AL寄存器;8-15八位为高位,表示为AH寄存器;
(AH对应AX的高8位、AL对应AX的低8位,AX对应EAX的低16位)
16位常见寄存器介绍:
数据寄存器包括: 8088/8086含4个16位数据寄存器,它们又可分为8个8位寄存器,即:
AX:累加器。所有I/O指令都通过AX与接口传送信息,中间运算结果也多放于AX中;
BX:基址寄存器。在间接寻址中用于存放基地址;
CX:计数寄存器。用于在循环或串操作指令中存放计数值;
DX:数据寄存器。在间接寻址的I/O指令中存放I/O端口地址;在32位乘除法运算时,存放高16位数。
(2)指针寄存器
32位:EBP、ESP。
EBP为基指针寄存器,用它可直接存取堆栈中的数据。
ESP为堆栈指针寄存器,用它只可访问栈顶。
16位:BP(基址指针寄存器)、SP(堆栈指针寄存器)。
16位指针寄存器:
SP:堆栈指针寄存器,其内容为栈顶的偏移地址;
BP:基址指针寄存器,常用于在访问内存时存放内存单元的偏移地址。
BX与BP在应用上的区别
作为通用寄存器,二者均可用于存放数据;
作为基址寄存器,用BX表示所寻找的数据在数据段;用BP则表示数据在堆栈段。
(3)变址寄存器
32位:ESI(源变址寄存器)、EDI(目的变址寄存器)。主要用于存放存储单元在段内的偏移量。
16位:SI(源变址寄存器)、DI(目的变址寄存器)。
变址寄存器在指令中常用于存放数据在内存中的地址。
(4)段寄存器
32位:ECS(代码段寄存器)、 EDS(数据段寄存器)、 ESS(堆栈段寄存器)
EES(附加段寄存器)、EFS(附加段寄存器)、EGS(附加段寄存器)。
16位:CS(代码段寄存器)、DS(数据段寄存器)、
SS(堆栈段寄存器)、ES(附加段寄存器)。
CS(代码段) 指明代码段的起始地址
SS(堆栈段) 指明堆栈段的起始地址
DS(数据段) 指明数据段的起始地址
ES(附加段) 指明附加段的起始地址
存放相应段的段基址的高16位。每个段寄存器用来确定一个逻辑段的起始地址
(5)指令指针寄存器
32位:EIP。
16位:IP。
指令指针EIP、IP是存放下次将要执行的指令在代码段的偏移量。
(6)标志寄存器flag
标志寄存器也称程序状态字寄存器。
16位:状态标志共6位,CF、PF、AF、ZF、SF和OF。
最好做习题理解这个标志位。