指令对标志寄存器的影响总结
常用汇编指令对标志位的影响

常用汇编指令对标志位的影响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 指令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寻址方式(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 目,源功能:源和目标中的内容交换。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 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时,正常执行程序。