汇编指令之寄存器


学习来自
寄存器-百度百科
寄存器详解(DX:数据寄存器)
七种寻址方式(立即寻址、寄存器寻址)

8086寄存器分类:

8086有14个16位寄存器,这14个寄存器按其用途可分为:

  1. 通用寄存器(8个):AX、BX、CX、DX 和 SI、DI、SP、BP
  2. 指令指针(1个):IP
  3. 标志寄存器(1个):FR
  4. 段寄存器等(4个):ES、CS、SS、DS

386还有四个32位的控制寄存器,它们是CR0,CR1,CR2和CR3。[学习连接后面补充]

汇编指令之寄存器

1. 通用寄存器(8个):AX、BX、CX、DX 和 SI、DI、SP、BP

汇编 eax寄存器和AX,AH,AL之间的关系
那么如何理解eax,ax,al(ah)之间的关系
专业点可以这样解释:eax是32位寄存器,ax是16位寄存器,al(ah)是八位寄存器。
那么eax存储的数据就是ax的两倍,ax是al(ah)的两倍。
Eax可以存储的数字是DWORD(双字)ax存储的是WORD(字)AL(AH)存储的是BYTE(字节),那么为什么又有AH和AL呢,我们可以这样理解,AX=AH+AL,AH存储的是AX的高8位数据,AL存储的是AX的低八位数据。H这里就是HIGH,L就是LOW.

  • 数据寄存器(4个)
    • AH&AL=AX(accumulator):累加寄存器,常用于运算;在乘除等指令中指定用来存放操作数,另外,所有的I/O指令都使用这一寄存器与外界设备传送数据。EAX:通用寄存器。相对其他寄存器,在进行运算方面比较常用。在保护模式中,也可以作为内存偏移指针(此时,DS作为段寄存器或选择器)
    • BH&BL=BX(base):基址寄存器,常用于地址索引。EBX:通用寄存器。通常作为内存偏移指针使用(相对于EAX、ECX、EDX),DS是默认的段寄存器或选择器。在保护模式中,同样可以起这个作用。
    • CH&CL=CX(count):计数寄存器,常用于计数;常用于保存计算值,如在移位指令,循环(loop)和串处理指令中用作隐含的计数器。ECX:通用寄存器。通常用于特定指令的计数。在保护模式中,也可以作为内存偏移指针(此时,DS作为寄存器或段选择器)。
    • DH&DL=DX(data):数据寄存器,常用于数据传递。EDX:通用寄存器。在某些运算中作为EAX的溢出寄存器(例如乘、除)。
  • 指针寄存器及变址寄存器(4个)
    • SI(Source Index):源变址寄存器,可用来存放相对于DS段之源变址指针。ESI:通常在内存操作指令中作为“源地址指针”使用。当然,ESI可以被装入任意的数值,但通常没有人把它当作通用寄存器来用。DS是默认段寄存器或选择器。
    • DI(Destination Index):目的变址寄存器,可用来存放相对于ES 段之目的变址指针。EDI:通常在内存操作指令中作为“目的地址指针”使用。当然,EDI也可以被装入任意的数值,但通常没有人把它当作通用寄存器来用。ES是默认段寄存器或选择器。
    • SP(Stack Pointer):堆栈指针,与SS配合使用,可指向目前的堆栈位置
    • BP(Base Pointer):基址指针寄存器,可用作SS的一个相对基址位置
      EBP和ESP:作为指针的寄存器,也可作为16位寄存器BP, SP使用,常用于椎栈操作。通常,它被高级语言编译器用以建造‘堆栈帧’来保存函数或过程的局部变量,不过,还是那句话,你可以在其中保存你希望的任何数据。SS是它的默认段寄存器或选择器。

2. 指令指针(1个):IP

指令指针IP是一个16位专用寄存器,它指向当前需要取出的指令字节,当BIU从内存中取出一个指令字节后,IP就自动加(取出该字节的长度,如:BIU从内存中取出的是1个字节,IP就会自动加1,如果BIU从内存中取出的字节数长度为3,IP就自动加3),指向下一个指令字节。
注意,IP指向的是指令地址的段内地址偏移量,又称偏移地址(Offset Address)或有效地址(EA,Effective Address)。

3. 标志寄存器(1个):FR

8086有一个16位的标志性寄存器FR,在FR中有意义的有9位,其中6位是状态位,3位是控制位。标志寄存器(Flags Register,FR)又称程序状态字(Program Status Word,PSW)。
汇编指令之寄存器

4. 段寄存器等(4个):ES、CS、SS、DS

段寄存器等(4个):ES、CS、SS、DS
四个段寄存器,专门用来保存段地址:

  • CS(Code Segment):代码段寄存器
  • DS(Data Segment):数据段寄存器
  • SS(Stack Segment):堆栈段寄存器
  • ES(Extra Segment):附加段寄存器。