MENU

寄存器|汇编语言

February 24, 2019 • 我爱学习

  这篇文章主要来描述8086CPU的寄存器结主要结构及其各自用途

  首先,8086CPU有14个寄存器,其中有八个通用寄存器
    AX(ACC/Accumulator):累加器;
    BX(Base):基址寄存器;
    CX(Count):计数寄存器;
    DX(Data):数据寄存器;
    SP(Stack Pointer):堆栈寄存器;
    BP(Base Pointer):基址指针寄存器;
    SI(Source Index):源变址寄存器;
    DI(Destination Index):目的变址寄存器;
  两个控制寄存器
    IP(Instruction Pointer):指令指针寄存器;
    FLAGS :标志寄存器;
  四个段寄存器
    CS(Code Segment)代码段寄存器 ;
    DS(Data Segment):数据段寄存器 ;
    SS(Stack Segment):堆栈段寄存器 ;
    ES(Extra Segment):附加段寄存器 ;

一、通用寄存器

  1.数据寄存器

  数据寄存器包括AX,BX,CX,DX四个寄存器;每个16位数据寄存器都可以拆分成两个8位寄存器,用H和L来区分高低位。如AH是高位寄存器,AL是低位寄存器。

  数据寄存器可以用来存放参加运算的操作数,也可以存放指令运算的结果,多数情况下,使用这些寄存器需在指令中明确指示。(非隐式使用)

例:
MOV AX , BX;    将BX的内容送到AX中
ADD CH , DH;    将CH与DH中的内容相加,结果存在CH中

隐式使用:在使用某些指令时,不用指明寄存器名,即默认使用某些寄存器。如循环指令LOOP中,默认使用CX作为计数器。

特定使用:个别指令要使用到特定某个寄存器,并且在使用此命令时需要指明此寄存器的名字。如移位指令SHL AX  , CL; 其中CL被固定用作表示移位次数。

2、指针寄存器

  分为基址指针寄存器BP和堆栈指针寄存器SP,通常被用来表示逻辑地址的偏移量。
  SP指针——在进行对战操作时,被隐含使用,被用来指向栈顶。
  BP指针——被用来指向堆栈内某一储存单元。BP除此用途外,还可以像数据寄存器一样存放操作数和运算结果。

3、变址寄存器

  包含源变址寄存器SI和目标变址寄存器DI。一般被用来做地址指针,16位长。
  指向源数据和目标数据的地址,也可以用做数据寄存器。

二、段寄存器

   CPU在使用储存器时,会将其分为若干分段(一个程序将存储器划分成多少个短时无所谓的,但是程序运行时只能有四个段,因为CPU中只有四个段寄存器)。
  每个段用来存放不同的内容,代码,数据。。。
  每个段寄存器中储存的是相应段的段基址。

  CPU访问存储器时要明确两个内容:存储器属于哪个段(段机址),和存储单元与段基址相距多少(偏移量)。

三、指令指针寄存器

  CPU从储存器中读取指令时,需要以代码段寄存器CS中的内容作为段基址,以IP中的内容作为偏移量,共同形成一条指令的存放地址。
  在CPU读取过一条指令之后,IP的内容会自动修改指向下一条指令。
  IP之中的内容不能直接访问,既不能去使用指令读取IP的值,也不能用指令给它赋值,但是可以通过某些指令的执行从而自动修改IP的内容。

如:
  转移指令将指令中的目的地址的偏移量送入IP;
  子程序调用指令CALL,将IP中原有的内容送入堆栈,将子程序的入口地址偏移量自动送入IP,而返回指令RET,又自动从堆栈中弹回原有IP内容。

四、标志寄存器

标志寄存器被用来反映CPU在运算过程中的某些状态
在8086CPU中,标志寄存器长度为16位,但只定义了其中9位。

  CF(carry flag) 进位标志 最高有效位(第15位或第七位)产生进位时为1,否则为0;或在移位指令中,用来储存最高位或最低位被移出的数值。
  PF(parity flag) 奇偶标志 运算结果低八位操作数位为1的个数为偶数个时为1,否则为0.
  AF(auxiliary carry flag) 辅助进位标志 运算时,第3位向第4位产生进位时为1,否则为0.
  ZF(zero flag) 零标志 运算结果等于0时为1,否则为0.
  SF(sign Flag) 符号标志 记录运算结果的符号,结果负时为1.
  TF(trap flag) 单步标志位 用于调试单步操作.
  IF(interrupt flag) 中断允许位 IF=1时,允许CPU响应可屏蔽中断,否则关闭中断.
  DF(direcion flag) 方向标志 用于串处理.DF=1时,每次操作后使SI和DI减小.DF=0时则增大.
  OF(overflow flag) 溢出标志 操作数超出机器能表示的范围表示溢出,溢出时为1.
标志位还分为状态标志与控制标志:
  状态标志:CF(进位标志),PF(奇偶标志),AF(辅助进位),ZF(零值位),OF(溢出标志);
  控制标志:TF(单步标志),DF(方向标志),IF(中断允许位);

Last Modified: September 8, 2021