关于标志寄存器的各个标志

合集下载

标志寄存器

标志寄存器

标志寄存器标志寄存器(Flags Register,FR)又称程序状态字(Program Status Word,PSW)。

这是一个存放条件标志、控制标志寄存器,主要用于反映处理器的状态和运算结果的某些特征及控制指令的执行。

各标志在标志寄存器中的位置:各标志在标志寄存器中的位置条件标志:CF(Carry Flag)进位标志:用于反映运算是否产生进位或借位。

如果运算结果的最高位产生一个进位或借位,则CF置1,否则置0。

运算结果的最高位包括字操作的第15位和字节操作的第7位。

移位指令也会将操作数的最高位或最低位移入CF。

PF(Parity Flag)奇偶标志:用于反映运算结果低8位中“1”的个数。

“1”的个数为偶数,则PF置1,否则置0。

AF(Auxiliary Carry Flag)辅助进位标志:在字节操作时低半字节向高半字节进位或借位,字操作时低字节向高字节进位或借位,AF置1,否则置0。

ZF(Zero Flag)零标志:用于判断结果是否为0。

运算结果0,ZF置1,否则置0。

SF(Sign Flag)符号标志:用于反映运算结果的符号,运算结果为负,SF置1,否则置0。

因为有符号数采用补码的形式表示,所以SF与运算结果的最高位相同。

OF(Overflow Flag)溢出标志:反映有符号数加减运算是否溢出。

如果运算结果超过了8位或者16位有符号数的表示范围,则OF置1,否则置0。

控制标志:TF(Trap Flag)陷阱标志:当TF被设置位1时,CPU进入单步模式,所谓单步模式就是CPU在每执行一步指令后都产生一个单步中断。

主要用于程序的调试。

8086/8088中没有专门用来置位和清零TF的命令,需要用其他办法。

IF(Interrupt Flag)中断标志:决定CPU是否响应外部可屏蔽中断请求。

IF为1时,CPU允许响应外部的可屏蔽中断请求。

DF(Direction Flag)方向标志:决定串操作指令执行时有关指针寄存器调整方向。

标志位的说明

标志位的说明

16位标志寄存器——共用了9个标志位,它们主要用来反映CPU的状态和运算结果的特征。

标志位的分布如下表所示。

32位标志寄存器——32位CPU也把标志寄存器扩展到32位,记为EFLAGS。

它新增加了四个控制标志位,它们是:IOPL、NT、RF和VM,这些标志位在实方式下不起作用。

其它标志位的位置和作用与先前的完全相同。

其主要标志位的分布如上表所示。

一、运算结果标志位1、进位标志CF(Carry Flag)进位标志CF主要用来反映运算是否产生进位或借位。

如果运算结果的最高位产生了一个进位或借位,那么,其值为1,否则其值为0。

使用该标志位的情况有:多字(字节)数的加减运算,无符号数的大小比较运算,移位操作,字(字节)之间移位,专门改变CF值的指令等。

2、奇偶标志PF(Parity Flag)奇偶标志PF用于反映运算结果中“1”的个数的奇偶性。

如果“1”的个数为偶数,则PF的值为1,否则其值为0。

利用PF可进行奇偶校验检查,或产生奇偶校验位。

在数据传送过程中,为了提供传送的可靠性,如果采用奇偶校验的方法,就可使用该标志位。

3、辅助进位标志AF(Auxiliary Carry Flag)在发生下列情况时,辅助进位标志AF的值被置为1,否则其值为0:(1)、在字操作时,发生低字节向高字节进位或借位时;(2)、在字节操作时,发生低4位向高4位进位或借位时。

对以上6个运算结果标志位,在一般编程情况下,标志位CF、ZF、SF 和OF的使用频率较高,而标志位PF和AF的使用频率较低。

4、零标志ZF(Zero Flag)零标志ZF用来反映运算结果是否为0。

如果运算结果为0,则其值为1,否则其值为0。

在判断运算结果是否为0时,可使用此标志位。

5、符号标志SF(Sign Flag)符号标志SF用来反映运算结果的符号位,它与运算结果的最高位相同。

在微机系统中,有符号数采用补码表示法,所以,SF也就反映运算结果的正负号。

运算结果为正数时,SF的值为0,否则其值为1。

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。

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=0
PF奇偶标志:当运算结果的最低16位中含1的个数为偶数则PF=1否则PF=0
AF辅助进位标志:一个加法(减法)运算结果的低4位向高4位有进位(或借位)时则AF=1否则AF=0
另外还有三个控制标志位用来控制CPU的操作,可以由程序进行置位和复位。

TF跟踪标志:该标志位为方面程序调试而设置。

若TF=1,8086/8088CPU处于单步工作方式,即在每条指令执行结束后,产生中断。

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

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

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

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

OD里能查看到除IF标志外的8个标志位。

状态标志寄存器F

状态标志寄存器F

状态标志寄存器F8086 CPU的状态标志寄存器是一个十六位的寄存器,其中9个位用作标志位,其中状态标志位有6个,控制标志有3个。

状态标志寄存器如下图所示。

状态标志中用六位来反映EU执行算术或逻辑运算以后的结果特征。

这六位都是逻辑值,判断结果为逻辑真(true)时其值为1;判断结果为逻辑假(false)时,其值为0:CF(Carry Flag)进位标志:当CF=1表示指令执行结果在最高位上产生了一个进位或借位;CF=0则无进位或借位产生。

AF(Auxiliary Carry Flag)辅助进位标志:当AF=1,表示结果的低4位产生了一个进位或借位;AF=0则无此进位或借位。

ZF(Zero Flag)零标志:当ZF=1,表示运算结果为零;ZF=0,则结果不为零。

SF(Sign Flag)符号标志:当SF=1,表示运算结果为负数,即结果的最高位为1;SF=0,则结果为正数,最高位为0。

PF(Parity Flag)奇偶标志:当PF=1,表示指令执行结果低8位中有偶数个1;PF=0,则结果中有奇数个1。

OF(Overflow Flag)溢出标志:当运算过程中产生溢出时,会使OF为1。

所谓溢出,就是当字节运算的结果超出了范围-128~+127,或者当字运算的结果超出了范围-32768~+32767时称为溢出。

计算机在进行加法运算时,每当判断出低位往最高有效位产生进位,而最高有效位往前没有进位时,便得知产生了溢出,于是OF为1;或者反过来,每当判断出低位往最高位无进位,而最高位往前却有进位时,便得知产生了溢出,于是OF 为1。

在减法运算时,每当判断出最高位需要借位,而低位并不向最高位产生借位时,OF 置1;或者反过来,每当判断出低位从最高位有借位,而最高位并不需要从更高位借位时,OF置1。

控制标志位有3个,即DF、IF、TF。

DF(Direction Flag)方向标志:这是控制串操作指令用的标志。

如果DF为0,则串操作过程中地址会不断增值;反之,如果DF为1,则串操作过程中地址会不断减值。

说明8086 cpu标志寄存器中9个标志位的作用。

说明8086 cpu标志寄存器中9个标志位的作用。

说明8086 cpu标志寄存器中9个标志位的作用。

下载提示:该文档是本店铺精心编制而成的,希望大家下载后,能够帮助大家解决实际问题。

文档下载后可定制修改,请根据实际需要进行调整和使用,谢谢!本店铺为大家提供各种类型的实用资料,如教育随笔、日记赏析、句子摘抄、古诗大全、经典美文、话题作文、工作总结、词语解析、文案摘录、其他资料等等,想了解不同资料格式和写法,敬请关注!Download tips: This document is carefully compiled by this editor. I hope that after you download it, it can help you solve practical problems. The document can be customized and modified after downloading, please adjust and use it according to actual needs, thank you! In addition, this shop provides you with various types of practical materials, such as educational essays, diary appreciation, sentence excerpts, ancient poems, classic articles, topic composition, work summary, word parsing, copy excerpts, other materials and so on, want to know different data formats and writing methods, please pay attention!8086 CPU标志寄存器中9个标志位的作用在8086 CPU中,标志寄存器是非常重要的一部分,它包含了9个标志位,这些标志位对于CPU的运行和控制非常关键。

标志寄存器——精选推荐

标志寄存器——精选推荐

标志寄存器标志寄存器是cpu内部的⼀种特殊寄存器;作⽤:1】⽤来储存相关指令的某些执⾏结果2】⽤来为cpu执⾏相关指令提供⾏为依据3】⽤来控制cpu的相关⼯作⽅式8086cpu中的标志寄存器如图:8086cpu的标志寄存器有16位;其中存储的信息被称为状态字(psw);标志寄存器不是⽤来存放数据的;标志寄存器按位来起作⽤,每⼀位有特定的含义;1.主要标志位的含义1)ZF标志零标志位;是flag的第6位;作⽤:记录相关指令执⾏后结果是否为0;如果为0,zf=1;如果不为0,zf=0;例如:下⾯的指令执⾏完后结果为0,zf=1mov ax,1sub ax,1在8086cpu中,有些指令影响标志寄存器,⼤都是运算指令:add、sub、mul、div、inc、or、and等;有些指令不影响标志寄存器,⼤都是传送指令:mov、push、pop等;2)PF标志奇偶标志位;是flag的第2位;作⽤:记录相关指令执⾏后,结果的所有bit位中1的个数是否为偶数,如果是则pf=1,否则pf=0;例如:下⾯指令执⾏后结果为1011B,1的个数为3,不为偶数,pf=0mov al,1add al,103)SF标志符号标志位;flag的第7位;作⽤:记录执⾏相关指令后结果是否为负;如果为负,sf=1,否则sf=0;如果将数据当做是有符号的数据来计算,可以通过sf来判断结果的正负;如果将数据当做⽆符号的数来计算,则sf的值没有意义;例如:mov al,10000001badd al,1如果当做有符号数来计算,则10000001b被当做补码,⼗进制值为-127;计算后的值为补码10000010b,也就是⼗进制的-126;值为负数,sf=1;1】关于有符号的值当⼀个⼆进制值作为有符号值时,其最⾼为被当做符号位,如果是1表⽰负数,如果是0则表⽰正数;例如:10000001b作为有符号数时表⽰-127,作为⽆符号数时表⽰1292】关于补码⼆进制数计算时⼀般⽤补码表⽰;例如:-1的表⽰法原码 ->10000001b;也就是⽤⼀个字节的最⾼位即符号位来表⽰正负反码 ->11111110b;相当于原码的符号位不变,其它位取反;补码 ->11111111b;相当于反码+1;正数的补码是其本⾝,⽐如00000001b的补码还是00000001b;补码的意义:因为机器计算时没有减法,只有加法,为了将减法转换成加法;即1-1=1+(-1);例如:补码计算1-111111111b+00000001b;计算后所有位都为0,正好符合1-1=0;4)CF标志进位标志位;flag的第0位;作⽤:进⾏⽆符号运算时,记录了运算结果的最⾼位向更⾼位的进位值,或从更⾼位的借位值;也就是说,如果运算时如果结果超过了位数放不下,或者因为计算减法因为⽐被减的值⼩⽽借位时,cf=1,否则cf=0;例如:1】加法运算时,结果超过了最⾼位,则cf=1mov al 98hadd al,al计算后结果为:(al)=30h,cf=1;因为结果⼋位放不下,需要进位,⽤cf=1来标志发⽣了进位;2】减法运算时,如果不够,则借⼀位,cf=1mov al 97hsub al,98h计算后的结果为:(al)=ffh,cf=1;因为97h⽐98h⼩,相当于借了⼀位变成197h-98h,cf=1标志发⽣了借位;5)OF标志溢出标志位;flag的第11位;作⽤:记录有符号运算时,运算结果是否发⽣溢出,如果溢出of=1,否则of=0;关于溢出:有符号运算时,最⾼位为符号位,⽤补码计算;例如:8位有符号值的范围为-128~127,即⼆进制的11111111b~01111111b;如果两个有符号数相加的结果超出了这个范围,将发⽣溢出;例如:98+99,结果超出了127,其结果为11000101b,当做补码来看对应的是-59,造成结果不正确,此时of=1来标识发⽣了溢出;2.adc指令adc是进位加法指令;格式:adc 操作对象1,操作对象2例如:adc ax,2功能:操作对象1=操作对象1+操作对象2+CF;例如:mov ax,2mov bx,1sub bx,ax ;bx的值⼩于ax,因此需要借位,使cf=1adc ax,1 ;结果为 2+1+1=4应⽤:可以利⽤adc指令和add指令配合使⽤,来实现对较⼤的数据相加;思路:将加法分成两步:1】低位相加;2】⾼位相加,再加上低位的进位值(如果有的话);低位⽤add相加,因为低位相加的值可能结果太⼤以⾄于低位放不下,⽽产⽣进位;两个⼆进制数相加,如果有进位,进位值只可能是1;⽐如:1111b+1111b=11110b,其中1111b已经是4位⼆进制数的最⼤值了,但相加的进位值还是1;通过cf的值判断是否有进位,如果有将进位值1加到⾼位中,⽤adc指令正好能够实现;所得的结果不会因为进位造成值的丢失;例如:两个128位数相加的⼦程序add128: push ax ;防⽌寄存器冲突push cxpush sipush disub ax,ax ;将cf的值设置为0mov cx,8s: mov ax,[si] ;si和di为参数,存放了相加的数在数据段中的偏移地址;adc ax,[di]mov [si],axinc si ;移动到16位后,如果⽤add si,2的话可能该变cf的值,造成进位值丢失inc si ;inc和loop指令不会影响cf位的值inc diinc diloop spop di ;⼦程序调⽤完后寄存器还原pop sipop cxpop axret3.sbb指令sbb是借位减法指令;格式:sbb 操作对象1,操作对象2作⽤:操作对象1=操作对象1-操作对象2-cf的值sbb和adc类似,可以⽤来做借位相减;4.cmp指令cmp是⽐较指令;格式:cmp 操作对象1,对象2作⽤:计算操作对象1减去对象2的,以减的结果改变标志寄存器,但不保存计算结果;1)⽆符号⽐较cmp ax,bx执⾏完后:zf=1 ->ax=bxzf=0 ->ax!=bxcf=1 ->ax<bxcf=0 ->ax>=bxcf=0 && zf=0 ->ax>bxcf=1 || zf=1 ->ax<=bx2)有符号⽐较cmp ax,bx执⾏完后:zf=1 ->ax=bxzf=0 ->ax!=bxsf=1 && of=0 ->ax<bxsf=1 && of=1 ->ax>bxsf=0 && of=0 ->ax>=bx5.检测⽐较结果的条件转移指令条件转移指令是指根据某种条件决定是否修改ip的指令,所有条件转移指令的位移都是-128~127;例如jcxz,如果cx的值为0,则修改ip;⼤多数条件转移指令都检测标志寄存器的相关标志位,根据其值来决定是否修改ip;这些条件转移指令通常和cmp指令配合使⽤;如图:⽆符号⽐较的条件转移指令例如:统计数据⼤于8的数的个数assume cs:code,ds:datadata segmentdb 8,11,8,1,8,5,63,38data endscode segmentstart:mov ax,datamov ds,axmov bx,0mov cx,8mov ax,0s: cmp byte ptr [bx],8 ;和8⽐较jna k ;如果不⼤于8则ax不⾃增inc axk: inc bxloop scode endsend start6.DF标志和串传送指令1)df标志位df标志位:是flag的第⼗位,为⽅向标志位;df的作⽤:在串处理指令中,控制每次操作后si、di的增减;df=0,每次操作后si、di递增;df=1,每次操作后si、di递减;2)串传送指令格式:movsb作⽤:执⾏movsb后,相当于执⾏了以下操作;es*16+di=ds*16+si如果df=0,si=si+1,di=di+1如果df=1,si=si-1,di=di-1也就是相当于把ds:[si]指向的字节赋值给es:[di],然后根据⽅向标志位,si和di递增或递减;movsb⼀次传送⼀个字节;如果想⼀次传送⼀个字,需要⽤到movswmovsw的作⽤:将ds:[si]处的字赋值给es:[di],然后根据⽅向标志位,si和di加2或减2;8086cpu提供了两条指令⽤来对df进⾏设置:cld ->将标志寄存器df位设置为0std ->df置13)repmovsb和movsw经常和ret⼀起使⽤;格式:rep movsb相当于:s:movsbloop s作⽤:根据cx的值重复执⾏movsb例如:将f000h的最后16个字节传送到data段中,⽤到了逆向传递,因此⽅向标志位df=1data segmentdb 16 dpu (0)data ends...mov ax,0f000hmov ds,axmov si,0ffffh ;ds:si指向f000:ffffmov ax,datamov es,axmov di,d5 ;es:di指向data段的最后⼀位mov cx,16 ;循环16次std ;df=1,设置逆向传送rep movsb...7.pushf和popfpushf ->将标志寄存器的值压栈;popf ->将标志寄存器的值从栈中弹出;8.标志寄存器在debug中表⽰在debug中可以看到标志寄存器各个标志位的信息:对于这些信息的解释:。

标志寄存器PSW中CF、OF的

标志寄存器PSW中CF、OF的

CF在算术运算中的应用
判断溢出
在进行有符号数加法或减法运算 时,如果CF标志为1且最高位(符 号位)相同,则表示溢出。
进位传播
在进行多位数加法或减法运算时, CF标志用于传播进位或借位,以 确保结果的正确性。
精确计算
通过结合CF标志和其他寄存器, 可以实现更精确的算术运算,例 如二进制数的加法或减法运算。
05
总结
CF和OF的重要性
01
CF(进位标志)的重要性
02
用于整数运算的进位控制。
03
在二进制加法中,如果最高位有进位,CF标志会被 设置。
CF和OF的重要性
01 在执行除法时,余数的符号可以通过CF来判断。
02
OF(溢出标志)的重要性
03
用于检测整数溢出。
CF和OF的重要性
当运算结果超出了整数类型的表示范 围时,OF标志会被设置。
THANKS
感谢观看
CF和OF的使用场景
CF的使用场景
在进行加法或减法运算时,可以使用CF 标志来判断是否产生了进位或借位,从 而进行相应的处理。例如,在二进制加 法中,可以使用CF标志来判断是否需要 进位。
VS
OF的使用场景
在进行算术运算时,可以使用OF标志来判 断是否发生了溢出。如果OF标志为1,则 表示运算结果超出了目标数据类型的表示 范围,需要进行相应的处理。例如,在进 行整数除法时,可以使用OF标志来判断是 否发生了溢出。
决定是否继续进行算术运算
02
根据CF标志的状态,可以判断是否需要继续进行加法或减法运
算,以得到精确结果。
用于二进制数的移位操作
03
在进行二进制数的移位操作时,CF标志可以用来指示移位后最

(1)程序状态寄存器(PSW)

(1)程序状态寄存器(PSW)

PSW 字节地址D0H 位地址字节地址位地址TCON 88H 字节地址位地址TCON SCON 98H 字节地址位地位地址IE A8H 字节地址位地址IP B8H(1)程序状态寄存器(PSW ):Cy :进位标志。

AC :辅助进位标志。

F0:用户标志。

RS1、RS0:寄存器选择。

OV :溢出标志。

P :奇偶标志。

(2)定时器/计数器方式控制寄存器 TMODGATA :门控位。

GATA=0,只要用软件对TR0或TR1置1就启动了定时器/计数器;GATA=1,只有中断端子有一个为1。

且用软件对TR0(或TR1)置1才能启动定时器/计数器工作。

(3)定时器/计数器控制寄存器 TCONTF1:定时器/计数器T1溢出标志。

当T1溢出(计数完成)时,此位由硬件置1。

TF1可以由程序查询,也可以作为中断源向CPU 申请中断,系统响应中断后,又由硬件自动清零。

TF1也可以软件清零。

TR1:定时器/计数器T1运行控制位。

可以通过用软件对该位置1或清零来启动或停止T1的工作。

TF0:定时器/计数器T0溢出标志。

功能同TF1。

TR0:定时器/计数器T0运行控制位。

功能同TR1。

IE1:外部中断1的中断标志。

若检测到外部中断1端子信号有效(低电平触发或边沿触发)时,由硬件置1,向CPU 申请中断,中断响应后不能自动清零。

详细功能参见中断系统一节。

IT1:外部中断1触发方式控制位。

IT1=0,为低电平触发;IT1=1,为下降沿触发。

详细功能参见中断系统一节。

IE0:外部中断0的中断标志。

功能同IE1。

IT0:外部中断0触发方式控制位。

功能同IT1。

(4)串行口控制寄存器 SCONTI :串行口发送中断请求标志。

在进行串行口数据通信时,每发送完一帧数据,由硬件自动将TI 置位,向CPU 申请中断。

RI :串行口接收中断请求标志。

每接收完一帧数据,由硬件自动将RI 置位,向CPU 申请中断。

注意:CPU 在响应串行发送、接收中断后,TI 、RI 不能自动清零,必须由用户用软件清零。

关于标志寄存器的各个标志

关于标志寄存器的各个标志

运算结果标志位1、进位标志CF(Carry Flag)进位标志CF主要用来反映运算是否产生进位或借位。

如果运算结果的最高位产生了一个进位或借位,那么,其值为1,否则其值为0。

使用该标志位的情况有:多字(字节)数的加减运算,无符号数的大小比较运算,移位操作,字(字节)之间移位,专门改变CF值的指令等。

2、奇偶标志PF(Parity Flag)奇偶标志PF用于反映运算结果中“1”的个数的奇偶性。

如果“1”的个数为偶数,则PF的值为1,否则其值为0。

利用PF可进行奇偶校验检查,或产生奇偶校验位。

在数据传送过程中,为了提供传送的可靠性,如果采用奇偶校验的方法,就可使用该标志位。

3、辅助进位标志AF(Auxiliary Carry Flag)在发生下列情况时,辅助进位标志AF的值被置为1,否则其值为0:(1)、在字操作时,发生低字节向高字节进位或借位时;(2)、在字节操作时,发生低4位向高4位进位或借位时。

对以上6个运算结果标志位,在一般编程情况下,标志位CF、ZF、SF和OF的使用频率较高,而标志位PF和AF的使用频率较低。

4、零标志ZF(Zero Flag)零标志ZF用来反映运算结果是否为0。

如果运算结果为0,则其值为1,否则其值为0。

在判断运算结果是否为0时,可使用此标志位。

5、符号标志SF(Sign Flag)符号标志SF用来反映运算结果的符号位,它与运算结果的最高位相同。

在微机系统中,有符号数采用补码表示法,所以,SF也就反映运算结果的正负号。

运算结果为正数时,SF的值为0,否则其值为1。

6、溢出标志OF(Overflow Flag)溢出标志OF用于反映有符号数加减运算所得结果是否溢出。

如果运算结果超过当前运算位数所能表示的范围,则称为溢出,OF的值被置为1,否则,OF的值被清为0。

“溢出”和“进位”是两个不同含义的概念,不要混淆。

如果不太清楚的话,请查阅《计算机组成原理》课程中的有关章节。

二、状态控制标志位状态控制标志位是用来控制CPU操作的,它们要通过专门的指令才能使之发生改变。

关于标志寄存器的简单总结

关于标志寄存器的简单总结

关于标志寄存器的简单总结标志寄存器标志寄存器的标志位,是对数据逻辑运算的结果进⾏特殊标记。

⽐如两个数相加是否产⽣了数据外溢,相减结果是否为零等等。

通过对运算结果的标记,来进⾏判断下⼀步执⾏的语句,从⽽达到分⽀语句的作⽤(跳转)等操作。

因此对标志寄存器的理解学习尤为重要。

影响标志寄存器变化的操作---数据逻辑运算addsubxororand....;注意:数据移动操作不能影响标志寄存器,如mov零标志位(6)变化条件标记了运算结果是否为零,如果为零,那么该标志位为1,反之为0。

功能作⽤可⽤于两个数值⽐较,如果两个数值相同,那么两个数相减的结果⼀定为0,相反如果结果不为0,那么两个数值不相等。

测试代码mov eax,0add eax,0x0奇偶标志位(2)变化条件运算结果的⼆进制数值中的最低有效字节(末尾的⼋位),如果1的个数是奇数,那么标志位为0,反之1的个数为偶数,标志位为1功能作⽤主要⽤于检查数据传送过程中的错误测试代码mov eax,0x0add eax,0x1在上述结果上再次加⼆,观察结果add eax,0x2进位标志(0)与溢出标志(11)变化条件1)进位标志:在运算过程中,如果产⽣了向⾼位进位或借位的情况,那么该标记位置为1,反之置为02)溢出标志:在运算过程中,运算结果超出了寄存器最⼤表⽰范围,如:两个正数相加结果变为了负数功能作⽤1)进位标志:如果我们计算⼀个⾮常⼤的加法运算时,需要多个dword空间存放⼀个运算数。

如下⼗六进制运算过程00000001 ffffffff+ 00000000 00000001----------------------00000002 000000001)上述运算过程在⼈眼下能够⼀眼算出答案,但是计算机需要进⾏分步操作,原因是32位操作系统,操作数据的最⼤范围是32位(⼋位⼗六进制数)2)因此,需要对每个对应的32位数据依次进⾏加法运算3)⾸先将ffffffff与00000001相加,结果为0000000,但是此时的标记位cf为14)利⽤带进位加法adc指令运算00000001与00000000的相加,那么将会在结果的基础上加上标记位5)也就是1 + 0 + 12)溢出标志:判断结果是否产⽣了溢出,正溢|负溢综合总结两个标记位都是记录了数据运算过程中的进位问题,但是记录的⾓度不同。

x标志寄存器(PSW)

x标志寄存器(PSW)

• 64位处理器是指这个位数指的是CPU GPRs(General-
Purpose Registers,通用寄存器)的数据宽度为64位, 64位指令集就是运行64位数据的指令,也就是说处理器
一次可以运行64bit数据。
• 微处理器要从单核转向多核,可以降低能耗,提高运算 速度。
• 问题: 1、了解当今主流的微处理器芯片EM64T、x86的技术; 2、较详细说采用多核技术的必要性。
外,还集成了一个浮点处理部件FPU以及一个8K字节的
高速缓冲存储器(cache),使80486的计算速度和总
体性能比80386有了明显的提高。
• 1993年Intel公司又推出了Pentium微处理器。
• 1996年特尔推出采用了MMX(多媒体增强指令集)技术
的Pentium处理器。
• 1997年英特尔推出Pentium Ⅱ处理器,集成了750万个
外设中每个寄存器有一个端口(Port)地址,构成一个 独立于内存的 I / O 地址空间:0000H ~ FFFFH
80x86的寄存器结构
31
EAX EBX ECX EDX ESP EBP ESI EDI EIP EFLAGS
16 15
AH BH CH DH
8 7
AX BX CX DX SP BP SI DI IP FLAGS CS DS SS ES FS GS AL BL CL DL
OF DF IF TF SF ZF
AF
PF
CF
条件码标志:
OF SF ZF CF AF PF 溢出标志 符号标志 零标志 进位标志 辅助进位标志 奇偶标志
控制标志:
DF IF TF 方向标志 中断标志 陷阱标志 AX, BX

EFLAGS寄存器(标志寄存器)

EFLAGS寄存器(标志寄存器)

EFLAGS寄存器(标志寄存器)这篇⽂章不是从0开始的,前⾯还有⼀些汇编基础指令以及进制,我都没写,时间问题,还是今天空闲,我才想补⼀下博⽂,后⾯我陆续会把前⾯知识点渐渐补上。

我不会重0基础讲起,中间会以、汇编、C、C++交叉的形式讲解,实战或者学习中才能更好的提升⾃⼰! EFLAGS寄存器这些标记出来的标志位⼗分重要,如果对于逆向开发,这些是需要课在脑⼦⾥的,可以不强背,实战中运⽤熟悉就⾃然记来了,为了⽅便描述,仅以8位来描述演⽰之前,请读者参照下⽅红⾊字体,进⾏简单设置⼀下,后⾯都参考该格式。

OD中展⽰⼀遍效果,AL是EAX中的低8位(后⾯有时间这块我再发博⽂补充⼀遍,如果没有,请读者⾃⾏去学习⼀下吧,博主刚毕业,时间很有限),为了⽅便演⽰,我们直接将⿏标移到EAX,右键Modify将其改为0,中间那个框就是标志寄存器,为了演⽰每次的效果,⽅便我们观看标志位发⽣改变,我们⽤⿏标双击,将其全部改为0;1、进位标志CF(Carry Flag):如果运算结果的最⾼位产⽣了⼀个进位或借位,那么,其值为1,否则其值为0。

MOV AL,0XFF ADD AL,0X2代码添加红框所⽰,按F8,代码往下⾛,我们⼀个⼀个的看!(这⾥讲解的是Carry flag)所以只看C位有个疑问?0xFF加上0x2之后,EAX⾥的值为什么是0x00000001呢?为什么不显⽰0x00000101呢?1去哪了呢?这⾥1并没有不存在,⽽是存在了Carry flag⾥,我们之前将C为置成了0,相加过后变为了1,最⾼位发⽣了进位,C为就变成了1。

(读者也可以去试试借位的情况,博主这⾥赶时间制作,就不演⽰了,后⾯内容还挺多,我想赶在12点前写完)2、奇偶标志PF(Parity Flag):奇偶标志PF⽤于反映运算结果中“1”的个数的奇偶性。

如果“1”的个数为偶数,则PF的值为1,否则其值为0。

MOV AL,0X5 ADD AL,0XA对应的⼆进制得熟悉啊,不然思考起来很费劲建议热爱的⽅向有与汇编相关的,⼀定要把⼗进制1 ~ 15对应的⼗六进制背下来啊0x5 加上0xA,很显然为0xF,对应的⼆进制位1111,1的个数为4个,是偶数个,所以Parity flag为1(⼤家可以试试奇数个的情况,其实我代码⾥已经有了奇数个的,不知道⼤家有没有管擦到~~~)3、辅助进位标志AF(Auxiliary Carry Flag):在发⽣下列情况时,辅助进位标志AF的值被置为1,否则其值为0:(1)、在字(word)操作时,发⽣低字节向⾼字节进位或借位时;(2)、在字节(byte)操作时,发⽣低4位向⾼4位进位或借位时。

汇编语言之标志寄存器

汇编语言之标志寄存器

汇编语言之标志寄存器1、标志寄存器CPU内部的寄存器中,有一种特殊的寄存器(对于不同的处理机,个数和结构都可能不同)具有以下3种作用:1. 用来存储相关指令的某些执行结果。

2. 用来为CPU执行相关指令提供行为依据。

3. 用来控制CPU的相关工作方式。

这种特殊的寄存器在8086CPU中,被称为标志寄存器。

8086CPU的寄存器,在前面已经学过13个了,现在学习最后一个寄存器FR-标志寄存器。

FR与其它寄存器不一样,其它寄存器是用来存放数据的,都是整个寄存器具有一个含义,而FR寄存器是按位起作用的,也就是说它的每一位都有专门的含义,记录特定的信息。

8086CPU的FR寄存器的结构如下图所示:FR的第1、3、5、12、13、14、15位是空白位,在8086CPU 中没有使用,不具有任何意义,而第0、2、4、6、7、8、9、10、11位都具有特殊的含义。

2、CF标志7.1 CF标志FR的第0位是CF,进位标志位。

一般情况下,在进行无符号数运算的时候,它记录了运算结果的最高有效位向更高位的进位值,或从更高位的借位值。

对于位数为N的无符号数来说,其对应的二进制信息的最高位,即第N-1位,就是它的最高有效位,而假想存在的第N位,就是相对于最高有效位的更高位,如下图所示:我们知道,当两个数据相加的时候,有可能产生从最高有效位向更高位的进位,比如,两个8位数据:98H+98H,将产生进位,这个进位值就用CF标志位来保存。

比如,下面的指令:Mov al, 98HAdd al, al执行后,计算结果为130H,al=30H,CF=1,CF记录了从最高有效位向更高位的进位值。

两数相加,如果产生了进位,则CF=1,如果没有产生进位,则CF=0。

当两个数据做减法的时候,有可能向更高位借位,比如,两个8位数据:97H-98H,将产生借位,借位后相当于计算197H-98H,而FR的CF标志位也可以用来记录这个借位值。

比如,下面的指令:Mov al, 97HSub al, 98H执行后,计算结果为197H-98H=ffH,al=ffH,CF=1,CF记录了向更高位的借位值。

FLAGS标志寄存器讲解

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=1D9H2)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。

工业用微型计算机 14个寄存器 和 标志位

工业用微型计算机  14个寄存器 和 标志位

14个寄存器
指令:IP:instruction pointer 指令指针寄存器
索引:SI:source index 源变址寄存器
DI:destination index 目的变址寄存器标志:FR:flag register 标志寄存器
指针:SP:stack pointer 堆栈指针寄存器
BP:base pointer 基址指针寄存器
通用:AX:accumulator 累加寄存器
BX:base 基址寄存器
CX:count 计数寄存器
DX:data 数据寄存器
段寄存器:CS:code segment 代码段寄存器
SS:stack segment 堆栈段寄存器
DS:data segment 数据段寄存器
ES:extra segment 附加数据段寄存器9个标志位
ZF:零标志位
SF:符号标志位
CF:进位标志位(无符号数是否溢出)
OF:溢出标志位(有符号数是否溢出)
DF:方向标志位
PF:奇偶标志位
AF:辅助标志位
TF:跟踪标志位
IF:中断允许标志位。

状态标志

状态标志

进位标志位
当进行加(减)法运算时,若最高位向前有进(借)位,则CF=1,否则CF=0。
应当注意的是,减法的CF被规定为小数减大数(无符号数)就置为1,所以不应当考虑减法最终是否转化为补 码加法的问题。
奇偶标志位
当运算结果中低8位的“1”的个数为偶数时PF=1,为奇数时,PF=0。
辅助进位
在加(减)法操作中,bit3向bit4有进位(借位)发生时,AF=1,否则AF=0。DAA和DAS指令测试这个标志 位,以便在BCD加法或减法之后调整AL中的值。
状态标志
16位标志寄存器PSW用来存放运算结果 的特征
01 进位标志位
03 辅助进位 05 符号标志位
目录
02 奇偶标志位 04 零标志位 06 溢出标志位
状态标志是16位标志寄存器PSW用来存放运算结果的特征,常用作后续条件转移指令的转移控制条件。其中7 位没用,9位标志位分成两类:一类为状态标志,表示运算后结果的状态特征,它影响后面的操作。状态标志有 CF PF AF ZF SF和OF等6个。另一类为控制标志,用来控制CPU操作,控制标志有TF IF和DF3个。状态标志位记 录了算术和逻辑运算的一些特征。如:结果是否为0,是否有进位,借位,结果是否溢出等。不同指令对标志位具 有不同的影响。
溢出标志位
ቤተ መጻሕፍቲ ባይዱ
当算术运算结果超出了带符号数的范围,即溢出时,OF=1,否则OF=0.
感谢观看
1字节为8bit对应为 bit7|bit6|bit5|bit4 bit3|bit2|bit1|bit0前四个为高4位,后四个为低4位 简单来说,AF就是用来判断中间进位没有。即8位二进制操作数第四位有无进位给第五位
零标志位
当运算结果为零时ZF=1,否则ZF=0。
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

运算结果标志位
1、进位标志CF(Carry Flag)
进位标志CF主要用来反映运算是否产生进位或借位。

如果运算结果的最高位产生了一个进位或借位,那么,其值为1,否则其值为0。

使用该标志位的情况有:多字(字节)数的加减运算,无符号数的大小比较运算,移位操作,字(字节)之间移位,专门改变CF值的指令等。

2、奇偶标志PF(Parity Flag)
奇偶标志PF用于反映运算结果中“1”的个数的奇偶性。

如果“1”的个数为偶数,则PF的值为1,否则其值为0。

利用PF可进行奇偶校验检查,或产生奇偶校验位。

在数据传送过程中,为了提供传送的可靠性,如果采用奇偶校验的方法,就可使用该标志位。

3、辅助进位标志AF(Auxiliary Carry Flag)
在发生下列情况时,辅助进位标志AF的值被置为1,否则其值为0:
(1)、在字操作时,发生低字节向高字节进位或借位时;
(2)、在字节操作时,发生低4位向高4位进位或借位时。

对以上6个运算结果标志位,在一般编程情况下,标志位CF、ZF、SF和OF的使用频率较高,而标志位PF和AF的使用频率较低。

4、零标志ZF(Zero Flag)
零标志ZF用来反映运算结果是否为0。

如果运算结果为0,则其值为1,否则其值为0。

在判断运算结果是否为0时,可使用此标志位。

5、符号标志SF(Sign Flag)
符号标志SF用来反映运算结果的符号位,它与运算结果的最高位相同。

在微机系统中,有符号数采用补码表示法,所以,SF也就反映运算结果的正负号。

运算结果为正数时,SF的值为0,否则其值为1。

6、溢出标志OF(Overflow Flag)
溢出标志OF用于反映有符号数加减运算所得结果是否溢出。

如果运算结果超过当前运算位数所能表示的范围,则称为溢出,OF的值被置为1,否则,OF的值被清为0。

“溢出”和“进位”是两个不同含义的概念,不要混淆。

如果不太清楚的话,请查阅《计算机组成原理》课程中的有关章节。

二、状态控制标志位
状态控制标志位是用来控制CPU操作的,它们要通过专门的指令才能使之发生改变。

1、追踪标志TF(Trap Flag)
当追踪标志TF被置为1时,CPU进入单步执行方式,即每执行一条指令,产生一个单步中断请求。

这种方式主要用于程序的调试。

指令系统中没有专门的指令来改变标志位TF的值,但程序员可用其它办法来改变其值。

2、中断允许标志IF(Interrupt-enable Flag)
中断允许标志IF是用来决定CPU是否响应CPU外部的可屏蔽中断发出的中断请求。

但不管该标志为何值,CPU都必须响应CPU外部的不可屏蔽中断所发出的中断请求,以及CPU内部产生的中断请求。

具体规定如下:
(1)、当IF=1时,CPU可以响应CPU外部的可屏蔽中断发出的中断请求;
(2)、当IF=0时,CPU不响应CPU外部的可屏蔽中断发出的中断请求。

CPU的指令系统中也有专门的指令来改变标志位IF的值。

3、方向标志DF(Direction Flag)
方向标志DF用来决定在串操作指令执行时有关指针寄存器发生调整的方向。

具体规定在第5.2.11节——字符串操作指令——中给出。

在微机的指令系统中,还提供了专门的指令来改变标志位DF的值。

相关文档
最新文档