汇编语言-80x86寄存器组

寄存器可以分为程序可见的寄存器程序不可见的寄存器两大类。

程序可见的寄存器可以分为以下三类:

  • 通用寄存器
  • 专用寄存器
  • 段寄存器

通用寄存器

数据寄存器

AX、BX、CX、DX可称为数据寄存器,用来暂时存放计算过程中所用到的操作数。它们是16位,但也可以按字节访问,比如AH(高位字节)和AL(低位字节)。

AX

(accumulator),作为累加器用,所以是算术运算的主要寄存器。

BX

(base),在计算存储器地址时,常用作基址寄存器。

CX

(count),常用来保存计数值,如在移位指令、循环指令和串处理指令中用作隐含的计数器。

DX

(data),一般在作双字长运算时把DX和AX组合在一起存放一个双字长数,DX用来存放高位字。

指针寄存器

可以存放操作数,但只能以字为单位使用。

SP

(stack pointer),堆栈指针寄存器。

BP

(base pointer),基址指针寄存器。可以和堆栈段寄存器SS联用来确定堆栈段中的某一存储单元的地址。

SI

(source index),源变址寄存器,一般与数据段寄存器DS联用,用来确定数据段中某一存储单元的地址。

DI

(destination index),目的变址寄存器,一般与数据段寄存器DS联用,用来确定数据段中某一存储单元的地址。

※SI和DI有自动增量和自动减量的功能。

串处理指令中,SI和DI作为隐含的源变址和目的变址寄存器,此时SI和DS联用,DI和附加段寄存器ES联用,分别达到在数据段和附加段中寻址的目的。

专用寄存器

IP

(instruction pointer),指令指针寄存器,它用来存放代码段中的偏移地址。

在程序运行的过程中,它始终指向下一条指令的首地址,它与段寄存器CS联用确定下一条指令的物理地址。

SP

(stack pointer),堆栈指针寄存器,存放栈顶的偏移地址与堆栈段寄存器SS联用来确定堆栈段中栈顶的地址。

FLAGS

标志寄存器,又称为程序状态寄存器(program status word,PSW)。

条件标志

  • 溢出标志

    (overflow flag,OF),运算溢出时为1,否则为0。

  • 符号标志

    (sign flag,SF),运算结果为负时为1,否则为0。

  • 零标志

    (zero flag,ZF),运算结果为0时为1,否则为0。

  • 进位标志

    (carry flag,CF),记录运算时从最高有效位产生的进位值。有进位时为1,否则为0。

  • 辅助进位标志

    (auxiliary carry flag,AF),..…

  • 奇偶标志

    (parity flag,PF),结果操作数中1的个数为偶数时为1否则置0

控制标志

方向标志(direction flag),在串处理指令中控制处理信息的方向用。

DF为1时,高地址到低地址,即倒着来。

DF为0时,低地址到高地址,即正着来。

系统标志

  • 陷阱标志

    (trap flag,TF),用于调试时的单步方式操作。

    TF为1时,产生陷阱;否则不产生。

  • 中断标志

    (interrupt flag,IF),当其为1时,允许CPU响应中断;否则不允许。

段寄存器

段寄存器也是一种专用寄存器,专用于存储器寻址,用来直接或间接存放段地址

  • 代码段

    (code segment,CS),存放当前正在运行的程序。

  • 数据段

    (data segment,DS),存放当前运行程序所用的数据。

    如果程序使用了串处理指令,则其源操作数也存放在数据段里。

  • 堆栈段

    (stack segment,SS)

  • 附加段

    (extra segment,ES),附加的数据段,作为辅助的数据区,也是串处理指令的目的操作数存放区。


作者:@臭咸鱼

转载请注明出处:https://chouxianyu.github.io

欢迎讨论和交流!