关于加法和减法对标志寄存器具有不同设置规的探讨.pdfVIP

关于加法和减法对标志寄存器具有不同设置规的探讨.pdf

  1. 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
  2. 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  3. 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
  4. 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
  5. 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们
  6. 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
  7. 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
关于加法和减法对标志寄存器具有 不同设置规则的探讨 曾 虹 驰 [摘要]CPU 在执行加法和减法指令时,会对标志位产生影响,基于课堂内容,主要是对标 志寄存器中的CF、ZF、SF、OF 四个位进行修改以反映运算过程中的溢出状况。由于课本 上给出的设置规则是针对加法,本文探讨了加法与减法是否具有相同的设置规则,并通过 LINUX 下的内嵌汇编给出验证。 [关键词]标志寄存器 内嵌汇编 一、LINUX 下读取标志寄存器 1 8086 的16 位标志寄存器的结构如下 : 对低八位的标志位说明如下: (1)CF(Carry Flag):进位标志位,用于无符号数 (课堂上已提过,相关解释略,ZF 和 SF 同理) (2 )PF(Parity Flag):奇偶标志位,用于反映运算结果低8 位中“1”的个数。如果为偶 数,PF=1,如果为奇数,PF=0。 (3 )AF(Auxiliary Carry Flag):辅助进位标志位,在字节操作时低半字节向高半字节进位 或借位,在字操作时低字节向高字节进位或借位,AF=1,否则AF=0 。 (4 )ZF(Zero Flag):零标志位。 (5 )SF(Sign Flag):符号标志位,用于有符号数。 对于标志寄存器的低八位,汇编语言中可通过LAHF (Load AH from Flags)指令进行读取。 该指令将标志寄存器的低八位送入AH ,即将标志寄存器FLAGS 中的SF、ZF 、AF 、PF、CF 五 1 80X86 标志寄存器及比较和跳转指令, CSDN 社区. /waitforc/article/details/6905209 2 3 个标志位分别传送到累加器AH 的对应位(八位中有三位是无效的),如下图所示: 4 为验证以上理论的可靠性,在32 位的LINUX (Ubuntu)下,使用如下内嵌汇编代码进 行测试 (未特别强调时,本文中所有代码在编译时均使用-O0 优化级别,下同): 1.当a = 8,b = 10 时,输出c = 22 = 0001 0110(2) ,即CF = 0,PF = 1,AF = 1,ZF = 0 ,SF = 0 (每个位对应的标志位参考下图) 根据已有知识进行验证: (1)8 + 10 = 18,显然不溢出,CF = 0 正确; 2 LAHF,百度百科. /view/2008068.htm 3 8086 指令系统,华中师范大学信息技术系《微型计算机原理》网络课程. /xj/2008/wjyl/zwy/05/01webcourse/UNIT21/JXLR4.HTM 4 GCC 中的内嵌汇编语言,IT168 资讯. /a2008/0315/977/000000977900.shtml (2 )8 + 10 = 18 = 0001 0010(2) ,低8 位中“1”的个数为偶数,PF = 1 正确; (3 )AF 由于不太了解暂不作验证; (4 )8 + 10 = 18 ≠ 0 ,ZF = 0 正确; (5 )8 + 10 = 18 > 0 ,SF = 0 正确。 2.当a = -1073741824 = 1100 0000 0000 0000 0000 0000 0000 000(2) ,b = 1610612737 = 0110 0000 0000 0000 0000 0000 0000 0001(2)时,输出c = 3 = 0000 0011(2) ,即CF = 1,PF = 0 ,AF = 0 ,ZF = 0 ,SF = 0 ,再次进行验证: (1)最高四个字节相加1100 + 0110 = 1 0010,显然作为无符号数加法已经溢出,CF=1 正确; (2 )-1

文档评论(0)

docindoc + 关注
实名认证
文档贡献者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档