王爽 汇编语言第三版 第11章 标志寄存器

 

 

 

条件码:

  • ① OF(Overflow Flag)溢出标志,溢出时为1,否则置0.标明一个溢出了的计算,如:结构和目标不匹配.
  • ② SF(Sign Flag)符号标志,结果为负时置1,否则置0.
  • ③ ZF(Zero Flag)零标志,运算结果为0时置1,否则置0.
  • ④ CF(Carry Flag)进位标志,进位时置1,否则置0.注意:Carry标志中存放计算后最右的位.
  • ⑤ AF(Auxiliary carry Flag)辅助进位标志,记录运算时第3位(半个字节)产生的进位置。有进位时1,否则置0.
  • ⑥ PF(Parity Flag)奇偶标志.结果操作数中1的个数为偶数时置1,否则置0.

控制标志位:

  • ⑦ DF(Direction Flag)方向标志,在串处理指令中控制信息的方向。
  • ⑧ IF(Interrupt Flag)中断标志。
  • ⑨ TF(Trap Flag)陷井标志。

 

 

11.1 ZF 标志( 0 标志位 )

 

11.2 PF 标志( 奇偶 标志位

 

11.3 SF 标志 ( 结果正负标志0 表示 正,1 表示 负 )

 

https://blog.csdn.net/zhangjiuding/article/details/79133961

写出下面每条指令执行后,ZF、PF、SF等标志位的值。 

这里写图片描述

ZF标志:是否为0 
PF标志:结果中是否有偶数个为 1 的 bit位。 
SF标志:结果是否为负,仅有符号运算有用。

提示:传送指令不影响标志位。至于为什么是这样,我估计是因为更改标志位会费时间,CPU的资源很宝贵,而且转移指令的标志位并没有什么实际意义

  1. sub al,al 结果为0,有0个为1的bit位,非负。
  2. mov al,1 传送指令不影响标志位。
  3. push ax 传送指令不影响标志位。
  4. pop bx 传送指令不影响标志位。
  5. add al,bl 结果为00000010B,结果不为0,有1个为1的bit位,非负。
  6. add al,10 结果为00001100B,结果不为0,有2个为1的bit位,非负。
  7. mul al 结果为10010000B,结果不为0,有2个为1的bit位,非负。

 

 

11.4 CF 标志 ( 进位 标志位 )

 

 

11.5 OF 标志 ( 溢出 标志位 )

 

11. 6 adc 指令

 

11.7 sbb 指令

 

11.8 cmp 指令

 

 

 

11.9 检测比较结果的条件转移指令

 

 

 

 

11.10 DF 标志 和 串传送指令

 

 

11.11 pushf 和 popf

题目:下面的程序执行后,ax的值是多少?

assume cs:codesg
datasg segmentdb 16 dup(0)
datasg ends
codesg segmentstart:mov ax,0push axpopfmov ax,0fff0hadd ax,0010hpushfpop axand al,11000101band ah,00001000bmov ax,4c00hint 21hcodesg endsend start

这题是对第十一章标志寄存器的更好理解。
先上个图:

在这里插入图片描述

本题关键在于 OF  标志的判断。另一个关键点是 and 0000 0100 1100 0101 起到了屏蔽未学习位的作用!

一步一步来分析:

mov ax,0     将ax置0
push ax ax   入栈
popf         将栈中的数据弹出到psw(标志寄存器)中
此时 psw 中数据为:0000 0000 0000 0000b

mov ax, 0fff0h
add ax, 0010h
这两句的作用是(ax) = fff0h + 0010h,显然,psw中的数据会发生改变,问题是:如何改变呢?

CF: 假设这里是无符号运算,则1111 1111 1111 0000b(fff0h) + 0000 0000 0001 0000b(0010h) = 1 0000 0000 0000 0000b,已经发生了进位,所以CF = 1
PF: 结果保存在ax中,ax=0000h,’1’的个数是0,是偶数,所以PF标志=1

AF: AF没学,先不管,假设它是个不确定值,AF = ?
ZF: 结果是0,显然ZF = 1

SF: 结果是0,不是负数,所以SF = 1
TF: TF没学,先不管,假设它是个不确定值,AF = ?

IF: IF没学,先不管,假设它是个不确定值,AF = ?
DF: DF为方向标志位,add指令不会影响DF,前面已经将psw置0,所以DF = 0

OF: OF(溢出标志位)对初学者来说是最难的了,OF记录了有符号数运算结果是否溢出。那么,如何判断是否溢出呢?

 

假设是有符合运算,fff0h(1111 1111 1111 0000b)对应的原码是1000 0000 0001 000b(即十进制-16),这是如何算出来的?很简单:先看符号位1,说明是个负数,然后所有位取反再加1(即0000 0000
0001 0000b)得绝对值,前面确定是负数,所以符号位应该是1,则原码为1000 0000 0001 000b,同样,0010h的源码(正数的补码和原码相同)是0000 0000 0001 0000b(即十进制的16),

显然,结果是0,一个正数一个负数相加,结果肯定不会溢出!!!下面给出一个tip,用来快速判断运算是否溢出:
tip: 正加正得负,负加负得正,肯定溢出

一正一负相加肯定不会溢出

(进行正加正,负加负运算时,可以全部转为十进制来看,如果得到正加正得正,负加负得负,则需看他们结果是否在可表示范围内)

通过说明的tip,立刻可以判断出未溢出,所以OF = 0;

所以:运行完上面两条语句后,psw值为: 0000 00?? 010? 0101b

pushf 将psw的值入栈
pop ax 此时ax即: 0000 00?? 010? 0101b

and al,11000101b
and ah,00001000b

and 的是按位与,运算法则是:有0则0,我们写对齐来看

0000 00?? 010? 0101b
0000 1000 1100 0101b
显然 and 以后 ax = 0000 0000 0100 0101b = 45h

 

 

11.12 标志寄存器在 debug 中的表示

 

 

实验 11: 编写子程序

 

示例代码:

assume cs:codesgdatasg segmentdb "Beginner's All-purpose Symbolic Instruction Code.",0
datasg endscodesg segment
begin:mov ax,datasgmov ds,axmov si,0call lettercmov ax,4c00hint 21hletterc: ;子程序部分[开始]push si
s0:     mov al,[si]cmp al,0je exitsubcmp al,61h  ; 61h为'a'的ASCII码jb nextcmp al,7ah  ; 7ah为'z'的ASCII码ja nextand al,11011111B    ;或使用sub al,20hmov [si],al
next:   inc sijmp short s0
exitsub:pop siret        ;子程序部分[结束]
codesg ends
end begin; 提示:
; 1.相当于将字符串中的每个字符在闭区间['a','z']内进行比较;
; 2.欲显示相关字符串,可调用实验10中的"显示子程序"(属第十章内容),在调用时注意相关参数的传递。

 

 

 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/495679.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Gartner:预计2018年人工智能行业总价值达1.2万亿美元

来源:网络大数据市场研究公司Gartner周三发布最新研究报告称,人工智能行业的总价值将在2018年达到1.2万亿美元,比2017年增长70%。其中,创造商业价值最大的领域是客户体验解决方案。该公司还预计,到2022年的时候&#x…

JAVA将html[动态]页面转成图片

近日项目上接到一个任务,设计并编写住院病案首页页面,然后将其转换成图片显示给医生查看。 天哪,住院病案内容那么多,光编写这个页面就已经够呛了,转图片我也没弄过,于是百度了一下,花了两天时间…

王爽 汇编语言第三版 课程设计 1

From:https://www.cnblogs.com/Since-natural-ran/p/6938133.html 汇编语言-课程设计1: https://www.cnblogs.com/tsembrace/p/3267158.html 王爽课程设计1(汇编语言编写): https://www.imooc.com/article/18785 王爽《汇编语言》课程设计1: https://blog.csdn.net/…

挑战权威还是偏离主流?颠覆性研究或将证明神经信号是机械波

来源:科研圈 翻译 马骁骁 编辑 魏潇 廖红艳就职于哥本哈根尼尔斯玻尔研究所(Niels Bohr Institute)的托马斯亨伯格(Thomas Heimburg),是一位研究量子力学和生物物理的物理学家。然而,他却希…

史上最全的女人坐月子注意事項

希望男人们要精心照顾好妻子,让妻子平安度过这一时期,为了宝宝,为了你们的幸福,因为你爱她就要呵护她,她好你也好,她平安就是你们全家的幸福,精致女人把祝福送给你们! 传统上人们将产…

斯坦福大学、DARPA与硅谷公司共同分析前沿科技发展趋势

来源:科技日报 作者:张梦然日前,斯坦福大学研究团队、美国国防部高级研究计划局(DARPA)以及硅谷创投公司和米资本的专家们,共同研讨了技术将如何重塑行业和社会等问题。他们分析了现今全球前沿科技的未来…

小甲鱼 OllyDbg 教程系列 (一) :二进制破解科普系列之 ReverseMe

小甲鱼 视频教程( 4、5 集 ):https://www.bilibili.com/video/av6889190?p4 实验程序 reverseME.exe 下载地址:https://pan.baidu.com/s/18NDV3rQ_yV_qzUrNRYmqjA 提取码:e91j http://www.360doc.com/content/1…

java将字符串生成图片

java将字符串保存为图片 因为最近接触到的需求是要将指定的字符串内容保存为图片,我知道肯定要用awt相关的东西,但是以前没有接触过awt,所以只能去网上学习相关的东西和找有关的资料,好在最后可以解决,直接上代码&…

AI 综述专栏 | 超长综述让你走近深度人脸识别

来源:人工智能前沿讲习班 作者: 葛政相信做机器学习或深度学习的同学们回家总会有这样一个烦恼:亲朋好友询问你从事什么工作的时候,如何通俗地解释能避免尴尬?我尝试过很多名词来形容自己的工作:机器学习&…

机器人也能拥有人类情感:“情感计算”让机器人学会“读心术”

来源:《情感计算与情感机器人系统》作者:吴敏,刘振焘,陈略峰著随着机器人进入日常生活中的各个方面,人们对其提出了更高的要求,希望它们具有感知人类情感、意图的能力,这类机器人称为情感机器人…

C 语言 函数调用栈

From:https://www.cnblogs.com/clover-toeic/p/3755401.html https://www.cnblogs.com/clover-toeic/p/3756668.html 程序的执行过程可看作连续的函数调用。当一个函数执行完毕时,程序要回到调用指令的下一条指令(紧接call指令)处继续执行。函数调用过…

寒武纪创始人兼CEO陈天石博士的公开信

来源:来源:寒武纪科技摘要:2018年5月3日,寒武纪已在中国上海发布了首款云端智能芯片MLU100及相应的板卡产品。作为寒武纪的创始人和CEO,我非常自豪地与大家分享一个消息:2018年5月3日,寒武纪已在…

压栈, 跳转,执行,返回:从汇编看函数调用

From:https://www.jianshu.com/p/594357dff57e C函数调用过程原理及函数栈帧分析:https://blog.csdn.net/zsy2020314/article/details/9429707 从本篇开始,我们讨论一些高级语言中的基础设施:堆栈,函数调用&#xff0…

IBM AIX 5.3 系统管理 -- 系统启动过程详解

一. 启动过程 启动过程包含下面的一些步骤: 1.1启动一个系统的初始步骤是上电自检(Power On Self Test,POST)。其目的是验证基本硬件是否处于正常的工作状态。同时初始化内存、键盘、通信,以及音频设备。您可以看到在屏…

作弊阴影罩棋盘,人工智能咋避嫌?

来源:奇怪的科学家为什么要写这样一句话,就是为了避免剧情和现实生活中发生的事情万一差不多,会侵犯到别人的隐私,发生侵权,给双方带来不必要的麻烦。这位名为刘超的棋手把手机插在上衣兜里,摄像头正对棋盘…

ubuntu server版本安装指南(1)

ubuntu是基于GNU/Linux 的操作系统,本身是在同样GNU/Linux 架构下的Debian的基础上的一个版本。由于它在桌面环境上的易用性和精细度是许多人认识了他。ubuntu的强大在一定程度上体现在apt包管理系 统。安装软件不必像以前那样幸苦找到下载地址。编译安装。还要非常…

Arm中国合资公司具体布局浮出水面

来源:经济观察报摘要:作为全球最具影响力的芯片技术供应商之一,Arm在中国正迎来新的时代。对于Arm与中国合资公司事宜,5月4日下午,Arm授权的代表邮件回复《经济观察报》称:“合资公司目前刚开始运营”&…

汇编逆向基础

汇编逆向基础:https://www.xmind.net/m/kvJK/

深入理解Nginx~运行中的Nginx进程间的关系

在正式提供服务的产品环境下,部署Nginx时都是使用一个master进程来管理多个worker 进程,一般情况下,worker进程的数量与服务器上的CPU核心数相等。每一个worker进程都 是繁忙的,它们在真正地提供互联网服务,master进程…