指令对标志寄存器的影响总结
- 格式:doc
- 大小:112.00 KB
- 文档页数:3
常用汇编指令对标志位的影响1000字汇编语言中,标志位用来表示CPU运算过程中的一些状态。
不同的指令对标志位有不同的影响,下面列举一些常用汇编指令对标志位的影响:1. ADD指令:加法运算指令,将两个操作数相加,结果存储在目的操作数中。
如果结果为0,标志位ZF被设置为1,如果溢出,标志位OF被设置为1,如果结果是负数,标志位SF被设置为1。
2. SUB指令:减法运算指令,将两个操作数相减,结果存储在目的操作数中。
如果结果为0,标志位ZF被设置为1,如果溢出,标志位OF被设置为1,如果结果是负数,标志位SF被设置为1。
3. MOV指令:将源操作数的值赋值给目的操作数。
MOV指令不影响标志位。
4. CMP指令:比较两个操作数的大小关系。
如果源操作数小于目的操作数,则标志位CF被设置为1,如果相等,则标志位ZF被设置为1,如果源操作数大于目的操作数,则标志位SF被设置为1。
5. INC指令:将操作数加1。
如果结果为0,标志位ZF被设置为1,如果溢出,标志位OF被设置为1,如果结果是负数,标志位SF被设置为1。
6. DEC指令:将操作数减1。
如果结果为0,标志位ZF被设置为1,如果溢出,标志位OF被设置为1,如果结果是负数,标志位SF被设置为1。
7. AND指令:按位与操作。
如果结果为0,标志位ZF被设置为1,如果结果为负数,标志位SF被设置为1。
8. OR指令:按位或操作。
如果结果为0,标志位ZF被设置为1,如果结果为负数,标志位SF被设置为1。
9. XOR指令:按位异或操作。
如果结果为0,标志位ZF被设置为1,如果结果为负数,标志位SF被设置为1。
10. SHR指令:逻辑右移指令。
如果结果的最低位是1,标志位CF被设置为1,如果结果为0,标志位ZF被设置为1,如果结果为负数,标志位SF被设置为1。
11. SHL指令:逻辑左移指令。
如果溢出,标志位OF被设置为1,如果结果为0,标志位ZF被设置为1,如果结果为负数,标志位SF 被设置为1。
第3章 80X86的指令系统和寻址方式本章主要讲授:本章主要讲授:80X8680X86的数据类型、寻址方式、指令格式、指令系统(数据传送指令、算术运算指令、逻辑运算指令、串操作数指令、控制转移指令、处理机指令和高级语言指令)和80486指令等。
通过本章的学习,注意下面几方面的内容:一、掌握80X86的数据类型;二、掌握80X86的寻址方式;三、掌握80X86的指令系统及它们的一些使用实例。
四、了解保护属性检查指令、高级语言指令以及Cache 管理指令等。
习题精解1.已知DS DS==2000H 2000H,,BX BX==0100H 0100H,,SI SI==0002H 0002H,存储单元,存储单元,存储单元[20100H][20100H][20100H]~~[20103H][20103H]依次存放依次存放12 34 56 78H 56 78H,,[21200H][21200H]~~[21203H][21203H]依次存放依次存放2A 4C B7 65H 2A 4C B7 65H,说明下列每条指令执行后,说明下列每条指令执行后AX 寄存器的内容。
(1)MOV AX AX,,1200H (2)MOV AX AX,,BX (3)MOV AX AX,,[1200H] (4)MOV AX AX,,[BX] (5)MOV AX AX,,[BX+1100H] (6)MOV AX AX,,[BX + SI] (7)MOV AX AX,,[BX][SI+1100H]参考答案:根据物理地址形成公式:物理地址=段基址×根据物理地址形成公式:物理地址=段基址×161616+有效地址,得:+有效地址,得:(1)1200H(2)0100H(3)4C2AH(4)3412H(5)4C2AH(6)7856H(7) 65B7H分析:本题主要考查点是数据寻址方式,寻址方式就是指令中用于说明操作数所在地址的方法,或者是寻找操作数有效地址的方法。
汇编基本指令对标志位的影响算术运算指令1、加法指令1)、普通加法指令ADD ADD reg/mem,reg/mem/imm受影响标志位:AF/CF/OF/PF/SF/ZF 2)、带进位的加法ADC ADCreg/mem,reg/mem/imm受影响标志位:AF/CF/OF/PF/SF/ZF该指令和1)中唯一不同的是除了执行1)中加法外还要加上CF。
3)、加1指令INC INC reg/mem受影响标志位:AF/OF/PF/SF/ZF 4)、交换加法指令XADD XADDreg/mem,reg该指令首先交换两个操作数的值,然再做加法,相当于以下两条指令:XCHG reg/mem,reg ADD reg.mem,reg 2、减法指令[和加法指令相反]1)、普通减法SUB 2)、带借位的减法SBB除了1)中减法还有减去CF 3)、减1指令DEC 4)、求补指令NEG NEG reg/mem受影响标志位:AF/CF/OF/PF/SF/ZF执行结果:操作数=0-操作数3、乘法指令分为带符号乘法和无符号乘法,区别在于:数据的最高位是作为符号还是数值参与运算。
1)、无符号乘法MUL MUL reg/mem受影响标志位:CF/OF我们知道乘法要有乘数和被乘数,指令中只有一个操作数,所以我们必须知道第二个操作数在哪里。
Intel处理的方式是,被乘数提前存在EAX中,然后与给出的乘数相乘,结果放在规定的寄存器中:乘数位数隐含的被乘数乘积存放位置[高-低]举例8 AL AX MUL CL 16 AX DX-AX NUL CX 32 EAX EDX-EAX MUL ECX 2)、有符号乘法IMUL IMUL reg/mem受影响标志位:CF/OF其操作数都作为有符号数相乘。
4、除法指令1)无符号除法DIV reg/mem不影响标志位被除数默认存放规则如下:除数位数隐含的被除数商余数8 AX AL AH 16 DX-AX AX DX 32 EDX-EAX EAX EDX 2)有符号除法IDIV reg/mem受影响标志位:AF/CF/OF/PF/SF/ZF三、逻辑运算指令1、逻辑与AND指令AND reg/mem,reg/mem/imm受影响的标志位:CF(0)/OF(0)/SF/PF/ZF执行过程:源操作数和目的操作数进行逻辑与运算,结果存放在目的操作数。
微机原理整理江苏大学非计算机专业使用,本人私人资料;微机原理97FLAGS标志寄存器:6个状态标志位和3个控制标志CF:进位标志位。
当进行加减法运算时,若最高位向前有进借位CF=1,无CF=0。
PF:奇偶标志位。
当运算结果的低8位中1的个数为偶数时PF=1,为奇数时PF=0。
AF:辅助进位标志。
D3向D4有借进位发生时AF=1,无借进位发生AF=0。
ZF:零位标志。
当运算结果为零时ZF=1,运算结果不为零时ZF=0。
SF:符号标志位。
当运算结果的最高位为1时SF=1,最高位为0时SF=0。
OP:溢出标志位。
当运算结果超出了带符号数的范围,即溢出时OF=1,未溢出时OF=0。
(D7为符号位,说明:D7,D6,D5,D4,D3,D2,D1,D0)3.3.2算数运算指令算数运算指令;加,减,乘,除有符号数的溢出:OF无符号数的溢出:CF指令对操作数的要求:单操作数指令中的操作数不允许使用立即数双操作数指令中,立即数只能作为源操作数,不允许源操作数和目的操作数都是存储器。
1,加法运算指令(不允许段寄存器作为操作数和两个都是存储器)1)ADD普通加法指令(对全部6个状态标志位都会产生影响)ADD OPRD1,OPRD2 ;OPRD1+OPRD2送到OPRD1中去ADD [SI],[BX]是错误的;不允许两个操作数都是存储器操作数例:MOV AL,7EHADD AL,5BH程序执行后,AL=D9H,即11011001B, D9H>7FH(8位带符号数的最大值) OF=1D9H<FFH(8位无符号数的最大值) CF=0 所有状态标志位AF=0,CF=0,OF=1,PF=0,SF=1,ZF=02)ADC带进位(CF)位的加法指令(对全部6个状态标志位都会产生影响)ADC OPRD1,OPRD2 ;OPRD1+OPRD2+CF送到OPRD1中去不允许两个操作数都是存储器操作数例:设CF=1,写出以下指令执行后的结果MOV AL,7EHADC AL,0ABH指令执行后:AL=7EH+0ABH+1=2AH,且CF=13)INC加1指令(不影响CF,影响其它5个状态标志)INC OPRD ;OPRD+1送到OPRD中去OPRD不能是立即数通常用于在循环程序中修改地址指针及循环次数2,减法指令(不允许段寄存器作为操作数和两个都是存储器)1)SUB不考虑借位的减法指令(对全部6个状态标志位都会产生影响)SUB OPRD1,OPRD2不允许两个操作数都是存储器操作数例:SUB AL,[BP+SI] ;将SS:[BP+SI]单元的内容送到AL中去基址变址寻址:基址:BX或BP 变址:SI或DIDS☺[BX][变址]SS ☺[BP][变址]2)SBB考虑借位的减法指令(对全部6个状态标志位都会产生影响)SUB OPRD1,OPRD2 ;将OPRD1-OPRD2-CF送到OPRD1中不允许两个操作数都是存储器操作数3)DEC减1指令(不影响CF,影响其它5个状态标志)DEC OPRDOPRD不能是立即数4)NEG求补指令(对全部6个状态标志位都会产生影响)NEG OPRD (求负数的绝对值);用0-OPRD CF通常为1,除非OPRD为0OF通常为0,除非OPRD为80H(-128)或8000H(-32768),执行后操作数不变,但是OF为1。
电子信息工程学系实验报告 ——适用于计算机课程课程名称:汇编语言程序设计实验项目名称:掌握ADD,SUB 等汇编指令及其对标志位的影响实验时间:班级: 姓名: 学号:实 验 目 的:掌握ADD,SUB,MUL,IMUL,DIV,IDIV 汇编算术指令以及它们对标志位的影响。
实 验 环 境:微机一台,操作系统:WINXP2,轻松汇编实 验 内 容 及 过 程:输入给出程序,通过对程序的调试掌握ADD,SUB 等汇编指令的操作及其对标志位的影响;编程实现Z (W*X )/(Y+6) ,R 余数(其中X ,Y ,Z ,R 和W 均为存放16为带符号数单元的地址。
1、上机输入以下程序: code segment main proc far assume cs:code start:push ds xor ax,ax push axmov ax,0 dec axadd ax,7FFFH add ax,2 neg axsub ax,0FFFFHret main endp code ends end2、 写出上面汇编程序中字体为红色的指令执行后,AX 寄存器及标志位CF ,SF ,ZF 和OF 的内容是什么?3、编程实现Z (W*X )/(Y+6),R 余数(其中X ,Y ,Z ,R 和W 均为存放16位带符号数单元的地址。
实 验 结 果 及 分 析:2、由以上运行结果可知执行程序1的指令后,AX寄存器及标志位CF,SF,ZF和OF的内容如表格所示:Mov为传送指令不影响标志位;dec不影响CF,影响SF、ZF、OF;add影响标志位CF,SF,ZF和OF;neg影响CF,SF,ZF和OF;sub影响标志位CF,SF,ZF和OF。
在本程序中(程序2)AX(商)的值也即Z(商)的值,DX(余数)的值也即R(余数)的值。
实验心得:。
8086标志寄存器CPU内部的寄存器中,有⼀种特殊的寄存器(对于不同的机器,个数和结构都有可能不同)具有以下三个功能:⽤来存储某些相关指令的执⾏结果⽤来为CPU执⾏相关的指令提供⾏为依据⽤来控制CPU的相关⼯作⽅式这种特殊的寄存器在8086CPU中称为标志寄存器。
8086的标志寄存器有16位,其中存储的信息通常被称为程序状态字(PSW)。
标志寄存器与其他寄存器不⼀样,其他寄存器是⽤来放数据的,都是整个寄存器具有⼀个含义,⽽标志寄存器是按位起作⽤的。
8086中的标志寄存器的结构如下图所⽰:其中1、3、4、12、13、14、15位在8086中没有使⽤。
另外对于有确切含义的每⼀位,我们称为标志位ZF标志标志寄存器的第六位是ZF,零标志位。
他是记录相关指令执⾏后,其结果是否位零。
如果为零,那么zf=1,如果不为零,那么zf=0⽐如指令:mov ax, 1sub ax, 1执⾏后,ax的结果为0,所以zf=1再⽐如:mov ax, 2sub ax, 1执⾏后,ax的结果不为0,所以zf=0在这⾥,有⼀点需要注意:在8086的指令集中,有的指令的执⾏是影响标志位的,⽐如add、sub、mul、div、inc、or、and等,它们⼤都是运算指令(进⾏逻辑或算数运算);有的指令的执⾏对标志寄存器没有影响,⽐如mov、push、pop等,它们⼤都是传送指令。
PF标志标志寄存器的第⼆位是PF,奇偶标志位。
它记录相关指令执⾏后,其结果的所有bit位中1的个数是否位偶数。
如果是偶数,pf=1,如果位奇数,pf=0⽐如指令:mov al, 1add al, 10执⾏后,al为00001011B,其中有3个1,所以pf=0再⽐如:mov al, 1or al, 2执⾏后结果为00000011B,其中有2个1,所以pf=1SF标志标志寄存器的第七位是SF,符号标志位。
它记录相关指令执⾏后,其结果是否为负。
如果为负,sf=1,如果⾮负,sf=0这⾥要明确⼀点,在计算机中,通常⽤补码来表⽰有符号的数据,计算机中的⼀个数据既可以看作有符号数,也可以看作⽆符号数。
8086汇编cmp指令8086汇编 cmp 指令cmp 是⽐较指令,功能相当于减法指令,只是不保存结果。
cmp 指令执⾏后,将对标志寄存器产⽣影响。
格式:cmp 操作对象1,操作对象2功能:计算操作对象1–操作对象2原理:通过做减法运算影响标志寄存器,标志寄存器的相关位的取值,体现⽐较的结果。
cmp 指令说明⼀、应⽤使⽤其他相关指令通过识别这些被影响的标志寄存器位来得知⽐较结果。
应⽤⽅法:⽤标志寄存器值,确定⽐较结果。
⼆、⽆符号数⽐较与标志位取值思路:通过cmp 指令执⾏后相关标志位的值,可以看出⽐较的结果指令:cmp ax,bx三、有符号数⽐较与标志位取值问题:⽤cmp来进⾏有符号数⽐较时,CPU⽤哪些标志位对⽐较结果进⾏记录仅凭结果正负(SF)⽆法得出结论,需要配合是否溢出(OF)得到结论。
⽰例指令:cmp ah,bh条件转移指令;或者其他影响标志寄存器的指令cmp oper1, oper2jxxx 标号⼀、根据单个标志位转移的指令⼆、根据⽆符号数⽐较结果进⾏转移的指令三、根据有符号数⽐较结果进⾏转移的指令四、转移指令全写j-Jump e-Equal n-Not b-Below a-Above L-less g-Greater s-Sign C-carry p-Parity o-Overflow z-Zero 条件准转移指令使⽤jxxx系列指令和cmp指令配合,构造条件转移指令不必再考虑cmp指令对相关标志位的影响和jxxx指令对相关标志位的检测可以直接考虑cmp和jxxx指令配合使⽤时表现出来的逻辑含义。
jxxx系列指令和cmp指令配合实现⾼级语⾔中if语句的功能例1:如果(ah)=(bh),则(ah)=(ah)+(ah),否则(ah)=(ah)+(bh)例2:如果(ax)=0,则(ax)=(ax)+1。
常⽤汇编指令及其影响的标志位加法指令 ADD (addition)指令对标志位的影响:CF=1 最⾼有效位向⾼位有进位CF=0 最⾼有效位向⾼位⽆进位OF=1 两个同符号数相加(正数+正数或负数+负数),结果符号与其相反。
OF=0 两个不同符号数相加,或同符号数相加,结果符号与其相同。
带进位加法指令 ADC (add with carry)指令对标志位的影响:CF=1 最⾼有效位向⾼位有进位CF=0 最低有效位相⾼位⽆进位OF=1 两个同符号数相加,结果符号与其相反,OF=0 两个同符号数相加,或同符号相加,结果符号与其相同加1指令 INC (increament)指令对标志位的影响:对CF⽆影响OF=1 两个同符号数相加,结果符号与其相反,OF=0 两个同符号数相加,或同符号相加,结果符号与其相同。
减法指令 SUB (subtract)指令对标志位的影响:CF=1 ⼆进制减法运算中最⾼有效位向⾼位有借位(被减数⼩于减数,不够减的情况)CF=0 ⼆进制减法运算中最⾼有效为向⾼位⽆借位(被减数〉=减数,够减的情况)OF=1 两数符号相反(正数-负数,或负数-正数),⽽结果符号与减数相同。
OF=0 同符号数相减时,或不同符号数相减,其结果符号与减数不同。
带借位减法指令 SBB (subtract with borrow)指令对标志位的影响:CF=1 ⼆进制减法运算中最⾼有效位向⾼位有借位(被减数⼩于减数,不够减的情况)CF=0 ⼆进制减法运算中最⾼有效为向⾼位⽆借位(被减数〉=减数,够减的情况)OF=1 两数符号相反(正数-负数,或负数-正数),⽽结果符号与减数相同。
OF=0 同符号数相减时,或不同符号数相减,其结果符号与减数不同。
减1指令 DEC (decrement)指令对标志位的影响:对CF⽆影响OF=1 两数符号相反(正数-负数,或负数-正数),⽽结果符号与减数相同。
OF=0 同符号数相减时,或不同符号数相减,其结果符号与减数不同。
8086指令系统总结学习微处理器及其程序设计,必须掌握微处理器的指令系统。
本章以 8086 微处理器为例介绍微型计算机的指令系统,包括指令格式、寻址方式和各类指令功能。
要明确各种寻址方式的区别和特点,掌握有效地址和物理地址的计算方法,要正确使用指令,掌握各类指令的功能、对标志位的影响和使用上的一些特殊限制。
能够编写小汇编程序,初步掌握汇编程序的编写和调试方法。
本章的重点难点内容是: 8086 的指令格式及寻址方式, 8086 的常用指令和8086 指令前缀的使用。
下面我们分别进行总结:一.8086寻址方式(1)操作数是数字,指令中立即写出数字------------立即数寻址MOV AX,1234H 解释此句意义(2)操作数是寄存器内容,指令中写出寄存器的符号---------寄存器寻址MOV AX,BX(3)操作数是存储单元内容,用括号括出存储单元有效地址-----直接寻址MOV AX,[1234H]MOV AX,ES:[1234H](4)操作数是存储单元内容,用括号括出寄存器或其表达式,寄存器或其表达式的值为存储单元有效地址-------------间接寻址MOV AH,[BX]MOV AX,ES:[SI]MOV AL,[BX+SI+5]===5[BX+SI]===5[BX][SI]二.8086指令系统1.数据传送指令(一)通用传送指令(1)MOV指令指令格式:MOV 目,源功能:将源操作数传送给目标操作数。
(2)堆栈操作指令进栈指令:PUSH格式:PUSH 源功能:将源操作数压入堆栈。
例:用堆栈指令完成上例的功能。
MOV AX,3000HMOV DS,AX ;段寄存器填充MOV SI,0100H ;基本指令执MOV DI,2000H ;行前的初值MOV CX,50NT:PUSH [SI] ;程序从这POP [DI] ;开始设计INC SIINC SIINC DIINC DILOOP NTMOV AH,4CHINT 21H(3)交换指令 XCHG格式:XCHG 目,源功能:源和目标中的内容交换。
汇编语言心得体会【篇一:汇编语言学习心得】汇编学习心得08网工(一)班李锐 0804031002另外,在c语言中不到10个语句构成的程序,用汇编语言却要好几十行甚至上百行。
这不得不让我们对汇编产生一种恐惧感。
事实上,这是完全不必要的。
一旦对它的原理掌握后,编写程序就容易多了。
另外,学习汇编语言能让我们更加了解计算机内部的组织结构,对我们计算机专业的学生来说,学习汇编也是提升综合能力的关键环节。
汇编的学习不仅仅是学习其语法,而更多的是学习计算机基本的体系结构。
其中遇到很多新的概念,名字。
如寄存器、中断、寻址方式等。
这些概念在刚接触汇编这门课的时候难以理解,但在之后的学习中通过老师的讲解,自己亲手编程的方式也就渐渐清晰明了。
我们在学习之前都需要明确什么是汇编语言。
计算机能够直接识别的数据是由二进制数0和1组成的代码。
机器指令就是用二进制代码组成的指令,一条机器指令控制计算机完成一个基本操作。
为了克服机器语言的缺点,人们采用助记符表示机器指令的操作码,用变量代替操作数的存放地址等,这样就形成了汇编语言。
经过一个学期的学习,我也慢慢摸出了汇编学习的规律。
首先,学习这门语言时如果能联系上以前学过的其他高级语言的知识,则会起到良好的效果。
例如c语言程序的运行逻辑结构有顺序(按语句依次执行)、分支结构(if...then...else...),循环结构(for...next)三种结构,也通过c语言了解并掌握了什么是子程序,什么是调用。
事实上,汇编语言中有关程序结构,子程序等等的知识都是跟c语言十分相似的,只是在编程时用到的语言不同:汇编语言完全面向机器,需要指明数据在寄存器、内存中的流向。
第二,学习汇编语言,首要问题是学习80x86指令系统。
如果能将指令系统中的各个助记符、格式等都能完全掌握并灵活运用,大部分工作就已经完成了。
指令系统确定了cpu所能完成的功能,是用汇编语言进行程序设计的最基本部分。
如果不熟悉汇编指令的功能及其有关规定,那肯定不能灵活使用汇编语言。
微机原理整理江苏大学非计算机专业使用,本人私人资料;微机原理97FLAGS标志寄存器:6个状态标志位和3个控制标志CF:进位标志位。
当进行加减法运算时,若最高位向前有进借位CF=1,无CF=0。
PF:奇偶标志位。
当运算结果的低8位中1的个数为偶数时PF=1,为奇数时PF=0。
AF:辅助进位标志。
D3向D4有借进位发生时AF=1,无借进位发生AF=0。
ZF:零位标志。
当运算结果为零时ZF=1,运算结果不为零时ZF=0。
SF:符号标志位。
当运算结果的最高位为1时SF=1,最高位为0时SF=0。
OP:溢出标志位。
当运算结果超出了带符号数的范围,即溢出时OF=1,未溢出时OF=0。
(D7为符号位,说明:D7,D6,D5,D4,D3,D2,D1,D0)3.3.2算数运算指令算数运算指令;加,减,乘,除有符号数的溢出:OF无符号数的溢出:CF指令对操作数的要求:单操作数指令中的操作数不允许使用立即数双操作数指令中,立即数只能作为源操作数,不允许源操作数和目的操作数都是存储器。
1,加法运算指令(不允许段寄存器作为操作数和两个都是存储器)1)ADD普通加法指令(对全部6个状态标志位都会产生影响)ADD OPRD1,OPRD2 ;OPRD1+OPRD2送到OPRD1中去ADD [SI],[BX]是错误的;不允许两个操作数都是存储器操作数例:MOV AL,7EHADD AL,5BH程序执行后,AL=D9H,即11011001B, D9H>7FH(8位带符号数的最大值) OF=1D9H<FFH(8位无符号数的最大值) CF=0 所有状态标志位AF=0,CF=0,OF=1,PF=0,SF=1,ZF=02)ADC带进位(CF)位的加法指令(对全部6个状态标志位都会产生影响)ADC OPRD1,OPRD2 ;OPRD1+OPRD2+CF送到OPRD1中去不允许两个操作数都是存储器操作数例:设CF=1,写出以下指令执行后的结果MOV AL,7EHADC AL,0ABH指令执行后:AL=7EH+0ABH+1=2AH,且CF=13)INC加1指令(不影响CF,影响其它5个状态标志)INC OPRD ;OPRD+1送到OPRD中去OPRD不能是立即数通常用于在循环程序中修改地址指针及循环次数2,减法指令(不允许段寄存器作为操作数和两个都是存储器)1)SUB不考虑借位的减法指令(对全部6个状态标志位都会产生影响)SUB OPRD1,OPRD2不允许两个操作数都是存储器操作数例:SUB AL,[BP+SI] ;将SS:[BP+SI]单元的内容送到AL中去基址变址寻址:基址:BX或BP 变址:SI或DIDS☺[BX][变址]SS ☺[BP][变址]2)SBB考虑借位的减法指令(对全部6个状态标志位都会产生影响)SUB OPRD1,OPRD2 ;将OPRD1-OPRD2-CF送到OPRD1中不允许两个操作数都是存储器操作数3)DEC减1指令(不影响CF,影响其它5个状态标志)DEC OPRDOPRD不能是立即数4)NEG求补指令(对全部6个状态标志位都会产生影响)NEG OPRD (求负数的绝对值);用0-OPRD CF通常为1,除非OPRD为0OF通常为0,除非OPRD为80H(-128)或8000H(-32768),执行后操作数不变,但是OF为1。
传送类指令---只有SAHF、POPF影响⏹通用数据传送指令(都不影响标志位)❑MOV❑PUSH/POP❑XCHG⏹专用数据传送指令❑标志寄存器操作指令LAHF、SAHF;PUSHF、POPF(LAHF、PUSHF不影响;SAHF、POPF影响)因为SAHF POPF本身就是对标志寄存器做修改的,所以会影响;需要注意的是SAHF LAHF是字节操作,PUSHF POPF是字操作❑查表指令XLAT (不影响标志位)❑地址传送指令近LEA、远LDS (不影响标志位)❑符号扩展指令CBW、CWD (不影响标志位)❑输入/输出指令IN、OUT (不影响标志位)❑串传送类指令MOVSB、MOVSW、MOVS;LODSB、LODSW、LODS;STOSB、STOSW、STOS (不影响标志位,但是受到方向标志位DF的影响)运算类指令---这里面除了标志寄存器的位操作外,其他指令都不影响D、I、T三位⏹逻辑运算AND、OR、XOR、NOT、TEST(可以看到,DIT三位不受影响,O、C两个始终置零,A也不受影响,符号位S、零标志Z和奇偶标志P受影响,不难理解)⏹标志寄存器的位操作(Obviously,都影响)⏹移位,循环移位SAL、SHL、SAR、SHR(同样的,DIT三位不受影响,A也不受影响,其他的均受影响)循环ROL、ROR、RCL、RCR(只有进位标志C和溢出标志O受影响,因为循环移位时用了C)⏹二进制算术运算•加减基本的指令ADD/ADC/SUB/SBB/NEG/CMP/串比较系列CMPSB、CMPSW、CMPS/串扫描系列SCASB、SCASW、SCAS(以上的指令对于除DIT之外都影响)加一减一指令INC、DEC(以上两条指令对除了DIT三位和进位标志C外其他都影响)未组合BCD调整加AAA、减AAS(以上两条指令只影响辅助进位A和进位C,因为在调整过程中要用到这两位)组合BCD调整加DAA、减DAS(可以看到除了DIT三位和溢出位O不受影响)•乘除乘法MUL、IMUL(可以看到只影响溢出O与进位C)除法DIV、IDIV(可以看到都不受影响)BCD码调整AAD、AAM(符号位S、零标志Z、奇偶标志P受影响)转移指令⏹条件转移指令❑根据标志位的转移指令❑无符号数运算后的转移❑带符号数运算后的转移❑根据CX的值转移⏹循环次数控制⏹串操作次数控制前缀⏹无条件转移指令❑调用指令❑返回指令❑中断指令(这里面大部分不改变标志位,但受标志位影响,一般都是上一条是一个运算指令,经过运算标志位被改变了,跳转时就根据这时候的标志位来判断是否需要跳转)处理器控制指令---应该也不影响⏹空操作指令NOP❑格式:NOP❑一条指令耗时3T⏹CPU停等中断HLT❑格式:HLT⏹等待指令WAIT。
标志寄存器CPU内部的寄存器中,有一种特殊的寄存器(对于不同的处理机,个数和结构都可能不同)具有三种作用:1)用来存储相关指令的某些执行结果;2)用来为CPU执行相关指令提供行为依据;3)用来控制CPU的相关工作方式。
这种特殊的寄存器在8086CPU中,被称为标志寄存器。
8086CPU的标志寄存器有16位,其中存储的信息通常被称为程序状态字(PSW)。
简称flag。
flag和其他寄存器不一样,其他寄存器是用来存放数据的,都是整个寄存器具有一个含义。
而flag寄存器是按位起作用的,也就是说,它的每一位都有专门的含义,记录特定的信息。
15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0flag的1、3、5、12、13、14、15位在8086CPU中没有使用,不具有任何含义,而其余位都具有特殊的含义。
ZF标志flag的第6位是ZF,零标志位。
它记录相关指令执行后,其结果是否为0。
如果结果为0,那么ZF=1,如果结果不为0,那么ZF=0。
mov ax,1sub ax,1执行后,结果为0,则ZF=1,表示“结果是0”。
mov ax,2sub ax,1执行后,结果不为0,则ZF=0,表示“结果不是0”。
在计算机中0表示逻辑假,表示否定,1表示逻辑真,表示肯定。
注意,在8086CPU的指令集中,有的指令的执行是影响标志寄存器的,比如:add、sub、mul、div、inc、or、and等,它们大都是运算指令(进行逻辑或自述运算);有的指令的执行对标志寄存器没有影响,比如:mov、push、pop等,它们大都是传送指令。
我们在使用一条指令的时候,要注意这条指令的全部功能,其中包括,执行结果对标记寄存器的哪些标志位造成影响。
PF标志flag的第2位是PF,奇偶标志位。
它记录相关指令执行后,其结果的所有二进制位中1的个数是否为偶数。
如果1的个数为偶数,PF=1,如果为奇数,那么PF=0。
比如:mov al,1add al,10执行后,结果为00001011B,其中有3(奇数)个1,则PF=0。
8086汇编语⾔学习(九)8086标志寄存器8086标志寄存器介绍 前⾯已经介绍了8086⼤多数的寄存器,现在介绍⼀种8086内部⼀个特殊的寄存器,标志寄存器(flag register)。
8086标志寄存器⼤致有以下作⽤: 1.存储⼀些相关指令的执⾏结果 2.为CPU执⾏相关指令提供依据 3.控制CPU的部分⼯作⽅式 8086的寄存器是16位的,通常的寄存器都是存放⼀个16位数据视作⼀个整体进⾏⼯作的。
但标志寄存器较为特殊,标志寄存器中的每⼀bit位是单独⼯作的,虽然理论上16位的标志寄存器能够提供⾄多16个flag标志,但事实上8086CPU的设计者只使⽤了其中的9位,剩余的bit位并没有实际意义。
8086的指令集中,有许多指令的执⾏会同时影响标志寄存器中flag的值。
⽐如add、sub、inc、and等运算指令(逻辑或算术运算),⽽像mov、push、pop等单纯传送数据的指令则不会对标志寄存器产⽣影响。
在使⽤⼀条指令时,出了其本⾝的作⽤外,也要注意指令对标志寄存器的影响。
其中ZF、PF、SF、CF、OF、AF被归类为运算结果标志位,⽽DF、IF、TF则被归类为状态控制标志位。
下⾯对标志寄存器的各位进⾏详细介绍。
ZF(Zero Flag) 零标志位 ZF零标志位,记录相关指令执⾏后,结果是否为0。
通常⼀位bit的布尔变量1表⽰真,0表⽰假。
ZF零标志位在指令执⾏的结果为0时,值为真(ZF=1);不为0时;不为0时,值为假(ZF=0)。
PF(Parity Flag) 奇偶标志位 PF奇偶校验位,记录相关指令执⾏后,结果中bit位中1的个数是否为偶数。
若1的个数为偶数,则PF=1;反之,若1的个数为奇数,则PF=0。
SF(Sign Flag) 符号标志位 SF符号标志位,记录相关指令执⾏后,结果是否为负。
若结果为负,SF=1;若结果为⾮负,SF=0。
CF(Carry Flag) 进位标志位 CF进位标志位,⼀般在⽆符号数运算时,记录最⾼位是否产⽣了进位(例如加法指令),或是否从最⾼位借位(例如减法指令)。
简要说明add、sub、and、or指令对标志位的影响。
-回复标题:add、sub、and、or指令对标志位的影响引言:在计算机中,标志位(也称为标志寄存器)是一组二进制位,用于存储计算机运算过程中的状态信息,它们可以通过不同的指令被修改。
本文将详细介绍四个常用指令,分别是add、sub、and和or指令对标志位的影响。
一、add指令对标志位的影响add指令用于将两个数相加,并将结果存储在目标操作数中。
在执行add 指令时,会根据操作数的数值和结果的情况来修改标志位,影响如下:1.进位标志(CF):如果两个无符号数相加产生了进位,CF被置为1,否则置为0。
2.溢出标志(OF):如果两个带符号数相加产生了溢出,OF被置为1,否则置为0。
3.零标志(ZF):如果两个操作数相加结果为0,ZF被置为1,否则置为0。
4.符号标志(SF):如果结果为负数,SF被置为1,否则置为0。
5.奇偶标志(PF):如果相加结果具有偶数个1,则PF被置为1,否则置为0。
二、sub指令对标志位的影响sub指令用于将第一个操作数减去第二个操作数,并将结果存储在目标操作数中。
执行sub指令时,也会修改标志位,影响如下:1.借位标志(CF):如果执行减法操作时需要借位,CF被置为1,否则置为0。
2.溢出标志(OF):如果执行减法操作产生了溢出,OF被置为1,否则置为0。
3.零标志(ZF):如果结果为0,ZF被置为1,否则置为0。
4.符号标志(SF):如果结果为负数,SF被置为1,否则置为0。
5.奇偶标志(PF):如果结果具有偶数个1,则PF被置为1,否则置为0。
三、and指令对标志位的影响and指令用于执行位与操作,将两个操作数的对应位进行逻辑与运算,并将结果存储在目标操作数中。
执行and指令时,标志位的修改如下:1.零标志(ZF):如果结果为0,ZF被置为1,否则置为0。
2.符号标志(SF):如果结果为负数,SF被置为1,否则置为0。
CF(Carry Flag):进位标志。
当指令执行的结果(8位或16位)在最高位上产生了一个进位或借位时,CF =1。
AF(Auxiliary Carry Flag):辅助进位标志。
当一个8位数(或16位数)的低四位向高四位(即
b3向b4)有进位或借位时,AF=1。
常用于十进制算术运算指令。
OF(Overflow Flag): 溢出标志。
在算术运算中,带符号数的运算结果超出了8位或16位符号数所能表示的范围时,OF=1。
ZF(Zero Flag): 零标志。
当运算结果为全零时,ZF=1。
SF(Sign Flag): 符号标志。
当运算结果为正数,即结果的最高位为0时,SF=1。
PF(Parity Flag):奇偶标志。
当算术逻辑运算的结果中1的个数为偶数时,PF=1,为奇数时,PF=0。
DF(Direction Flag):方向标志。
用于控制数据串操作指令的步进方向,当DF=1时,表示从高地址向低地址以递减的顺序对数据串中的数据进行处理。
IF(Interrupt-enable Flag):中断允许标志。
当IF=1时,CPU可以响应外部可屏蔽中断请求。
该标志可以用指令设置为1或0。
TF(Trap Flag):陷阱标志。
当TF=1时,CPU进入单步工作方式,每执行完一条指令就自动产生一个内部中断,以便进行程序调试。
当TF=0时,正常执行程序。