算术逻辑运算类_第1页
算术逻辑运算类_第2页
算术逻辑运算类_第3页
算术逻辑运算类_第4页
算术逻辑运算类_第5页
已阅读5页,还剩36页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

算术运算类指令用来执行二进制的算术运算:加减乘除。这类指令会根据运算结果影响状态标志,有时要利用某些标志才能得到正确的结果;使用他们时请留心有关状态标志重点掌握加法指令:ADD、ADC、INC减法指令:SUB、SBB、DEC、CMP、NEG4.3.2算术运算类指令算术运算类指令

可处理:不带符号/带符号的8/16位二进制数不带符号的压缩型(2位BCD码)/非压缩型(一位BCD码,高4位补0)十进制数

对于加法和减法指令,带符号和不带符号的加减运算的操作过程无区别,可用同一条加法/减法指令完成

对于乘法除法运算,运算过程完全不同,分别设有不带符号和带符号的乘法除法的指令

对于十进制运算,先采用二进制运算指令,后进行十进制调整的方式来实现加法指令:ADD,ADC和INC减法指令:SUB,SBB,DEC,NEG和CMP他们分别执行字或字节的加法和减法运算,除INC和DEC不影响CF标志外,其他按定义影响全部状态标志位操作数组合:运算指令助记符reg,imm/reg/mem运算指令助记符mem,imm/reg4.3.2.1加法和减法指令

ADD

dest,src

;加法:dest←dest+src

;ADD指令使目的操作数加上源操作数,和的结果送到目的操作数

SUB

dest,src

;减法:dest←dest-src

;SUB指令使目的操作数减去源操作数,差的结果送到目的操作数1.加和减指令MOVAX,7348H ;AX=7348HADDAL,27H

;AL=48H+27H=6FH,AX=736FH

;OF=0,SF=0,ZF=0,PF=1,CF=0ADDAX,3fffH

;AX=736FH+3FFFH=B36EH

;OF=1,SF=1,ZF=0,PF=0,CF=0例4加法SUBAH,0F0H

;AH=B3H-F0H=C3H,AX=C36EH

;OF=0,SF=1,ZF=0,PF=1,CF=1MOVwordptr[200H],0EF00H

;[200H]=EF00H,标志不变SUB[200H],AX

;[200H]=EF00H-C36EH=2B92H

;OF=0,SF=0,ZF=0,PF=0,CF=0SUBSI,SI ;SI=0

;OF=0,SF=0,ZF=1,PF=1,CF=0例5减法ADC

dest,src

;加法:dest←dest+src+CF

;ADC指令除完成ADD加法运算外,还要加上进位CF,结果送到目的操作数SBB

dest,src

;减法:dest←dest-src-CF

;SBB指令除完成SUB减法运算外,还要减去借位CF,结果送到目的操作数2.带进位加和减指令MOVAX,7856H ;AX=7856HMOVDX,8234H ;DX=8234HADDAX,8998H ;AX=01EEH,CF=1ADCDX,1234H ;DX=9469H,CF=0SUBAX,4491H ;AX=BD5DH,CF=1SBBDX,8000H ;DX=1468H,CF=0例6无符号双字加法和减法CMP

dest,src

;做减法运算:dest-src

;CMP指令将目的操作数减去源操作数,但差值不回送目的操作数比较指令通过减法运算影响状态标志,用于比较两个操作数的大小关系,后面跟转移指令判断两个无符号数大小用JC/JNC或JA/JNBE或JB/JNAE指令判断两个带符号数大小用JG/JNLE或JL/JNGE3.比较指令CMP(compare)INC

reg/mem

;增量(加1):reg/mem←reg/mem+1DEC

reg/mem

;减量(减1):reg/mem←reg/mem-1INC指令和DEC指令是单操作数指令与加法和减法指令实现的加1和减1不同的是:INC和DEC不影响CF标志INCSI ;SI←SI+1DECbyteptr[SI] ;[SI]←[SI]-14.增量和减量指令例7比较指令CMP(compare)若自BLOCK开始的内存缓冲区中,有100个带符号字数据,要找出其中的最大数,把它存到MAX单元中

MOVBX,OFFSETBLOCKMOVAX,[BX]INCBXINCBXMOVCX,99AGAIN:CMPAX,[BX]JGNEXTMOVAX,[BX]NEXT:INCBX,INCBXDECCXJNZAGAINMOVMAX,AXHLTNEGreg/mem

;reg/mem←0-reg/memNEG指令对操作数执行求补运算,即用零减去操作数,然后结果返回操作数求补运算可表达成:将操作数按位取反后加1NEG指令对标志的影响与用零作减法的SUB指令一样NEG指令也是一个单操作数指令NEG指令执行的结果一般总是使CF=1除非操作数为0时CF=05.求补指令NEG(negtive)MOVAX,0FF64HNEGAL

;AL=0-64H=9CH,AX=FF9CH

;OF=0SF=1,ZF=0,PF=1,CF=1SUBAL,9DH;AL=FFH,AX=FFFFH

;OF=0,SF=1,ZF=0,PF=1,CF=1NEGAX

;AX=0-FFFFH=0001H

;OF=0,SF=0,ZF=0,PF=0,CF=1DECAL

;AL=01H-1=0,AX=0000H

;OF=0,SF=0,ZF=1,PF=1,CF=1NEGAX

;AX=0-0=0

;OF=0,SF=0,ZF=1,PF=1,CF=0例8求补运算十进制数调整指令对二进制运算的结果进行十进制调整,以得到十进制的运算结果,以此实现十进制BCD码运算8086指令系统支持两种BCD码调整运算压缩BCD码就是通常的8421码;它用4个二进制位表示一个十进制位,一个字节可以表示两个十进制位,即00~99非压缩BCD码用8个二进制位表示一个十进制位,只用低4个二进制位表示一个十进制位0~9,高4位为04.3.2.2十进制调整指令十进制调整指令DAA/DAS指令:十进制调整指令它跟在ADD/ADC或SUB/SBB之后,功能是将AL中十进制数相加/减后的结果进行校正,产生一个组合的十进制和/差,仍保留在AL中

AAA/AAS指令:十进制调整指令它跟在ADD/ADC或SUB/SBB之后,对AL中两个未组合的十进制数相加/减后的结果进行校正,产生一个未组合的十进制和/差

,仍保留在AL中

乘法指令分无符号和有符号乘法指令

MULreg/mem ;无符号乘法

IMULreg/mem ;有符号乘法AL或AX与另一个操作数相乘,结果送到AL和AH(两个字节相乘),或送到AX和它的扩展部分DX(两个字相乘)除法指令分无符号和有符号除法指令

DIVreg/mem ;无符号除法

IDIVreg/mem ;有符号除法字节除法:AX÷源操作数(8位),商在AL中,余数在AH中字除法:DX,AX

÷源操作数(16位),商在AX中,余数DX中4.3.2.3乘法和除法指令真值(十进制)

8 64二进制编码

08H 40H压缩BCD码

08H 64H非压缩BCD码

08H 0604HASCII码

38H 3634H压缩BCD码加减法调整指令DAADAS非压缩BCD码加减法调整指令AAAAASAAMAAD编码的比较位操作类指令以二进制位为基本单位进行数据的操作当需要对字节或字数据中的各个二进制位操作时,可以考虑采用位操作类指令注意这些指令对标志位的影响1.逻辑运算指令ANDORXORNOTTEST2.移位指令SHLSHRSARSAL3.循环移位指令ROLRORRCLRCR4.3.3逻辑运算指令双操作数逻辑指令AND、OR、XOR和TEST,根据结果设置SF、ZF和PF状态,而对AF未定义;指令的执行使CF=OF=0

:运算指令助记符

reg,imm/reg/mem运算指令助记符

mem,imm/reg

单操作数逻辑指令NOT不影响标志位:NOTreg/mem4.3.3.1逻辑运算指令对两个操作数执行逻辑与运算,结果送目的操作数ANDdest,src

;dest←dest∧src

只有相“与”的两位都是1,结果才是1;否则,“与”的结果为01.逻辑与指令AND对两个操作数执行逻辑或运算,结果送目的操作数ORdest,src

;dest←dest∨src只要相“或”的两位有一位是1,结果就是1;否则,结果为02.逻辑或指令OR对两个操作数执行逻辑异或运算,结果送目的操作数XORdest,src

;dest←dest⊕src只有相“异或”的两位不相同,结果才是1;否则,结果为03.逻辑异或指令XOR对两个操作数执行逻辑与运算,结果并不送目的操作数,仅按AND指令影响标志TESTdest,src

;dest∧src

AND与TEST指令的关系,同SUB与CMP指令的关系一样4.测试指令TEST对一个操作数执行逻辑非运算NOTreg/mem

;reg/mem←~reg/mem

按位取反,原来是“0”的位变为“1”;原来是“1”的位变为“0”5.逻辑非指令NOTMOVAL,75H ;AL=75HANDAL,32H ;AL=30H

;CF=OF=0,SF=0,ZF=0,PF=1ORAL,71H ;AL=71H

;CF=OF=0,SF=0,ZF=0,PF=1XORAL,0F1H ;AL=80H

;CF=OF=0,SF=1,ZF=0,PF=0NOTAL ;AL=7FH,标志不变例9逻辑运算ANDBL,11110110B

;BL中D0和D3清0,其余位不变ORBL,00001001B

;BL中D0和D3置1,其余位不变XORBL,00001001B

;BL中D0和D3求反,其余位不变

AND指令可用于复位某些位(同0相与),不影响其他位

OR指令可用于置位某些位(同1相或),不影响其他位

XOR指令可用于求反某些位(同1相异或),不影响其他位例10逻辑运算指令的应用将操作数移动一位或多位,分成逻辑移位和算术移位,分别具有左移或右移操作移位指令的第一个操作数是指定的被移位的操作数,可以是寄存器或存储单元;后一个操作数表示移位位数:该操作数为1,表示移动一位该操作数为CL,CL寄存器值表示移位位数(移位位数大于1只能用CL表示)按照移入的位设置进位标志CF,根据移位后的结果影响SF、ZF、PF4.3.3.2移位指令SHLreg/mem,1/CL

;reg/mem左移1或CL位 ;最低位补0,最高位进入CF演示1.逻辑左移指令SHLSHRreg/mem,1/CL

;reg/mem右移1/CL位 ;最高位补0,最低位进入CF演示2.逻辑右移指令SHRSALreg/mem,1/CL

;与SHL是同一条指令演示3.算术左移指令SALSARreg/mem,1/CL

;reg/mem右移1/CL位 ;最高位不变,最低位进入CF演示4.算术右移指令SARMOVDX,6075H

;DX=0110000001110101BSHLDX,1

;DX=1100000011101010B

;CF=0,SF=1、ZF=0、PF=0SARDX,1

;DX=1110000001110101B

;CF=0,SF=1、ZF=0、PF=0SHRDX,1

;DX=0111000000111010B ;CF=1,SF=0、ZF=0、PF=1MOVCL,4

;CL=4,标志不变SARDX,CL

;DX=0000011100000011B

;CF=1,SF=0、ZF=0、PF=1例11数据移位XORAH,AH

;实现AH=0,同时使CF=0SHLAX,1

;AX←2×ALMOVBX,AX

;BX←AX=2×ALSHLAX,1

;AX←4×ALSHLAX,1

;AX←8×ALADDAX,BX

;AX←8×AL+2×AL=10×ALSUBAH,AHANDAH,0

逻辑左移一位相当于无符号数乘以2

逻辑右移一位相当于无符号数除以2例13将AL寄存器中的无符号数乘以10循环移位指令类似移位指令,但要将从一端移出的位返回到另一端形成循环。分为:ROL

reg/mem,1/CL;不带进位循环左移ROR

reg/mem,1/CL;不带进位循环右移RCL

reg/mem,1/CL;带进位循环左移RCRreg/mem,1/CL;带进位循环右移循环移位指令的操作数形式与移位指令相同,按指令功能设置进位标志CF,但不影响SF、ZF、PF、AF标志演示演示演示演示4.3.3.3循环移位指令;将DX.AX中32位数值左移一位SHLAX,1RCLDX,1DXAXCF032位数据移位32位无符号数(DX.AX)右移一位32位无符号数(DX.AX)循环右移一位32位无符号数(DX.AX)左移一位例12把数字ASCII码转换为BCD码

若是奇数个ASCII码,则把地址最低位的一个转换为BCD码(高4位为0),然后把剩下的偶数个数按统一的方法处理(每两个ASCII码转换成一个压缩的BCD码,且地址高的放在

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论