指令对标志寄存器的影响总结

合集下载

常用汇编指令对标志位的影响

常用汇编指令对标志位的影响

常用汇编指令对标志位的影响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。

汇编语言中各寄存器的作用

汇编语言中各寄存器的作用

汇编语言中各寄存器的作用汇编语言中各寄存器的作用4个数据寄存器(EAX、EBX、ECX和EDX)2个变址和指针寄存器(ESI和EDI) 2个指针寄存器(ESP和EBP)6个段寄存器(ES、CS、SS、DS、FS和GS)1个指令指针寄存器(EIP) 1个标志寄存器(EFlags)1、数据寄存器数据寄存器主要用来保存操作数和运算结果等信息,从而节省读取操作数所需占用总线和访问存储器的时间。

32位CPU有4个32位的通用寄存器EAX、EBX、ECX和EDX。

对低16位数据的存取,不会影响高16位的数据。

这些低16位寄存器分别命名为:AX、BX、CX和DX,它和先前的CPU中的寄存器相一致。

4个16位寄存器又可分割成8个独立的8位寄存器(AX:AH-AL、BX:BH-BL、CX:CH-CL、DX:DH-DL),每个寄存器都有自己的名称,可独立存取。

程序员可利用数据寄存器的这种”可分可合”的特性,灵活地处理字/字节的信息。

寄存器AX和AL通常称为累加器(Accumulator),用累加器进行的操作可能需要更少时间。

累加器可用于乘、除、输入/输出等操作,它们的使用频率很高;寄存器BX称为基地址寄存器(Base Register)。

它可作为存储器指针来使用;寄存器CX称为计数寄存器(Count Register)。

在循环和字符串操作时,要用它来控制循环次数;在位操作中,当移多位时,要用CL来指明移位的位数;寄存器DX称为数据寄存器(Data Register)。

在进行乘、除运算时,它可作为默认的操作数参与运算,也可用于存放I/O的端口地址。

在16位CPU中,AX、BX、CX和DX不能作为基址和变址寄存器来存放存储单元的地址,但在32位CPU中,其32位寄存器EAX、EBX、ECX和EDX不仅可传送数据、暂存数据保存算术逻辑运算结果,而且也可作为指针寄存器,所以,这些32位寄存器更具有通用性。

2、变址寄存器32位CPU有2个32位通用寄存器ESI和EDI。

汇编语言各种指令的解释与用法

汇编语言各种指令的解释与用法

汇编语言各种指令的解释与用法【数据传输指令】一、通用数据传送指令1、传送指令MOV (move)指令的汇编格式:MOV DST,SRC指令的基本功能:(DST)<-(SRC) 将原操作数(字节或字)传送到目的地址。

指令支持的寻址方式:目的操作数和源操作数不能同时用存储器寻址方式,这个限制适用于所有指令。

指令的执行对标志位的影响:不影响标志位。

指令的特殊要求:目的操作数DST和源操作数SRC不允许同时为段寄存器;目的操作数DST不能是CS,也不能用立即数方式。

2、进栈指令PUSH (push onto the stack)出栈指令POP (pop from the stack)指令的汇编格式:PUSH SRC ;POP DST指令的基本功能:PUSH指令在程序中常用来暂存某些数据,而POP指令又可将这些数据恢复。

PUSH SRC (SP)<-(SP)-2 ;(SP)<-(SRC)POP DST (DST)<-((SP));(SP)<-(SP)指令支持的寻址方式:push 和pop指令不能不能使用立即数寻址方式。

指令对标志位的影响:PUSH 和POP指令都不影响标志位。

指令的特殊要求:PUSH 和POP指令只能是字操作,因此,存取字数据后,SP的修改必须是+2 或者-2;POP指令的DST不允许是CS寄存器;3、交换指令XCHG (exchange)指令的汇编格式:XCHG OPR1,OPR2指令的基本功能:(OPR1)<->(OPR2)指令支持的寻址方式:一个操作数必须在寄存器中,另一个操作数可以在寄存器或存储器中。

指令对标志位的影戏:不影响标志位。

指令的特殊要求:不允许使用段寄存器。

二、累加器专用传送指令4、输入指令IN (input)输出指令OUT (output)指令的汇编格式:IN ac,port port<=0FFHIN ac,DX port>0FFHOUT port,ac port<=0FFHOUT DX,ac port>0FFH指令的基本功能:对8086及其后继机型的微处理机,所有I/O端口与CPU之间的通信都由输入输出指令IN和OUT来完成。

指令对标志寄存器的影响总结

指令对标志寄存器的影响总结

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时,正常执行程序。

汇编语言与接口技术习题答案

汇编语言与接口技术习题答案

第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执行过程:源操作数和目的操作数进行逻辑与运算,结果存放在目的操作数。

8086汇编cmp指令

8086汇编cmp指令

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。

8086指令系统总结

8086指令系统总结

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 目,源功能:源和目标中的内容交换。

关于标志位影响

关于标志位影响
LDR R1,=0x7FFFFFFF
CMP R0,R1 后V=1 ;
总之,两个负数运算结果第31位为0,则V=1
C 当进行加法运算(包括CMN指令),并且最高位产生进位时C=1,否则C=0。当进行减法运算(包括CMP 指令),
并且最高位产生借位时C=0,否则C=1。对于结合移位操作的非加法/减法指令,C为从最高位最后移出的值,
其它指令C通常不变;
例如:执行 mov r0,#0xF0000000
mov r1,#0x7FFFFFFF
subs r3,R0,r1 ,lsr #1
后C=0;
总之,一般情况下加法进位,减法无借位时C=1; 对于结合移位操作的非加/减法指令,C为最后移出的值。
执行 mov r1,#0x70000000
adds r1,r1,r1 或 CMN R1,R1 后V=1;
执行 LDR R0,=0x8000000
也会按照Thumb方式来执行,BX是跳特殊指令,会根据目标寄存器地址来切换T标志。
ቤተ መጻሕፍቲ ባይዱ 两个正数运算结果第31位为1,则V=1。
另外THUMB指令一般不需要S后缀,便能影响状态标志位。
如 在THUMB状态下下面两条指令相同
movs r0,#0x00
mov r0,#0x00
ADDS R0,R0,R0
后C=1;
执行 SUBS R2,R2,R2后C=1,因为R2-R2=0不需要借位。
执行 CMP R3,R3后C=1;
各标志位的含义如下:
所有ARM数据处理指令的乘法指令均可选择使用S后缀,并影响状态标志位。而其它指令一般不允许加S后缀,如B 、LDR、SWI、MRS等。

FLAGS标志寄存器

FLAGS标志寄存器

微机原理整理江苏大学非计算机专业使用,本人私人资料;微机原理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。

汇编语言中cmp指令用法笔记与总结

汇编语言中cmp指令用法笔记与总结

汇编语⾔中cmp指令⽤法笔记与总结本⽂实例讲述了汇编语⾔中cmp指令⽤法。

分享给⼤家供⼤家参考,具体如下:cmp是⽐较指令,cmp的功能是相当于减法指令,只是不保存结果.cmp指令执⾏后,将对标志寄存器产⽣影响.其他相关指令通过识别这些被影响的标志寄存器来得知⽐较结果.cmp指令格式: cmp 操作对象1,操作对象2功能: 计算操作对象1 - 操作对象2 但不保存结果,仅仅根据计算结果对标志寄存器进⾏设置.⽐如cmp ax,ax 是做ax - ax 的运算,结果为0,但并不在ax中保存,仅影响flag的相关各位.指令执⾏后: zf = 1,pf = 1,sf = 0,cf = 0,of = 0;下⾯的指令:mov ax,8mov bx,3mov ax,bx执⾏后: (ax)= 8,zf = 0,pf = 1,sf = 0, cf = 0, of = 0如果 ax = bx 则 ax - bx = 0 ,所以 : zf = 1如果 ax != bx 则ax - bx != 0,所以 : zf = 0如果ax < bx 则ax - bx 将产⽣错位,所以 : cf = 1如果 ax >= bx 则 ax - bx 将不必借位,所以 : cf = 0如果ax > bx 则 ax - bx 既不必借位,结果⼜不为0, 所以 : cf = 0 并且 zf = 0如果 ax <= bx 则ax - bx 既可能借位,结果可能为0,所以 : cf = 1 或 zf =1检测⽐较结果的条件转移指令je 等于则转移 zf=1jne 不等于则转移 zf=0jb 低于则转移 cf=1jnb 不低于则转移 cf=0ja ⾼于则转移 cf=0且zf=0jna 不⾼于则转移 cf=1或zf=1e : equalne : not equalb: belownb : not belowa : abovena : not above编程: 统计data段中数值⼩于8的字节的个数,⽤ax保存统计结果mov ax,datamov ds,axmov ax,0 ;初始化累加器mov bx,0 ;ds:bx指向第⼀个字节mov cx,8s : cmp byte ptr [bx] , 8 ;和8进⾏⽐较jnb next ;如果不⼩于8转到next,继续循环inc ax ;如果⼩于8就将计数值加1next:inc bxloop s程序执⾏后: ax = 2还有疑问的可以去查看⼀下指令⼿册,讲解的⽐较细致希望本⽂所述对⼤家汇编语⾔程序设计有所帮助。

arm 汇编ands指令

arm 汇编ands指令

arm 汇编ands指令全文共四篇示例,供读者参考第一篇示例:Arm 汇编语言是一种适用于ARM 架构处理器的低级编程语言,它直接控制计算机硬件,并且可以实现对硬件的精细控制。

Arm 汇编语言中有许多指令,其中包括了ANDS 指令,它是一种逻辑运算指令,在ARM 汇编语言中起到了非常重要的作用。

ANDS 指令在ARM 汇编语言中的用法是进行逻辑与操作,即将两个操作数按位进行与操作,并将结果保存到目标寄存器中。

其语法如下:ANDS{S}{cond} Rdst, Rn, Operand2ANDS 表示逻辑与操作,{S} 表示是否更新标志寄存器,{cond} 表示执行条件,Rdst 是目标寄存器,Rn 是第一个操作数,Operand2 是第二个操作数。

ANDS 指令的执行过程如下:1. 获取第一个操作数Rn 的值;2. 获取第二个操作数Operand2 的值;3. 将Rn 和Operand2 按位进行与操作,并将结果保存到目标寄存器Rdst 中;4. 根据{S}标志位的设置,更新标志寄存器的值。

ANDS 指令的作用是用于进行逻辑与操作,在实际的应用中,经常用于对数据的位操作、数据的屏蔽操作或者数据的筛选操作。

在ARM 汇编语言中,ANDS 指令还有一个非常重要的作用,那就是设置条件码寄存器的状态。

在执行ANDS 指令时,根据与操作的结果,标志寄存器中的标志位N、Z、C、V 会被更新,从而影响程序的控制流程。

在ARM 汇编语言中,ANDS 指令还可以与其他指令结合使用,实现更加复杂的操作。

可以将ANDS 指令与分支、移位、数据操作等指令组合起来,实现对变量的逻辑操作和控制流程的控制。

通过合理地使用ANDS 指令,可以提高程序的执行效率,减少代码的复杂度。

第二篇示例:ARM处理器是一种广泛应用于移动设备、嵌入式系统和传感器等领域的处理器架构,其指令集包含了丰富且灵活的指令。

在ARM汇编语言中,ands指令是一种常用的逻辑运算指令,用于进行两个操作数的逻辑与运算,并将结果存储在目标寄存器中。

寄存器总结

寄存器总结

首先先说8086在8086的EU--执行单元(Execution Unit)和BIU--总线接口单元(Bus Interface Unit)两部分中包含有一些工作寄存器,这些寄存器用来存放计算过程中的各种信息,如操作数地址、操作数及运算的中间结果等。

微处理器从寄存器中存取数据比从存储器中存取数据要快的多,因此,在计算过程中,合理利用寄存器保存操作数、中间结果或其它信息,能提高程序的运行效率。

根据这些寄存器所起的作用,8086寄存器组可以分为通用寄存器、专用寄存器和段寄存器三类@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ @@@@@@@@@1.通用寄存器通用寄存器包括了8个16位的寄存器:AX、BX、CX、DX、SP、BP、DI及SI。

其中AX、BX、CX、DX在一般情况下作为通用的数据寄存器,用来暂时存放计算过程中所用到的操作数、结果或其他信息。

它们还可分为两个独立的8位寄存器使用,命名为AL、AH、BL、BH、CL、CH、DL和DH。

这4个通用数据寄存器除通用功能外,还有如下专门用途:AX作为累加器用,所以它是算术运算的主要寄存器。

在乘除指令中指定用来存放操作数。

另外,所有的I/O指令都使用AX或AL与外部设备传送信息。

BX在计算存储器地址时,可作为基址寄存器使用。

CX常用来保存计数值,如在移位指令、循环指令和串处理指令中用作隐含的计数器。

DX在作双字长运算时,可把DX和AX组合在一起存放一个双字长数,DX用来存放高16位数据。

此外,对某些I/O操作,DX可用来存放I/O的端口地址。

SP、BP、SI、DI四个16位寄存器可以象数据寄存器一样在运算过程中存放操作数,但它们只能以字(16位)为单位使用。

此外,它们更经常的用途是在存储器寻址时,提供偏移地址。

因此,它们可称为指针或变址寄存器。

SP称为堆栈指针寄存器,用来指出栈顶的偏移地址。

标志寄存器PSW和汇编条件转移指令解释

标志寄存器PSW和汇编条件转移指令解释

标志寄存器PSW和汇编条件转移指令解释标志寄存器PSW标志寄存器PSW(程序状态字寄存器PSW)标志寄存器PSW是⼀个16为的寄存器。

它反映了CPU运算的状态特征并且存放某些控制标志。

8086使⽤了16位中的9位,包括6个状态标志位和3个控制标志位。

CF(进位标志位):当执⾏⼀个加法(减法)运算时,最⾼位产⽣进位(或借位)时,CF为1,否则为0。

ZF零标志位:若当前的运算结果为零,则ZF为1,否则为0。

SF符号标志位:该标志位与运算结果的最⾼位相同。

即运算结果为负,则SF为1,否则为0。

OF溢出标志位:若运算结果超出机器能够表⽰的范围称为溢出,此时OF为1,否则为0。

判断是否溢出的⽅法是:进⾏⼆进制运算时,最⾼位的进位值与次⾼位的进位值进⾏异或运算,若运算结果为1则表⽰溢出OF=1,否则OF=0PF奇偶标志:当运算结果的最低16位中含1的个数为偶数则PF=1否则PF=0AF辅助进位标志:⼀个加法(减法)运算结果的低4位向⾼4位有进位(或借位)时则AF=1否则AF=0另外还有三个控制标志位⽤来控制CPU的操作,可以由程序进⾏置位和复位。

TF跟踪标志:该标志位为⽅⾯程序调试⽽设置。

若TF=1,8086/8088CPU处于单步⼯作⽅式,即在每条指令执⾏结束后,产⽣中断。

IF中断标志位:该标志位⽤来控制CPU是否响应可屏蔽中断。

若IF=1则允许中断,否则禁⽌中断。

DF⽅向标志:该标志位⽤来控制串处理指令的处理⽅向。

若DF=1则串处理过程中地址⾃动递减,否则⾃动递增。

OD⾥能查看到除IF标志外的 8个标志位汇编条件转移指令解释可以通过以下程序理解上述有符号条件转移指令void main(){int a=3,b=5;if (a!=b) //jeif (a==b) //jnzif (a<=b) //jgif (a<b) //jgeif (a>=b) //jlif (a>b)//jle{printf("do if");}}return0;。

掌握ADD,SUB等汇编指令及其对标志位的影响

掌握ADD,SUB等汇编指令及其对标志位的影响

电子信息工程学系实验报告 ——适用于计算机课程课程名称:汇编语言程序设计实验项目名称:掌握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(余数)的值。

实验心得:。

简要说明add、sub、and、or指令对标志位的影响。 -回复

简要说明add、sub、and、or指令对标志位的影响。 -回复

简要说明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。

8086标志寄存器

8086标志寄存器

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汇编语言学习(九)8086标志寄存器

8086汇编语言学习(九)8086标志寄存器

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进位标志位,⼀般在⽆符号数运算时,记录最⾼位是否产⽣了进位(例如加法指令),或是否从最⾼位借位(例如减法指令)。

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

指令类型助记符对标志寄存器的影响备注
ZF CF PF SF OF AF DF IF TF
数据传送类通用MOV
不影响标志位
交换XCHG
堆栈
操作
PUSH
POP
地址
传送
LEA
LDS
LES
累加器
专用IN
OUT
XALT
标志
寄存器
LAHF
SAHF 标志寄存器低八位的内容由AH的值决定CF,AF,ZF,SF,PF的值会被影响
PUSHF 不影响标志位
POPF 标志寄存器的内容由装入的具体值决定可能影响所有标志位
算术运算类加法
指令
ADD √√√√√√
ADC √√√√√√
INC √√√√√INC指令不影响CF
AAA ?√???√?表示不确定或者未定义
DAA √√√√?√
减法
指令
SUB √√√√√√
SBB √√√√√√
DEC √√√√√DEC指令不影响CF
AAS ?√???√
DAS √√√√?√DAA指令不影响OF
乘法
指令
MUL ?√??√?
IMUL ?√??√?
AAM √?√√??
除法
指令
DIV ??????√√此指令可能会产生中断,故影响IF,TF
IDIV ??????√√同上
AAD √?√√??
符号位
扩展
CBW 不影响标志位
CWD 不影响标志位
比较指令CMP 由计算结果确定标志位的值不会影响到DF,IF,TF
逻辑运算类单






求反NOT 不影响标志位
移位
SAL √√√√见


?OF标志位只在移位次数是1时
有效,AF未定义SHL √√√√?
SAR √√√√?
SHR √√√√?
循环
移位
ROL √√?
循环移位指令影响OF和CF,ROR √√?
令RCL √√?AF未定义RCR √√?
指令类型助记符对标志寄存器的影响备注
ZF CF PF SF OF AF DF IF TF
双操作数
与AND √置0 √√置0或OR √置0√√置0异或XOR √置0√√置0检测TSET √置0√√置0
字符串操作传送MOVS 不影响标志位
比较CMPS 由计算结果确定标志位的值不会影响DF,IF,TF 搜索SCAS 由计算结果确定标志位的值不会影响DF,IF,TF 装入LODS 不影响标志位
填充STOS 不影响标志位
前缀REP 不影响标志位
程序控制类无条件JMP
不影响标志位






单个
标志

JS/JNS SF=1/0,则转移到目的地址
JZ/ JNZ ZF=1/0,则转移到目的地址
JP/JNP PF=1/0,则转移到目的地址
JB/JNB CF=1/0,则转移到目的地址
JO/JNO OF=1/0,则转移到目的地址若干标
志位的
逻辑组

JA 两个无符号数比较,A>B
JBE 两个无符号数比较,A <=B
JG 两个带符号数比较,A>B
JGE 两个带符号数比较,A>=B
JL 两个带符号数比较,A<B
JLE 两个带符号数比较,A <=B
循环
控制
LOOP
不影响标志位
LOOPE
LOOPNE
JCXZ
中断
控制
INT 不影响标志位
INTO
IRET 影响所有标志位标志位到恢复中断以前的状态
C P U 控制指令标志位操

CLC √此指令置CF=0
CMC √此指令CF取反
STC √此指令置CF=1
CLD √此指令置DF=0
STD √此指令置DF=1
CLI √此指令置IF=0
STI √此指令置IF=1 空操作NOP
不影响标志位
暂停HLT
等待WAIT’
交权ESC
LOCK
总线锁
定前缀
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时,正常执行程序。

相关文档
最新文档