汇编语言 -第十一章

第十一章 标志寄存器

一、各标志位说明
1、ZF标志
*名称:零标志位
*位置:第6位
*作用:记录相关指令执行后,结果是否为0.如果结果为0,则zf位为1;反之为0.
2、PF标志
*名称:奇偶标志位
*位置:第2位
*作用:记录相关指令执行后,结果所有bit位中为1的个数是否为偶数.如果为偶数,则pf位为1;反之为0.
3、SF标志
*名称:符号标志位
*位置:第7位
*作用:记录相关指令执行后,结果是否为负.若为负,则sf位为1;反之为0。
4、CF标志
*名称:进位标志位
*位置:第0位
*作用:记录相关指令执行后,结果是否向更高位借位(进位)。若有借位(进位),则cf位为1;反之为0.
*备注:只相关于无符号数的运算。
5、OF标志
*名称:溢出标志位
*位置:第11位
*作用:记录相关指令执行后,结果是否溢出.
*备注:(1)溢出是指是否超过了机器可以表示的范围,对8位来说,有符号数的表示范围为-128~127.
           (2)溢出标志位只相关于有符号数的运算

如何理解CF只针对无符号数,OF只针对有符号数?

首先,以8位数据为例,进位或借位是表示在这8位数据再高一位的位置上借数,也就是说此时这8位全都作为数字数据的,最高位并不作为符号位。

比如mov al,98   add al,99之后

(al)=197,即0c5h,没有产生进位,所以cf=0;若al表示有符号数,则明显197超出了8位能表示的有符号数范围(-128~127),所以of=1.

在比如mov al,128  add al,129

(al)应该等于257,可实际上al寄存器放不下这个数据,需要9位来表示257:1 0000 0001;此时产生了进位,则cf=1;

若将al看为有符号数,则开始al=-128,加上129表示的有符号数为-127.相加后(al)=1,没有超出表示范围,则of=0.

通过上述,概况:对于无符号数,若cf=1则最终结果不准确;对于有符号数,若of=1,则最终结果不准确。

6、DF标志

*名称:方向标志位
*位置:第10位
*作用:如果df=0,每次操作后si/di递增;
          如果df=1,每次操作后si/di递减。

二、相关指令
*adc\sbb:只应用于无符号数的计算。
*cmp
格式:cmp a1,a2
操作:判断(a1-a2)的值,以影响相关标志位,但该值不保存。
说明:cmp相关的运算需要依据实际情况来看是针对无符号数还是有符号数。
引申:
(1)对无符号数运算来说,cmp a,b,很容易得出:
if zf=1  ,a=b
if zf=0&cf=0,a>b
if zf=0&cf=1,a<b
(2)对有符号数运算来说,cmp a,b,则
if zf=1,a=b
if zf=0&of=0:zf=0说明a!=b,of=0说明未发生溢出,对于有符号数的运算(a-b),结果未溢出,按以下几种情况分析:
        A、a>=0&b>=0,这种情况下,对有符号数来说,a-b永远不会溢出
        B、a>=0&b<=0,这种情况下,只有当(a+|b|)<=127的情况下才不会溢出
        C、a<0&b>0,这种情况下,只有当(b+|a|)<=128的情况下才不会溢出
        D、a<0&b<0,这种情况下,a-b永远不会溢出
if zf=0&of=1:zf=0说明a!=b,of=1说明发生溢出,对于有符号数的运算(a-b),结果溢出,情况分析同上步(相反);
可见,对有符号数而言,仅仅通过zf和of的值,无法判断两数的大小关系。
若要判断a,b大小,须再看sf的值,书上p225有结论:
T1、如果溢出且实际结果为负,那么逻辑上真正结果为正;
T2、如果溢出且实际结果为正,那么逻辑上真正结果为负;
下面来具体分析一下:
T1:of=1&sf=1,求证a>b
证明:
1、of=1可得出 -128>(a-b)>=-255 or 255>=(a-b)>127
2、sf=1可得出(a-b)的补码在第7位(最高位)为1.
3、分析[-255,-128)和(127,255]的补码表示形式,找出第7位为1的范围。
     (-129)补=1111 1111 0111 1111
     (-130)补=1111 1111 0111 1110
     (-131)补=1111 1111 0111 1101
      ...
     (-255)补=1111 1111 0000 0001
      可看出[-255,128)区段的第7位为0,不符合。因此可以推断(a-b)只可能属于区间(127,255],接下来再具体分析证实一下:
     (128)补=(128)原=0000 0000 1000 0000
     (129)补=(129)原=0000 0000 1000 0001
      ...
     (255)补=(255)原=0000 0000 1111 1111
      可看出[-255,128)区段的第7位为1,符合。
     因此255>=(a-b)>127,而对于8bit位的a-b来说,只有在a>0&b<0的情况下才可能发生;因此a>b.
故而得证。
T2:of=1&sf=0,求证a<b  
   同理可证。
总结:
     这是这章乃至整本书里最让我困惑的问题之一,我无法从王爽书上那简单的话语可以得出相应的结论。
     在上述证明t1-t2的时候我考虑了一个前提,即:计算机并不知道我们要进行的是否为无符号数的计算,但计算机提供了补码这个机制,来应对我们逻辑上所能想的所有情况,来使得结果正确。
     比如对(-1)-128这个运算来说,逻辑上的结果为-129。
     1、如果我们考虑的是8bit位的运算,则产生了溢出,of=1,最终8bit位结果为0111 1111;而0111 1111表示的是127,逻辑上127这个结果明显是错误的;可对于计算机运算结果里这8位保存的二进制真的是没有意义的么?当然不是。
     2、如果我们考虑的是16bit位的运算,则不产生溢出,of=0,最终16bit位结果为1111 1111 0111 1111,可以看出其低8位的结果和上述相一致。
     也就是说,对于情况1来说,因为溢出了,真实的值并不能只通过这8位来表示,但这8位保存的又是真实值的一部分组成。
     对于上面的证明过程也是应用了这一点,对于8bit位的有符号数运算,其8位溢出则必然可以用16位补码表示,而这8位又是16位补码的低8位。
*je\jne\jb\jnb\ja\jna
*串传送指令
(1)movsb
源:byte ptr ds:[si]&mdash;&mdash;>目的:byte ptr es:[di]
依据df值,使得si/di递增/减1。
(2)movsw
源:word ptr ds:[si]&mdash;&mdash;>目的:word ptr es:[di]
依据df值,使得si/di递增/减2。      
(3) rep
一般和串传送指令搭配使用,比如:
rep movsb,相当于:
s: movsb
    loop s
(4) cld:将df位置0;std:将df位置1.
(5)pushf:将标志寄存器压栈;popf:取栈内数据存入标志寄存器中

检测点11.1

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

sub al,al         ZF=1,PF=1,SF=0mov al,1         ZF=0,PF=0,SF=0  push ax         ZF=0,PF=0,SF=0pop bx          ZF=0,PF=0,SF=0add al,bl         ZF=0,PF=0,SF=0


检测点11.2

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

sub al,al    CF=0;OF=0;SF=0;ZF=1;PF=1mov al,10H    CF=0;OF=0;SF=0;ZF=1;PF=1      ;mov不影响标志位add al,90h    CF=0;OF=0;SF=1;ZF=0;PF=1mov al,80h    CF=0;OF=0;SF=1;ZF=0;PF=1add al,80h    CF=1;OF=1;SF=0;ZF=1;PF=1mov al,0fch    CF=1;OF=1;SF=0;ZF=1;PF=1add al,05h    CF=1;OF=0;SF=0;ZF=0;PF=0mov al,7dh    CF=1;OF=0;SF=0;ZF=0;PF=0add al,0bh    CF=0;OF=1;SF=1;ZF=0;PF=1


 

检测点11.3

(1)补全程序,统计f000:0处32个字节中,大小在[32,128]数据的个数

mov ax,0f000hmov ds,axmov bx,0mov dx,0mov cx,32s:mov al,[bx]cmp al,32jb s0cmp al,128ja s0inc dxs0:inc bxloop s


转载于:https://www.cnblogs.com/tsembrace/p/3291363.html

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

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

相关文章

三线调速风扇原理_学修电风扇~风机转速慢、调速失灵故障维修。

一、电风扇转速慢转速慢的故障原因有电源电压过低、起动电容器损坏及电动机本身性能不良或轴承润滑不良。对于微电脑控制式电风扇出现转速慢的故障现象&#xff0c;有可能是双向晶闸管驱动电路性能不良造成的。落地式电风扇、台式电风扇及鸿运扇出现此类故障时的检查方法大致相…

数据结构——链式队列解析(C语言版)

摘自&#xff1a;数据结构学习——链式队列解析&#xff08;C语言版&#xff09; 作者&#xff1a;正弦定理 发布时间&#xff1a;2020-11-26 21:07:08 网址&#xff1a;https://blog.csdn.net/chinesekobe/article/details/110203428 数据结构——链队列解析过程和简单代码实现…

ORACLE AUDIT 审计

转自 http://blog.csdn.net/dnnyyq/article/details/4525980 1、什么是审计审计&#xff08;Audit)用于监视用户所执行的数据库操作&#xff0c;并且Oracle会将审计跟踪结果存放到OS文件&#xff08;默认位置为$ORACLE_BASE/admin/$ORACLE_SID/adump/&#xff09;或数据库&…

中班机器人教室设计方案_奇思妙想一起玩,机器人来了安格利亚东郡生态幼儿园亲子活动...

奇思妙想一起玩机器人总动员亲子活动课程起源有一天午休起床几个小女生正排队梳辫子&#xff0c;因为需要等待&#xff0c;孩子们比较无聊就在看教室的摆件&#xff0c;突然小朋友们就用机器人的语调开始对话&#xff0c;我听到后感觉很有意思也用机器人的语调和他们对话&#…

解决思科认证学员与高校网络及信息安全专业实验限制的解决方案

解决思科认证学员与高校网络及信息安全专业实验限制的解决方案—GNS3VMwareInternet中低端使用公布如下演示录像&#xff1a;&#xff08;于2013/9/2上传&#xff0c;待版主审核后24小时公布&#xff09;持续更新录像位置&#xff1a;http://edu.51cto.com/lecturer/user_id-76…

makefile 完美教程

简介 Makefile 是和 make 命令一起配合使用的&#xff0c;很多大型项目的编译都是通过 Makefile 来组织的,。 我建立工程的方法有以下三点&#xff1a; 1.makefile&#xff1a; 优点&#xff1a;使用非常广泛&#xff0c;通用性强&#xff0c;可跨平台。 缺点&#xff1a;语法比…

数据结构——顺序栈和链式栈的简单实现和解析(C语言版)

摘自&#xff1a;数据结构学习——顺序栈和链式栈的简单实现和解析&#xff08;C语言版&#xff09; 作者&#xff1a;正弦定理 发布时间&#xff1a;2020-11-26 21:26:49 网址&#xff1a;https://blog.csdn.net/chinesekobe/article/details/110205257 数据结构——栈的简单解…

c语言位运算负数的实例_0基础学习C语言第三章:位运算

C语言提供了六种位运算符&#xff1a;& 按位与| 按位或^ 按位异或~ 取反<< 左移&#xff0c;相当与*2>> 右移&#xff0c;正数高位补0&#xff0c;负数由计算机决定循环左移k次 (x<<k) | (x >> (32-k)),循环右移k次 (x>>k) | (x << (3…

phpMyAdmin 安装错误解决方法

为什么80%的码农都做不了架构师&#xff1f;>>> phpMyAdmin - Error Cannot start session without errors, please check errors given in your PHP and/or webserver log file and configure your PHP installation properly. Also ensure that cookies are ena…

Harbo1.5.2离线搭建

环境说明 操作系统版本&#xff1a;Centos7.5 docker版本&#xff1a;docker-ce 17.03.2 harbor版本&#xff1a;v1.5.2 docker-compose: 1.22.0 基础环境搭建 系统优化 CentOS关闭selinux sudo sed -i s/SELINUXenforcing/SELINUXdisabled/g /etc/selinux/configsetenforce 0…

数据结构——二叉链表创建二叉树(C语言版)

摘自&#xff1a;数据结构——二叉链表创建二叉树&#xff08;C语言版&#xff09; 作者&#xff1a;正弦定理 发布时间&#xff1a;2020-12-08 15:36:21 网址&#xff1a;https://blog.csdn.net/chinesekobe/article/details/110873792 数据结构——二叉链表创建二叉树 一、思…

pca图解读_干货!手把手一步一步解读PCA分析,逃学博士尽力了!

01 引言之前发了几篇文章关于矩阵中 特征向量和PCA主元分析的文章&#xff0c;大家反响不错。当时并没有涉及到数学运算&#xff0c;只是大概讲了讲原理。这篇文章我们一起来一步一步解读PCA的计算过程如何用Python实现PCA分析准备就绪02 第一步&#xff1a;数据获取第一步&…

中南月赛 1313: ZZY的宠物

1313: ZZY的宠物 Time Limit: 2 Sec Memory Limit: 128 MBSubmit: 114 Solved: 59[Submit][Status][Web Board]Description ZZY领养了一对刚刚出生的不知名小宠物..巨萌巨可爱!!...小宠物的生命为5个单位时间并且不会在中间出意外翘辫子(如: 从0出生能活到5但活不到6)..小宠物…

查询大于2分钟的数据

查询大于2分钟的数据select * from dt_appsdk_users where datediff(mi,update_time,getdate()) > 2转载于:https://www.cnblogs.com/sntetwt/p/9838012.html

数据结构——二叉树根节点到特定节点路径(C语言版)

摘自&#xff1a;数据结构——二叉树根节点到特定节点路径&#xff08;C语言版&#xff09; 作者&#xff1a;正弦定理 发布时间&#xff1a;2020-12-10 21:09:43 网址&#xff1a;https://blog.csdn.net/chinesekobe/article/details/110991771 二叉树——根节点到特定节点路径…

实用插件_精选 10 个非常实用的 VS Code 插件

来源&#xff1a;Daan原文&#xff1a;https://medium.com/better-programming/10-extremely-helpful-visual-studio-code-plugins-for-programmers-c8520a3dc4b8无论你是经验丰富的开发人员还是刚刚开始第一份工作的初级开发人员&#xff0c;你都会想让自己的开发工作尽可能轻…

nginx笔记.

安装&#xff1a; 依赖的软件包&#xff1a; gcc gcc-c autoconf automake zlib zlib-devel openssl opensll-devel pcre pcre-devel 到官方网站上下载nginx包&#xff1a; 解压: tar -zxf nginx-x.x.tar.gz 安装三步走&#xff1a;./configure------- make------make install …

English trip -- VC(情景课)10 C I like to watch TV. 我爱看电视

Grammar focus 语法点&#xff1a; like to do you do they What does he like to do? does she Practice 练习 What do they like to do&#xff1f; They like to play basketball. What does she like to do&#xff1f; She likes to swim. What does he…

数据结构——计算节点个数和二叉树高度(C语言版)

摘自&#xff1a;数据结构——计算节点个数和二叉树高度&#xff08;C语言版&#xff09; 作者&#xff1a;正弦定理 发布时间&#xff1a;2020-12-12 23:27:09 网址&#xff1a;https://blog.csdn.net/chinesekobe/article/details/111086664 数据结构——计算节点个数、二叉树…

写入接口c语言_PYNQ: 使用CFFI嵌入C语言

未经私信同意禁止转载&#xff01;前言CFFI是连接Python与c的桥梁&#xff0c;可实现在Python中调用c文件。CFFI为c语言的外部接口&#xff0c;在Python中使用该接口可以实现在Python中使用外部c文件的数据结构及函数。Python运行比较低&#xff0c;尤其是操作字节流的时候&…