汇编算术运算指令

汇编算术运算指令
      8086的算术运算类指令能够对二进制或十进制(BCD码)数进行加、减、乘、除运算,操作数的数据形式可以是8位或16位的无符号数或带符号数。对于单操作数指令,不允许使用立即数形式;对于双操作数指令,只有源操作可以使用立即数,两个操作数中必须有一个在寄存器中。


1. 加法指令

指令格式: 加法 ADD DST, SRC; (DST)←(SRC)+(DST)
               带进位加法 ADC DST, SRC; (DST)←(SRC)+(DST)+CF
                加1 INC OPR; (OPR)←(OPR)+1    
      注意:

    这三条指令运算结果将影响状态标志位,但是INC指令不影响标志CF。下面以8位数加法运算为例作简要说明。

      [例4.20]

 

因为运算结果没有超出单字节无符号数范围,所以CF=0;运算结果超出单字节有符号数范围,所以OF=1;其他标志 ZF=0,SF=1。 以上运算可以用两条指令实现: MOV AH,01 ADD AH,7FH
      ADC指令主要用于多字节或多精度数据相加的运算。

    例如进行二组四字节(双精度)数1122 3344H和5566 7788H的相加运算时,使用单字节加法指令需要执行4次加法运算,运算过程中,通过ADC指令将低字节运算产生的进位加到高位字节,而使用字加法指令,只需要执行两次加法运算,当然也必须通过ADC指令处理低字运算产生的进位。使用ADC指令,必须先将CF标志置0。

2. 减法指令

 
      指令格式:
      减法              SUB   DST,SRC ; (DST)←(DST)-(SRC)
      带进位减法        SBB   DST,SRC ; (DST)←(DST)-(SRC)-CF
      减1               DEC  OPR ;       (OPR)←(OPR)-1
      求补              NEG OPR ;        (OPR)←0FFFFH-(0PR)+1
      比较              CMP  OPR1, OPR2 ;       (OPR1)-(OPR2)
   
       SBB指令主要用于多字节或多精度数据相减的运算;NEG指令对操作数进行取反加1的操作;CMP指令类似SUB指令执行减法操作,但不产生运算结果,对标志位影响见表4.3。 这几条指令的运算结果都影响状态标志位,只是DEC指令不影响标志CF。
      [例4.22]


     直接相减算式结果为: (4006AH)=520FH,SF=0,ZF=0,CF=0,OF=0
    补码加法算式结果为: (4006AH)=520FH,SF=0,ZF=0,CF=1,OF=0
算式中FECAH是(-0136H)的补码。
    可见,两种算式中运算结果是相同的,但是对标志CF的影响不同,因为是减法运算,正确结果应是CF=0。用补码加法得到运算结果CF=1,应求反后送入CF。

      表4-3 CMP指令对状态标志位的影响


3. 乘法指令

    乘法运算分为无符号数运算和有符号数运算,各有相应的指令,并使用双操作数。两个8位二进制数相乘,积为16位二进制数;两个16位二进制数相乘,积为32位二进制数。

指令格式:
    无符号数乘法  MUL   SRC;(AX)←(AL)×(SRC)8位数乘法
                             (DX,AX)←(AX)×(SRC)16位数乘法
    带符号数乘法  IMUL  SRC; 操作同上,但是操作数为带符号数
    注意:
    进行字节运算时,目的操作数必须是累加器AL,乘积在寄存器AX中;进行字运算时,目的操作数必须是累加器AX,乘积在寄存器DX、AX中。源操作数不允许使用立即数寻址方式。
    乘法指令运算结果只影响状态标志CF、OF,对其他状态标志位无影响(状态不定)。
    对于 MUL 指令,如果字节型数据相乘之积(AH)=0或字数据相乘之积(DX)=0,则CF=OF=0,否则CF=OF=1;对于IMUL指令,如果字节数据相乘之积AH或字数据相乘之积DX的内容是低一半的符号扩展,则CF=OF=0,否则CF=OF=1。


4. 除法指令

    除法运算分为无符号数运算和有符号数运算,各有相应的指令,并使用双操作数。当除数是8位或16位二进制数时,要求被除数是16位或32位的二进制数。

指令格式:
    无符号数除法  DIV  SRC;(AL)←(AX)/(SRC)8位二进制数除法的商
                            (AH)←(AX)/(SRC)8位二进制数除法的余数
                          或(AX)←(DX,AX)/(SRC) 16位二进制数除法的商
                            (DX)←(DX,AX)/(SRC) 16位二进制数除法的余数
    带符号数除法 IDIV  SRC; 操作同上,但是操作数为带符号数


     注意:
     当除数是字节数据时,被除数必须放在AX中,当除数是字数据时,被除数必须放在DX,AX中。
     除法指令运算结果对状态标志无定义(状态不定)。但是,若除数为0或带符号数,则当除法运算结果超出规定的范围时,将产生0号中断,与溢出标志OF无关。
     8086/8088 规定 IDIV 指令运算结果余数的符号与被除数相同。
     带符号数除法运算中,当被除数位数不够时,则需将被除数扩展到所需的位数。8086/8088设有带符号数扩展指令。
指令格式:
         字节扩展到字CBW;将寄存器AL中的符号位扩展到寄存器AH
         字扩展到双字CWD;将寄存器AX中的符号位扩展到寄存器DX
  这两条指令不影响标志位。


5. 十进制调整指令

    BCD码是一种用二进制编码的十进制数,又称为二—十进制数。8086/8088中BCD码分为两种形式: 其一是用四位二进制数表示一位十进制数,称为压缩的BCD码;其二是用八位二进制数表示一位十进制数,称为非压缩的BCD码,它的低四位是BCD码,高四位没有意义。由于BCD码是四位二进制编码,四位二进制数共有16个编码,BCD码只用其中的10个,其余没用的编码称为无效码。BCD码运算结果进入或跳过无效码区时,都会出现错误。为了得到正确结果,必须进行调整。8086/8088针对压缩BCD码和非压缩BCD码,分别设有两组十进制调整指令,其调整方法略有不同。
    (1) 压缩BCD码十进制调整指令

指令格式:
加法十进制调整DAA;(AL)←把AL中的和调整到压缩BCD码格式
减法十进制调整DAS;(AL)←把AL中的差调整到压缩BCD码格式
  
调整方法是:
    累加器AL低4位大于9或辅助进位标志位AF=1,则累加器AL加06H修正。累加器AL高4位大于9或进位标志位CY=1,则累加器AL加60H修正。累加器AL高4位大于等于9,低4位大于9,则累加器AL进行加66H修正。
    [例4.26]进行BCD码加法运算59+68=127

 
    此例中,BCD码加法结果的低四位使AF=1,高四位大于9,所以加66H进行修正。
    注意:

    压缩BCD码加法或减法十进制调整指令必须用在ADD(ADC)或SUB(SBB)指令之后,调整结果对标志OF无影响,对其他状态标志位均有影响。
    减法十进制调整方法与加法十进制调整类同,只是将加6变为减6操作。

转载于:https://www.cnblogs.com/hmmcsdd/archive/2008/05/01/huibiansuanshuzhiling.html

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

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

相关文章

树链剖分入门讲解

“在一棵树上进行路径的修改、求极值、求和”乍一看只要线段树就能轻松解决,实际上,仅凭线段树是不能搞定它的。我们需要用到一种貌似高级的复杂算法——树链剖分。 树链,就是树上的路径。剖分,就是把路径分类为重链和轻链。 记…

选择模块数据读取

1if(Bname"")2{ 3 Response.Write("<script languagejavascript>alert(错误的链接地址&#xff01;);history.go(-1);</script>"); 4 Response.End(); 5 }6if(Bid106&&Sid!0)7{ 8 //<!-- 标准法规--> 9 if(Sid127…

20160828_第4周周报

写在前面 这个周算是暑假集训的最后一周了&#xff0c;当然&#xff0c;周报还是要照常出的&#xff0c;不过昨天我看到了一些公司的商业的周报模板&#xff0c;于是就模仿着更改一下以后周报的报告风格&#xff0c;以后周报统统采用以下的格式进行&#xff0c;按照本周学习内容…

全国医院排名(2008)

中医学 广州中医药大学南京中医药大学 上海中医药大学中国中医研究院 山东中医药大学长春中医学院 山西省中医药研究院河北医科大学内蒙古医学院 [ 转自铁血社区 http://bbs.tiexue.net/ ]中药学 中国中医研究院成都中医药大学南京中医药大学 上海中医药大学 浙江大学广州中…

任重道远——记2016暑假训练

写在前面 刚开学这几天比较忙碌&#xff0c;昨天课也比较满&#xff0c;然后又打了cf&#xff0c;所以写总结的事情倒是拖了很久&#xff0c;早些时间是想到周天写的&#xff0c;结果周六周天又扣了两天的51nod&#xff0c;好容易今天空课&#xff0c;刚好对前一段的状态做一个…

Terrafugia希望在今年夏天带来真正可飞的Airplane

Terrafugia希望在今年夏天带来真正可飞的Airplane 大家都知道&#xff0c;Terrafugia的汽车飞机混合机种&#xff0c;他是是辆双座的汽车&#xff0c;拥有100-500英里的速度范围&#xff0c;一个独立的无铅汽油储备箱&#xff0c;同时配置有电子计算机&#xff0c;用来在空中飞…

手残脑残 记录仪

说明&#xff1a; 该博文用于记录做题过程中各种脑残/手残的低级问题&#xff0c;如果遇到手残的问题出现超过3次&#xff0c;可自行选择。剁手。。 极限数据&#xff0c;例如 0<n<10000 在做题过程中很容易漏掉边角数据&#xff0c;所以在编写的时候&#xff0c;务必…

四川汶川地震祈福赈灾宣传画、报纸头版精选第二版(超多图)

本篇Key词&#xff1a; 汶川地震祈福图片汶川地震祈福壁纸四川汶川地震祈福赈灾宣传画 四川汶川地震祈福赈灾宣传画 天使 不要害怕&#xff0c;手牵手渡过难关 孩子不哭 生命奇迹 从废墟中站起来 祝福灾区人民 众志成城&#xff0c;抗震救灾 众志成城&#xff0c;抗震救灾2 众…

Nim游戏的一个扩展——51nod 1661 黑板上的游戏+LA 5059 Playing With Stones

前几天做过一道题目&#xff0c;是Nim游戏的一个扩展&#xff0c;也不能说扩展吧&#xff0c;只是说另一种常见的状态。 问题引入&#xff1a; 给定n堆石子&#xff0c;每堆石子有vi&#xff08;1<vi<1e5) 个&#xff0c;每次可以取一堆中的一些石子&#xff0c;使得剩…

【转】三五个人十来条枪 如何走出软件作坊成为开发正规军

自从发了上一篇博文&#xff0c;这几天收到很多朋友的来信。大家从各个开发语言的优缺点和适用领域&#xff0c;一直讨论到设计模式、框架、重构、单元测试&#xff0c;乃至敏捷编程&#xff0c;最后都讨论到了软件开发过程管理&#xff0c;甚至都谈到了盈利模式和中国软件的悲…

2016年湖南省第十二届大学生计算机程序设计竞赛

题目&#xff1a; 任意门 听说这套题目是叉姐出的&#xff0c;感觉呵呵了。。。 据说现场牌都不够发的&#xff01;&#xff01;&#xff01;只能说给湖南省出的题目太强了&#xff0c;不适合新手去做&#xff0c;当然我这种老手也不见得做的多好&#xff0c;出了3题&#xf…

控件中的Events个人理解。

首先&#xff0c;了解一下与事件和委托有关的几个类和属性&#xff1a;Delegate, MulticastDelegate, EventHandler, EventHandlerList, EventHandlerList.ListEntry, Control, ComponentControl的Events属性是由System.ComponentModel.Component 继承而来,它是EventHandlerLis…

告白——一个loser的手记

“真不知道怎么会是这样&#xff1f;” 回味以前的种种&#xff0c;到最后才发觉你是如此的模样&#xff0c;如此的狼狈和破败&#xff0c;如此不堪一击。 你曾经以为和高手的差别不过丝毫&#xff0c;但今天看过来&#xff0c;高手夺得了顶峰&#xff0c;而你确一直在这里徘…

ManualResetEvent用法

ManualResetEvent 允许线程通过发信号互相通信。通常&#xff0c;此通信涉及一个线程在其他线程进行之前必须完成的任务。 public static ManualResetEvent mre new ManualResetEvent(false); ManualResetEvent建立时是把false作为start的初始状态&#xff0c;这个类用于通知另…

2014_anshan_onsite

5070 Twelve Months 5071 Chat 比较长的模拟 5072 Coprime 容斥 同色三角形建模后&#xff0c;转化为互质个数问题 5073 Galaxy 数学题&#xff0c;公式递推和化简 5074 Hatsune Miku dp,分类讨论和递推 5075 Random Inversion Ma…

几种流行的JS框架的选择

目前来看&#xff0c;JS框架以及一些开发包和库类有如下几个&#xff0c;Dojo 、Scriptaculous 、Prototype 、yui-ext 、Jquery 、Mochikit、mootools 、moo.fxAjaxian在2007年底对Ajax工具进行了调查&#xff0c;部分调查结果见下表&#xff08;其中数字为调查者使用该工具的…

2014_beijing_onsite

5112 A Curious Matt 签到&#xff0c;排序题目 5113 Black And White 5*5的方格&#xff0c;dfs剪枝 5114 Collision 线性方程求解 扩展欧几里得 5115 Dire Wolf 简单的区间DP问题。 5116 Everlasting L 5117 Fluorescent …

[转]关于HTTP服务器每个客户端2个连接的限制

这两天猫在家里搞一个多线程的断点续传得C#程序&#xff0c;发现同时只能开2个线程下载&#xff0c;其他的线程一律要等待&#xff0c;这样就导致下载大文件时其他线程经常超时&#xff0c;郁闷好久。今天回公司无意中发现了一个帖子&#xff0c;终于真相大白了&#xff0c; …

2014_guangzhou_onsite

5127 Dogs Candies 链表&#xff0c;暴力 5128 The E-pang Palace 计算几何水题&#xff0c;求不相交两个矩形的最大面积 5129 Yong Zhengs Death 5130 Signal Interference 计算圆与多边形的交&#xff0c;计算几何模板题目 5131 Song Jian…

[ SAP ]MM Valuation System

1、除了工厂&#xff0c;另一个会决定不同的会计科目的因素是物料本身&#xff0c;所以我们在物料主数据中会需要定义一个“评估类”参数&#xff0c;通过“评估类”来决定会计科目。 2、创建/更改/删除物料主数据&#xff1a;后勤-》物料管理-》物料主数据-》物料 MM01创建物…