寄存器

寄存器

八个通用寄存器:

AX BX CX DX

SP BP SI DI

他们不仅仅是通用寄存器,还有特殊的用途,名字就是他们特殊用途的缩写,后面加 x 是为了好看,x 本身没有含义

  • AX ==> add 累加器,做加法时使用AX寄存器比较快
    AX = AX + BX 快于 BX = BX + CX
  • BX ==> base 基地址,基质寄存器
    在c语言中有访问数组或结构体是通过 (基址 + 偏移) 的方式访问的,CPU 规定基地址必须存放在BX中,当然操作系统也遵守
  • CX ==> count 计数器
    CPU规定:当使用循环指令时,所循环的次数只能存放在CX中
  • DX ==> data数据寄存器
    常用来存放双字长数据的高16位,或存放外设端口地址
  • SP ==> Stack Point 栈顶指针
  • BP ==> base Point 栈底指针
    这个也可以使用 基址 + 偏移 ,一般用于访问栈内元素,但也可以访问其他内存
  • SI ==> source 源寄存器 DI ==> Dest 目标寄存器
    一般用于内存中的拷贝,将源数据的地址存放在SI中,将目标地址存放在DI中

为了方便访问寄存器中的高8位和第八位cpu提供了一种方法:使用H和L

AX(AH AL) BX(BH BL) CX(CH CL) DX(DH DL)

对于SP BP SI DI 这四个寄存器中没有提供访问其高8位或低8位的指令,本质原因是因为他们存放的是地址,访问一个地址的高8位或低8位没有意义

ip寄存器

  • ip:instruction point指令指针

​ 也就是常说的 pc ,ip寄存器中存放着程序所要执行的下一条指令的地址

flag寄存器

标志(flag)用于反应指令执行结果或控制指令的执行形式

8086处理器的各种标志形成了一个16位的标志寄存器FGLAGS(程序运行状态字PSW寄存器)

CF PF AF ZF SF TF IF DF OF

状态标志:

​ --用来记录程序运行结果的状态信息,许多指令的执行都会相应设置这些标志位

CF ZF SF PF OF AF

  • 进位标志CF(Carry Flag)

    当运行结果的最高有效位有进位(加法)或接位(减法)时,进位标志置为1,即CF=1否则CF=0

    这个标志位的作用就是记录寄存器进位或者借位,也就是进位或借位没有丢失而是被保存到CF中了,这个常用来做多位运算(低位加低位,高位加高位再加上CF)

    3AH + 7ch = b6h 没有进位:CF = 0
    AAH + 7CH = (1)26H 有进位 :CF=1

  • 零标志位 ZF
    计算结果为0时,将这个标志位置为1

  • 符号位SF(Sign Flag)
    运算结果最高位为1,则SF=1;否则SF=0
    有符号数据用最高位表示数据的符号,所以有效位就是符号位的标志,如果你做的是无符号运算那么忽略这个位即可

    PL:pluss NG:negative

  • 溢出标志位 OF(overflow)
    若算术运算符的结果有溢出,则OF=1,否则OF=0
    3AH + 7CH = B6H 产生溢出:OF=1
    AAH + 7CH = (1)26H 没有溢出:OF=0
    CPU根据传入的两个数和输出的数的符号进行判定:传入两个正数确输出一个负数那么溢出,传入两个负数输出一个正数那么溢出,这里的正数指的是最高位是否为1,计算器本身是没有没有正负之分

  • 奇偶标识PF
    当运算结果最低字节(低八位)中 1 的个数为零或者偶数时,PF=1;否则PF=0

  • 辅助进位AF(Auxiliary Carry Flag)
    运算时D3位(低半字节)有进位或借位时,AF = 1,否则AF = 0

控制标志:

​ --可由程序根据需要用的指令设置,用于控制处理器执行指令的方式

DF IF TF

  • 方向标志位 DF
    在拷贝数据时地址是增加还是减少

    设置DF=0,存储器地址自动增加、设置DF=1,存储器地址自动减少

    对于两条指令 cld std cld相当于df=0(递增) std相当于df=1(递减)

  • 屏蔽中断标志位 IF(Interrupt-enable Flag)
    设置 IF=1,允许中断、设置IF=0,禁止中断

  • 陷阱标志位TF(Trap Flag)

    用于控制处理器进入单步操作方式

    设置TF=0,处理器正常工作,设置TF=1,处理器单步执行指令(用于调试)

在实际开发中常用的只有 CF ZF SF OF DF

posted @ 2023-01-26 21:34  satellite2002  阅读(204)  评论(0编辑  收藏  举报