为了提高cpu的运算速度,减少访问存储器的存取操作,8086cpu内置了相应寄存器,用来暂存参加运算的操作数及运算的中间结果。指令通过寄存器实现对操作数的操作比通过存储器操作要快得多,因此在编程时,合理利用寄存器能提高程序的运行效率。8086cpu内部提供了14个16位的寄存器。
其结构如下:
通用寄存器
通用寄存器分为数据通用寄存器和地址指针与变址寄存器两组。
数据通用寄存器
数据通用寄存器包括ax、bx、cx和dx共4个16位寄存器,他们既可以作为16位寄存器使用,也可以将每个寄存器分开作为两个独立的8位寄存器使用,即高8位寄存器ah、bh、ch、dh和低8位寄存器al、bl、cl、dl。这些寄存器既可以作为目的操作地址,保存运算的中间结果或最后结果。
地址指针与变址寄存器
地址指针寄存器sp、bp与变址寄存器si、di主要用来存放或指示操作数的偏移地址,其中sp中存放当前堆栈段中栈顶的偏移地址。在进行堆栈操作时,sp的值随着栈顶的变化而自动改变,但始终指向栈顶位置;bp是访问堆栈时的基址寄存器,存放堆栈中某一存储单元的偏移地址,使用bp是为了访问堆栈区内任意位置的存储单元。
变址寄存器si和di用来存放当前数据所在段的存储单元的偏移地址。si和di除了可作为一般的变址寄存器使用外,在串操作指令中si规定用作存放源操作数(即源串)的偏移地址,故称为源变址寄存器;di规定用作存放目的操作数(即目的串)的偏移地址,故称为目的的变址寄存器。
上图中的8个16位通用寄存器在一般情况下都具备通用性,但为了缩短指令代码的长度,对某些通用寄存器又规定了专门的用途。列如在字符串处理指令和循环指令中,约定必须用cx作为计数器存放串的长度,这样可以简化指令书写形式。这种使用方法称为“隐含寻址”。
控制寄存器
控制寄存器和指令指针寄存器ip和标志寄存器flags两个。
指令指针寄存器ip
ip用来存放代码段中的偏移地址,在程序运行过程中,它始终指向下一条要执行的指令的首地址。ip实际上起着控制指令流的执行流程,是一个非常重要的控制寄存器。它的内容由biu自动修改,用户不能通过指令预置或直接修改,但有些指令的执行可以修改它的内容。譬如在遇到中断指令int或子程序调用指令call时,ip中的内容将被自动修改。
标志寄存器flags
标志寄存器flags用来保存在一条指令执行之后,cpu所处状态 的信息及运算结果的特征,该寄存器又称为程序状态字psw。8086cpu设置的是一个16位标志寄存器,但实际上只使用了其中的9位。这9位标志位又分为状态标志位和控制标志位两类。
状态标志位
状态标志位用来记录刚刚执行完算术运算、逻辑运算等指令后的状态特征,共有6个。
cf(进位标志位)
主要用来反映运算运算结果是否产生进位或借位。如果运算结果的最高位向前产生了一个进位(加法)或借位(减法)时,cf=1,否则为0.使用该标志位的情况有多字(字节)数的加、减运算,无符号数的大小比较,移位操作,专门改变cf值的指令等。
pf(奇偶标志位)
同于反映运算结果的奇偶性,即第八位中含有“1”的个数。如果“1”的个数为偶数,则pf的值为1,否则为0。利用pf可根据奇偶校验检查,或产生奇偶校验位。
af(辅助进位标志位)
表示加法或减法运算结果中d3位向d4位产生进位或借位的情况,当有进位(借位)时af=1;否则af=0/该标志用于bcd运算中辩别是否需要进行十进制调整。
zf(零标志位)
用来反映运算结果是否为0.如果运算结果为0,则zf=1,否则zf=0;
sf(符号标志位)
用来反映运算结果的符号位,它与运算结果的最高位相同。有符号数采用补码表示法,所以,sf也就反映了运算结果的正负号。当运算结果为负数时,sf=1,否则为0.
of(溢出标志位)
用来反映有符号数运算所得结果是否溢出。如果运算结果超过当前运算位数所能表示的范围,则称为溢出,of的值被置为1,否则,of的值被清为0.具体来说,就是当有符号数字节运算的结果超出了-128~ +127范围,或者字运算时的结果超出了-32768~ ++32767范围,就产生溢出。
编写程序时,以上6个状态标志位中的cf、zf、sf和of的使用频率较高,pf和af的使用频率相对较低。
控制标志位
控制标志位有3个,是用来控制cpu的工作方式或工作状态的标志,它的使用频率相对较低。
if(中断允许标志位)
用来决定cpu是否响应cpu外部的可屏蔽中断发出的中断请求。当if=1,cpu响应;当if=0时,cpu不响应。8086指令系统中提供了专门改变if值的指令。
df(方向标志位)
用来控制串操作指令中地址指针的变化方向。在串操作指令中,当df=0时,地址指针为自动增量,即由低地址向高地址变化;当df=1时,地址指针自动减量,即由高地址向低地址变化。指令系统中提供了专门改变df值的指令。
tf(追踪标志位)
tf亦称为单步标志位。tf被置为1时,cpu进入单步执行方式,即每执行一条指令,产生一个单步中断请求。
单步执行方式主要用于程序的调试,指令系统中没有提供专门的指令来改变tf的值,但用户可以通过编程办法来改变其值。
智能硬件盛宴:2014巴西世界杯高科技大盘点
恩智浦Mantis系列产品为CAN收发器市场设立新标准
使用惯性传感器来满足医疗/健康领域需求
搭载全链路色彩管理系统!2021年Find X3系列更惊喜
智慧物联,显示屏“智慧化”
浅谈8086CPU的寄存器结构
MIUI12.5浏览器新升级隐私保护能力
电梯里的智能镜子显示屏将重新定义电梯广告
水蒸气透过率测试仪的产品特点是怎样的
华擎AM4 B450系列主板BIOS更新:支持Ryzen5000处理器
2018年第一季度中国X86服务器出货量暴增,出货量为666,938台,同比增长32.6%
电化学阻抗谱的应用及其解析方法
三星成功开发业界首款10nm级8Gb LPDDR5 DRAM,主要应用于移动设备
基于STM32F103C8T6的充电桩计费系统设计
FET527N-C国产工业级高性能核心板先睹为快
一台PLC多少钱才能买到
一文读懂工业旋转变压器传感应用的电气设计要素
2020年中国手机产量突破13亿台,5G手机累计出货量超1.4亿台
研制无线电发射设备的管理规定
什么是传输网的服务类别