标志位简介

标志位简介标志位简介:标志寄存器,又称程序状态寄存器(它的内容是ProgramStatusWord,PSW).这是一个存放条件码标志,控制标志和系统标志的寄存器.6个状态标志位CF—进位标志,加法时的最高位(D7或D15)产生进位或减法时最高位出现借位,则CF=1,否则CF=0;AF—辅助进位标志,供BCD码使用。当D3位出现进位或借位时AF=1,否则AF=0;

大家好,又见面了,我是你们的朋友全栈君。如果您正在找激活码,请点击查看最新教程,关注关注公众号 “全栈程序员社区” 获取激活教程,可能之前旧版本教程已经失效.最新Idea2022.1教程亲测有效,一键激活。

Jetbrains全系列IDE使用 1年只要46元 售后保障 童叟无欺

标志位简介:

标志寄存器,又称程序状态寄存器(它的内容是Program Status Word,PSW).这是一个存放条件码标志,控制标志和系统标志的寄存器.

标志位简介

6个状态标志位

CF—进位标志,加法时的最高位(D7或D15)产生进位或减法时最高位出现借位,则CF=1,否则CF=0;

AF—辅助进位标志,供BCD码使用。当D3位出现进位或借位时AF=1,否则AF=0;

OF—溢出标志,带符号数进行算术运算时,其结果超出了8位或16位的表示范围,产生溢出,则OF=1,否则OF=0;

 

ZF—零标志,运算结果各位都为零,则ZF=1,否则ZF=0;

SF—符号标志,运算结果为负数时,即运算结果的最高位为1,则SF=1,否则SF=0;

PF—奇偶标志,反映操作结果中“1”的个数的情况,若有偶数个“1”,则PF=1,否则PF=0。

3个控制标志位

DF—方向标志,用来控制数据串操作指令的步进方向;
当设置DF=1时,将以递减顺序对数据串中的数据进行处理。当设置DF=0时,递增。

IF—中断允许标志,当设置IF=1,开中断,CPU可响应可屏蔽中断请求;当设置IF=0时,关中断,CPU不响应可屏蔽中断请求。

TF—陷阱标志,为程序调试而设的。当设置TF=1,CPU处于单步执行指令的方式;当设置TF=0时,CPU正常执行程序。

详解:

1、进位标志CF (Carry Flag)
当运算结果的最高有效位有进位(加法)或借位(减法)时,进位标志置1,

即CF = 1;否则CF= 0。

49H + 6DH=B6H, 没有进位:CF = 0

BBH + 6AH=(1)25H,有进位:CF = 1

2、零标志ZF (Zero Flag)
若运算结果为0,则ZF = 1;否则ZF = 0

49H + 6DH=B6H,结果不是零:ZF = 0

75H + 8BH=(1)00H,结果是零:ZF = 1

3、符号标志SF (Sign Flag)
运算结果最高位为1,则SF = 1;否则SF = 0

49H + 6DH=B6H=10110110B,SF=1

 

4、奇偶标志PF(Parity Flag)
当运算结果最低字节中“1”的个数为零或偶数时,PF = 1;否则PF = 0

3AH + 7CH=B6H=10110110B结果中有5个1,是奇数:PF = 0

5、溢出标志OF (Overflow Flag)
若算术运算的结果有溢出,则OF=1;否则 OF=0

49H + 6DH =B6H,产生溢出:OF = 1

75H + 8BH =(1)26H,没有溢出:OF = 0

 

什么是溢出?

处理器内部以补码表示有符号数8位表达的整数范围是:+127~-128

16位表达的范围是:+32767~-32768

如果运算结果超出这个范围,就产生了溢出有溢出,说明有符号数的运算结果不正确49H+6DH=B6H,就是73+109=182,已经超出-128~+127范围,产生溢出,故OF=1;

另一方面,补码B6H表达真值是-74,显然运算结果也不正确

溢出标志OF和进位标志CF是两个意义不同的标志

进位标志表示无符号数运算结果是否超出范围,运算结果仍然正确;

溢出标志表示有符号数运算结果是否超出范围,运算结果已经不正确。

例1:49H +6DH=B6H无符号数运算:

73+109=182范围内,

无进位有符号数运算:73+109=182范围外,有溢出

例2:BBH +6AH=(1)25H无符号数运算:

187+106=293范围外,

有进位有符号数运算:-69+106=37范围内,无溢出

溢出的判断判断运算结果是否溢出有一个简单的规则:

只有当两个相同符号数相加(包括不同符号数相减),而运算结果的符号与原数据符号相反时,产生溢出;因为,此时的运算结果显然不正确其他情况下,则不会产生溢出

1.当两个符号相同的数相加,结果的符号与之相反,则OF=1,否则OF=0.

2.当两个符号不同的数相减,结果的符号与减数相同,则OF=1,否则OF=0.

6、辅助进位标志AF(Auxiliary Flag)
运算时D3位(低半字节)有进位或借位时,AF = 1;否则AF = 0。

49H + 6DH=B6H,D3有进位:AF = 1
100 1001B+110 1101B=1011 0110B

 

 

7、方向标志DF(Direction Flag)
用于串操作指令中,控制地址的变化方向:设置DF=0,存储器地址自动增加;

设置DF=1,存储器地址自动减少。

CLD指令复位方向标志:DF=0

STD指令置位方向标志:DF=1

 

8、中断允许标志IF(Interrupt Flag)
用于控制外部可屏蔽中断是否可以被处理器响应:

设置IF=1,则允许中断;

设置IF=0,则禁止中断。

CLI指令复位中断标志:IF=0

STI指令置位中断标志:IF=1

 

9、陷阱标志TF(Trap Flag)
用于控制处理器进入单步操作方式:

设置TF=0,处理器正常工作;

设置TF=1,处理器单步执行指令。

单步执行指令——处理器在每条指令执行结束时,便产生一个编号为1的内部中断这种内部中断称为单步中断所以TF也称为单步标志利用单步中断可对程序进行逐条指令的调试这种逐条指令调试程序的方法就是单步调试
EU控制器是执行指令的控制电路,实现从队列中取指令、译码、产生控制信号等。,

在(cmd debug)调试程序中为了使标志位的值显尔易见,他提供用符号表示标志位的值。

标志

值为1

值为0

OF

OV

NV

DF

DN

UP

IF

EI

DI

SF

NG

PL

ZF

ZR

NZ

AF

AC

NA

PF

PE

PO

CF

CY

NC

 

cmp指令
 cmp ax,bx
 如果(ax)=(bx), 则 zf=1
 如果(ax)!=(bx), 则 zf=0
 如果(ax)<(bx), 则 cf=1
 如果(ax)>=(bx),则 cf=0
 如果(ax)>(bx), 则 cf=0且zf=0
 如果(ax)<=(bx),则 cf=1或zf=1
cmp指令配合和条件转移指令配合使用
 条件转移指令

指令

含义

检测的相关标志位

je

等于则转移

zf=1

jne

不等于则转移

zf=0

jb

小于则转移

cf=1

jnb

不小于则转移

cf=0

ja

大于则转移

cf=0且zf=0

jna

不大于则转移

cf=1且zf=1

 DF标志和串传送指令
 DF 方向标志位,在串处理指令中,控制每次操作后si、di的增减
 df=0 每次操作后si、di递增
 df=1 每次操作后si、di递减
 movsb:
 相当于
 mov es:[di],byte ptr ds:[si]
 如果 df=0
 inc di
 inc si
 如果 df=1
 dec di
 dec si
 movsw:
 相当于
 mov es:[di],word ptr ds:[si]
 如果 df=0
 add si,2
 add di,2
 如果 df=1
 sub si,2
 sub di,2
 一般来说,movsb和movsw都和rep配合使用,格式如下:
 rep movsb
 或者
 rep movsw
 相当于
 s:movsb
 loop s
 rep的作用是根据cx的值,重复执行rep后面的串传送指令

 

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/157820.html原文链接:https://javaforall.net

(0)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • poetry下载_烘手器安装

    poetry下载_烘手器安装介绍Poetry是Python中的依赖管理和打包工具,当然它也可以配置虚拟环境。它允许您声明项目所依赖的库,并为您管理(安装/更新)它们。之前一直使用virtualenvwrapper管理虚拟

    2022年7月30日
    3
  • SQL聚合函数「建议收藏」

    SQL聚合函数「建议收藏」一、知识点聚合函数对组执行计算并返回每个组唯一的值。GROUPBY子句通常与聚合函数一起用于统计数据。GROUPBY子句将行排列成组,聚合函数返回每个组的统计量。常用的聚合函数有:COUNT(),SUM(),AVG(),MIN(),MAX()。COUNT(),其作用主要是返回每个组的行数,也会返回有NULL值的列,可用于数字和字符列。SUM(),主要用于返回表达式中所有的总和,忽略NULL值,仅用于数字列。AVG(),返回表达式所有的平均值,仅用于数字列并且自动忽略NULL值。MIN(),返

    2022年6月21日
    21
  • MFS学习总结

    MFS学习总结公司使用moosefs做图片存储,最近学习了一下,在此小小总结一下,主要分以下几部分:MFS概述、特性和新版改进MFS工作原理和设计架构MFS的安装、部署、配置MFS的高级特性MFS的性能测试MFS

    2022年8月6日
    3
  • 快速加速计算机的方法,电脑慢的快速解决办法 四种方法电脑速度变快10倍[通俗易懂]

    快速加速计算机的方法,电脑慢的快速解决办法 四种方法电脑速度变快10倍[通俗易懂]电脑这种东西刚买来的时候用起来“刷刷”的,随着使用时间的增加,电脑就会开始莫名的变卡、变慢。作为一个资深的电脑大神,电脑慢这种问题根本就不能算电脑问题,让电脑变快的方法有很多,而且操作都巨简单,下面就一起来看看吧。电脑慢的快速解决办法一、系统常规优化1、你可以关闭系统属性中的特效,点击开始,控制面板,系统,高级,性能,设置在视觉效果中,设置为调整为最佳性能,确定。2、双击我的电脑,属性,高级,错…

    2022年6月5日
    50
  • 02-Epicor二次开发常用代码

    02-Epicor二次开发常用代码二次开发,俗称客制。是程序员根据需求,进入开发模式对Epicor进行代码修改。1、获取到的完整的SQL,可以将SQL语句弹出来2、每个公司的代码是一样的,不一样请清理系统缓存,并退出系统重新进入3、隐藏一列4、关于界面居中问题5、测试跟正式的水晶报表文件都在192.168.100.250的EpicorData\CustomReports文件夹中6、关于报表位置不够问题7、将DataView的数据转化为xml的文件,用于更新水晶报表8、vb.net中换行…

    2022年6月21日
    55
  • arm linux启动过程_项目冷启动和热启动的区别

    arm linux启动过程_项目冷启动和热启动的区别微处理器:LPC2114编译环境:KeilMDKV4.10思路:常把单片机系统的复位分为冷启动和热启动。所谓冷启动,也就是一般所说的上电复位,冷启动后片内外RAM的内容是随机的,通常是0x00或0xFF;单片机的热启动是通过外部电路给运行中的单片机的复位端一复位电平而实现的,也就是所说的按键复位或看门狗复位。复位后,RAM的内容都没有改变。在某些场合,必须区分出设备的重启是热重启还是冷重启。常…

    2022年10月30日
    0

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号