加载中…
个人资料
  • 博客等级:
  • 博客积分:
  • 博客访问:
  • 关注人气:
  • 获赠金笔:0支
  • 赠出金笔:0支
  • 荣誉徽章:
正文 字体大小:

复习要点4:寄存器功用与指令功能(1)

(2012-04-11 21:52:22)
标签:

复习2012

分类: 微机

8x16位通用寄存器:4个16位数据寄存器(AX、BX、CX、DX)和4个16位指针与变址寄存器(SP、BP与SI、DI)

(1)AX:可分为AH(高字节)和AL(低字节)两个8位寄存器,所有的I/O指令都使用AX或AL与外设端口交换信息;乘除法指令隐含用到AX;支持寄存器(直接)寻址。

(2)BX:可分为BH和BL两个8位寄存器,进行存储器操作数寻址时可用BX存放操作数在内存中数据段内的偏移地址(称为基址指针,且默认段寄存器为DS),可支持支持寄存器(直接)寻址,寄存器间接寻址,寄存器相对寻址,或与SI、DI配合支持基址变址寻址以及基址变址相对寻址;

(3)CX:可分为CH和CL两个8位寄存器,LOOP指令隐含用到CX,JCXZ指令判断CX的值是否为零以决定是否转移,移位指令可用CL指示移位位数;支持寄存器(直接)寻址。

(4)DX:可分为DH和DL两个8位寄存器,在寄存器间接寻址的I/O指令中存放I/O端口地址;在做双字长乘除法运算时,DX与AX一起存放一个双字长操作数,其中DX存放高16位数;支持寄存器(直接)寻址。

(5)SP:堆栈指针,总是指向栈顶(其值为栈顶字节单元在SS段内的偏移地址)。由于堆栈相关操作总是以16位二进制数为单位进行,所以对8086CPU来说SP的初始值应为偶数(偶地址使得8086CPU存取16位数据可以在一个总线访问周期内完成),且每次入栈/出栈操作SP的值分别减2和加2;支持寄存器(直接)寻址。

(6)BP:也称为基址指针,用于进行存储器操作数寻址时存放操作数的偏移地址,但默认段寄存器为SS;可支持支持寄存器(直接)寻址,寄存器相对寻址,或与SI、DI配合支持基址变址寻址以及基址变址相对寻址(各种BP相关的存储器寻址方式中,其默认段寄存器均为SS)。BP不支持寄存器间接寻址(例如"MOV AX,[BP]"实际上是用"MOV AX,[BP+0]"表达的,可以认为前者是后者的简写,即便写成"MOV AX,[BP]"其指令长度也比类似的"MOV AX,[BX]"指令的长度多一个字节。"MOV AX,[BP]"同"MOV AX,[BP+1]"和"MOV AX,[BX+1]"一样都是3字节指令,而"MOV AX,[BX]"为2字节指令)

(7)SI:(源)变址寄存器,通常用在字符串操作(对应字符串操作指令)时存放源串在数据段DS内的偏移地址;可支持支持寄存器(直接)寻址,寄存器相对寻址,或与BX、BP配合支持基址变址寻址以及基址变址相对寻址。

(8)DI:(目的)变址寄存器,通常用在字符串操作(对应字符串操作指令)时存放目的串在附加数据段ES内的偏移地址;非字符串操作时,默认段寄存器为DS,可支持支持寄存器(直接)寻址,寄存器相对寻址,或与BX、BP配合支持基址变址寻址以及基址变址相对寻址。

 指令指针寄存器IP

(1)IP用来存放下一条要读取的指令在代码段中的偏移地址。IP在程序运行中能自动加1修正,从而使其始终存放的是下一条要读取的指令在代码段的偏移地址。
(2)由于CS和IP的内容决定了程序的执行顺序,因此程序员不能直接用赋值指令对其内容进行修改。
(3)有些指令能使IP和CS的值改变(如跳转指令)或使其值压入堆栈或从堆栈中弹出恢复原值(如子程序调用指令和返回指令)

 标志寄存器FLAGS

(1)FLAGS为一个16位的寄存器,但只用了其中9位,包括6个状态标志位,3个控制标志位。
(2)状态标志位:用来反映算术和逻辑运算结果的一些特征。如结果是否为“0”,是否有进位、借位、溢出等。不同指令对状态标志位的影响是不同的。特别指出:作为逻辑运算指令之一NOT指令不影响标志位

   ① 进位标志位CF。当进行加减运算时,若最高位发生进位或借位则CF为1,否则为0。通常用于判断无符号数运算结果是否超出了计算机所能表示的无符号数的范围;在移位操作中通常用来保存最后的移出位;在逻辑运算后会将CF清零;也有单独的CF清零/置位/取反指令CLI/STI/CMC。需要特别注意的是,INC、DEC指令不影响CF标志。JC、JNC指令根据当前CF标志的值决定是否转移(JB/JNAE与JC是同一条指令的不同助记形式,JAE/JNB与JNC是同一条指令的不同助记形式),另有JA/JNBE、JBE/JNA指令也用到了CF标志。

   ② 奇偶标志位PF。当指令执行结果的低8位中含有偶数个1时,PF为1,否则为0。JP/JPE、JNP/JPO指令根据当前PF标志的值决定是否转移。

   ③ 辅助进位标志位AF。当执行一条加法或减法运算指令时,若结果的低字节的低4位向高4位有进位或借位,则AF为1,否则为0。BCD码运算调整指令隐含使用AF及其它相关标志位调整BCD码算术运算结果。

   ④ 零标志位ZF。若当前的(算术、逻辑、移位等)运算的结果为0,则ZF为1,否则为0。JZ/JE、JNZ/JNE指令根据当前ZF标志的值决定是否转移,另有JA/JNBE、JBE/JNA、JG/JNLE、JL/JNGE、JLE/JNG指令也用到了ZF标志。

   ⑤ 符号标志位SF。当前的(算术、逻辑、移位等)运算结果的最高位为1时,SF=1,否则为0。JS、JNS指令根据当前SF标志的值决定是否转移。JG/JNLE、JGE/JNL、JL/JNGE、JLE/JNG等有符号数判断指令也用到了SF标志。

   ⑥ 溢出标志位OF。当前的(算术、移位等)运算结果超出了带符号数所能表示的数值范围,即溢出时,OF=1,否则为0;用来判断带符号数运算结果是否溢出。在逻辑运算后会将OF清零。JO、JNO指令根据当前OF标志的值决定是否转移,JG/JNLE、JGE/JNL、JL/JNGE、JLE/JNG等有符号数判断指令也用到了OF标志。
(3)控制标志位:用来控制CPU的操作,由程序设置或清除。

   ① 单步(陷阱)标志位TF。是为测试程序的方便而设置的。若将TF置1,8086/8088CPU处于单步工作方式,否则,将正常执行程序。没有单独的TF清零/置位指令。
   ② 中断允许标志位IF。是用来控制可屏蔽中断的控制标志位。IF=1,表示允许CPU接受外部从INTR引脚上发来的可屏蔽中断请求信号;若IF=0,则禁止CPU接受可屏蔽中断请求信号。IF的状态对非屏蔽中断及内部中断的响应没有影响。有单独的IF清零/置位指令CLI/STI。
   ③ 方向标志位DF。DF=1,串操作按减地址方式进行,即从高地址开始,每操作一次地址自动递减;若DF=0,则串操作按增地址方式进行,即每操作一次地址自动递增。有单独的DF清零/置位指令CLD/STD。

 段寄存器

(1)代码段寄存器CS存储程序当前使用的代码段的段地址。代码段用来存放程序的指令代码。下一条要读取指令在代码段中的偏移地址由指令指针寄存器IP提供;
(2)数据段寄存器DS用来存放程序当前使用的数据段的段地址。一般来说,程序中所用到的原始数据、中间结果以及最终结果都存放在数据段中,如果程序中使用了字符串处理指令,则源字符串也存放在数据段中;
(3)堆栈段寄存器SS用来存放程序当前所使用的堆栈段的段地址。堆栈是在存储器中开辟的一个特定区域;
(4)附加数据段寄存器ES用来存放程序当前使用的附加数据段的段地址。附加数据段通常用于存放字符串操作时的目的字符串。

 寄存器在指令中的使用

(1)所有通用寄存器可以出现在符合寻址要求的指令中(传送类、算术类、逻辑类、移位类、甚至转移类指令),例如:"MOV BX,[BX+SI]"、"JMP SP"、"CALL [BP+DI]"等;

(2)段寄存器只能出现在合理的MOV、PUSH和POP指令中,例如:"MOV DS,SP"、"PUSH SS"、"POP ES"等;

(3)指令指针寄存器IP不出现在任何指令中。不能直接用赋值指令对IP内容进行修改。程序顺序执行时IP随取指过程自动加1,非顺序执行时按相应的转移、子程序调用或中断调用、子程序返回或中断返回操作结果修改IP。

(4)标志寄存器FLAGS也不直接出现在指令中。除了相应标志位可单独位操作、或受绝大部分算术、逻辑、移位运算的影响、或被条件转移指令引用外,还有LAHF、SAHF、POPF、PUSHF指令会隐含访问标志寄存器。

0

阅读 收藏 喜欢 打印举报/Report
  

新浪BLOG意见反馈留言板 欢迎批评指正

新浪简介 | About Sina | 广告服务 | 联系我们 | 招聘信息 | 网站律师 | SINA English | 产品答疑

新浪公司 版权所有