322算术和逻辑指令-精品文档资料系列.ppt

上传人:安*** 文档编号:27073135 上传时间:2022-07-21 格式:PPT 页数:58 大小:995.50KB
返回 下载 相关 举报
322算术和逻辑指令-精品文档资料系列.ppt_第1页
第1页 / 共58页
322算术和逻辑指令-精品文档资料系列.ppt_第2页
第2页 / 共58页
点击查看更多>>
资源描述

《322算术和逻辑指令-精品文档资料系列.ppt》由会员分享,可在线阅读,更多相关《322算术和逻辑指令-精品文档资料系列.ppt(58页珍藏版)》请在taowenge.com淘文阁网|工程机械CAD图纸|机械工程制图|CAD装配图下载|SolidWorks_CaTia_CAD_UG_PROE_设计图分享下载上搜索。

1、3.2.2 算术运算指令l算术运算算术运算l对数据进行加减乘除l基本的数据处理方法l加减运算有“和”或“差”的结果外,还有进借位、溢出等状态标志,也是结果的一部分l注意算术运算类指令注意算术运算类指令对标志的影响对标志的影响数据传送类指令数据传送类指令不影响(不改变)不影响(不改变)状态标志状态标志加法和减法指令加法和减法指令根据结果按定义改变根据结果按定义改变状态标志状态标志1 加法指令加法指令l加法指令加法指令 ADDl带进位加法指令带进位加法指令 ADCl增量指令增量指令 INCl除INC不影响进位标志CF外l其他指令按定义影响全部状态标志位按照运算结果相应设置各个状态标志为0或为1FL

2、AG寄存器标志位功能标志位功能状态标志状态标志控制标志控制标志CF 进位标志进位标志 PF 奇偶标志奇偶标志 AF 辅助进位标志辅助进位标志 ZF 零标志零标志 SF 符号标志符号标志 OF 溢出标志溢出标志 TF 跟踪标志跟踪标志 IF 中断标志中断标志DF 方向标志方向标志 格式:ADD mem/reg,data ADD mem/reg1, reg2/mem 实例: ADD AL,30H ADD DI,200H ADD SI,BX+20H ADD CX,SI(1) ADD(1) ADD:不带进位的加法指令:不带进位的加法指令无无 segseg源和目的操作数不能同时为存储器操作数立即数不能作

3、为目的操作数 例:已知例:已知(BX)=D75FH(BX)=D75FH 指令指令 ADD BX,8046H ADD BX,8046H 执行后,状态标志各是多少?执行后,状态标志各是多少? D75FH = 1110 0111 0101 1111D75FH = 1110 0111 0101 1111 8046H = 1000 0000 0100 0110 8046H = 1000 0000 0100 0110 1 1 11 111 1 11 11 0110 0111 1010 0101 0110 0111 1010 0101结果:结果: (BX)= 67A5H C=1, Z=0, P=1, A=1

4、, O=1, S=0 ADDADD指令对指令对6 6个状态标志均产生影响个状态标志均产生影响(2) (2) ADC:带进位位的加法指令带进位位的加法指令 ADCADC指令在形式上和功能上与指令在形式上和功能上与ADDADD类似,只是相类似,只是相加时还要包括进位标志加时还要包括进位标志CFCF的内容,的内容,例如:例如: ADC AL,68H ;AL(AL)+68H+(CF) ADC AX,CX ;AX(AX)+(CX)+(CF) ADC BX,DI ;BX(BX)+DI+1DI +(CF)例例: :两个无符号数相加:两个无符号数相加:2C56F8AC+309E47BE=2C56F8AC+30

5、9E47BE=? 设被加数、加数分别存放在设被加数、加数分别存放在BUFFER1BUFFER1及及BUFFER2BUFFER2开开始的两个存储区内,结果放回始的两个存储区内,结果放回BUFFER1BUFFER1存储区。存储区。lADC指令用于多字节加法运算中MOV AXMOV AX,BUFFER2BUFFER2 ADD ADD BUFFER1 BUFFER1,AX AX ; ;低字相加低字相加 MOV AXMOV AX,BUFFER2+2BUFFER2+2 ADCADC BUFFER1+2 BUFFER1+2 ,AX AX ; ;高字相加,包括低字的进位高字相加,包括低字的进位多字节加法多字节

6、加法示意图示意图56H2CHBEH47HBUFFER1BUFFER2ACHF8H9EH30H被被加加数数加加数数数数据据段段 .BUFFER1+2BUFFER2+2CLCMOV AX,BUFFER2ADD BUFFER1,AX MOV AX,BUFFER2+2ADC BUFFER1+2 ,AX格式:格式:INC reg/mem功能:类似于功能:类似于C C语言中的语言中的操作:操作:对指定的操作数加对指定的操作数加1 1 例:例: INC AL INC SI INC BYTE PTR BX+4注:本指令不影响注:本指令不影响CFCF标志,标志,影响其他状态位影响其他状态位(3) (3) 加加1

7、 1指令指令INCINC(单操作数指令(单操作数指令)2. 2. 减法指令减法指令l减法指令减法指令 SUBl带借位减法指令带借位减法指令 SBBl减量指令减量指令 DECl求补指令求补指令 NEGl比较指令比较指令 CMPl除DEC不影响CF标志外l其他按定义影响全部状态标志位 格式:格式: SUB dst, src 操作:操作: dst(dst)-(src)指令例子: SUB AL,60H SUB BX+20H,DX SUB AX,CX(1) (1) (不考虑借位的)减法指令(不考虑借位的)减法指令SUBSUB类似ADD指令指令SBB指令主要用于多字节的减法。指令主要用于多字节的减法。格式

8、:格式: SBB dst, src操作:操作: dst(dst)-(src)-(CF)指令例子: SBB AX,CX SBB WORD PTRSI,2080H SBB SI , DX(2) (2) 带借位的减法指令带借位的减法指令SBBSBB类似ADC指令指令 MOV AX, X MOV DX, X+2 ADD AX, Y ADC DX, Y+2 ; x+y ADD AX, 24 ADC DX, 0 ; x+y+24 SUB AX, Z SBB DX, Z+2; x+y+24-z MOV W, AX MOV W+2, DX ; 结果存入结果存入W, W+2单元单元【例】【例】x、y、z均为均为

9、32位数,分别存放在地址为位数,分别存放在地址为X, X+2;Y,Y+2;Z,Z+2的存储单元中,用指令序列实现的存储单元中,用指令序列实现wxy24z,结果放在,结果放在W, W+2单元中。单元中。作用类似于作用类似于C语言中的语言中的”操作符。操作符。格式:格式:DEC opr 操作:操作:opr(opr)-1指令例子: DEC CL DEC BYTE PTR DI+2 DEC SI (3) (3) 减减1 1指令指令DECDEC类似INC指令指令(4)求补指令)求补指令 NEGl对操作数执行求补运算,即用零减去操作数对操作数执行求补运算,即用零减去操作数NEG reg/mem ; opr

10、 0oprl对标志的影响与用零作减法的对标志的影响与用零作减法的SUB指令一样指令一样l可用于求补码或由补码求其绝对值可用于求补码或由补码求其绝对值mov ax,0ff64hneg al; AX=FF9CH, OF=0,SF=1,ZF=0,PF=1,CF=1sub al,9dh;AX=FFFFH, OF=0,SF=1,ZF=0,PF=1,CF=1neg ax;AX=0001H, OF=0,SF=0,ZF=0,PF=0,CF=1dec al;AX=0000H, OF=0,SF=0,ZF=1,PF=1,CF=1neg ax;AX=0000H, OF=0,SF=0,ZF=1,PF=1,CF=0 格式

11、:格式: CMP dst, src ; (dst)(src)CMP也是执行两个操作数相减也是执行两个操作数相减, ,但结果不送但结果不送目标操作数目标操作数, ,其结果只反映在标志位上。其结果只反映在标志位上。指令例子: CMP AL,0AH CMP CX,SI CMP DI,BX+03(5) (5) 比较指令比较指令CMPCMP根据标志状态获知两个操作数的大小关根据标志状态获知两个操作数的大小关系系给条件转移等指令使用其形成的状态标给条件转移等指令使用其形成的状态标志志SUB与与CMP?根据标志位来判断比较的结果根据标志位来判断比较的结果1)1)根据根据ZF判断两个数是否相等。判断两个数是否

12、相等。若若ZF=1,=1,则两数相等。则两数相等。2)2)若两个数不相等若两个数不相等, ,则分两种情况考虑则分两种情况考虑: : 比较的是两个无符号数比较的是两个无符号数 若若CF=0,=0,则则dstdstsrc;src; 若若CF=1,=1,则则dstdstsrcsrc。 比较的是两个有符号数比较的是两个有符号数 若若OF SF=0=0,则,则dstdstsrc; src; 若若OF SF=1=1,则,则dstdstsrcsrc。例:比较有符号数cmp ax, bx;比较;比较ax和和bxjnl next;若;若axbx,转移,转移xchg ax, bx;若;若axbx,交换,交换nex

13、t:.结果:结果:AX保存较大的有符号数保存较大的有符号数CMP A , BlJG 大于大于(AB)时转移时转移lJNL 不小于不小于(A B)时转移时转移3.乘法运算指令乘法运算指令lMUL 无符号乘法指令无符号乘法指令lIMUL 有符号乘法指令有符号乘法指令(1)无符号乘法指令)无符号乘法指令格式:格式: MUL ops ; (AX)(AX)*(ops)(字节相乘)(字节相乘) ;(DX)(AX) (AX)*(ops) (字相乘)字相乘) MUL是将源操作数和累加器中的数都作为无符号是将源操作数和累加器中的数都作为无符号数相乘,乘积存放在数相乘,乘积存放在AXAX或或DX,AXDX,AX中

14、。其结果只影响中。其结果只影响CFCF和和OFOF。指令例子: MUL BL MUL CX(2)有符号乘法指令有符号乘法指令格式:格式: IMUL ops ; (AX)(AX)*(ops)(字节相乘)(字节相乘) ;(;(DX)(AX) (AX)*(ops) (字相乘)字相乘) IMUL是将源操作数和累加器中的数都作为符号数相乘,是将源操作数和累加器中的数都作为符号数相乘,乘积存放在乘积存放在AXAX或或DXDX、AXAX中。其结果只影响中。其结果只影响CFCF和和OFOF。4.除法运算指令除法运算指令lDIV 无符号除法指令无符号除法指令lIDIV 有符号除法指令有符号除法指令lCBW 字节

15、转换成字指令字节转换成字指令lCWD 字转换成双字指令字转换成双字指令(1)无)无 符号数除法指令符号数除法指令格式:格式: DIV ops DIV ops ;功能:字节除法:(功能:字节除法:(ALAL商)(商)(AHAH余数)余数) (AX) / (OPS) (AX) / (OPS)将将AXAX中的中的1616位无符号数除以位无符号数除以OPSOPS,得到的,得到的8 8位商存放在位商存放在ALAL中,中,8 8位余数存放在位余数存放在AHAH中。中。字除法:(字除法:(AXAX商)(商)(DXDX余数)余数) (DX (DX、AX) / (OPS)AX) / (OPS)将将DXDX、AX

16、AX中的中的3232位无符号数除以位无符号数除以OPSOPS,得到的,得到的1616位商存放在位商存放在AXAX中,中,1616位余数存放在位余数存放在DXDX中。中。标志位:不影响任何标志位。标志位:不影响任何标志位。 (2)有符号除法指令)有符号除法指令格式:格式:IDIV OPS指令操作及功能:操作与指令操作及功能:操作与DIV类似。商及余数均为有类似。商及余数均为有符号数,且余数符号总是与被除数符号相同。符号数,且余数符号总是与被除数符号相同。标志位:不影响任何标志位。标志位:不影响任何标志位。注意:注意:8086/8088的除法指令要求被除数的位数为除数的两的除法指令要求被除数的位数

17、为除数的两倍,如果不满足此要求,须对被除数进行扩展,否则会产倍,如果不满足此要求,须对被除数进行扩展,否则会产生错误。对无符号数除法扩展,只需将生错误。对无符号数除法扩展,只需将AH或或DX清零即可;清零即可;有符号数可使用扩展指令有符号数可使用扩展指令CBW和和CWD进行扩展进行扩展(3)字节转换成字指令)字节转换成字指令l格式:格式:CBWCBWl功能:用功能:用ALAL的符号位去填充的符号位去填充AHAH,即:当,即:当ALAL为为正数,则正数,则AH=0AH=0,否则,否则,AH=0FFHAH=0FFH。l标志位:不影响任何标志位。标志位:不影响任何标志位。l在作有符号除法时,有时需要

18、把被除数转换成位数更长的数据在作有符号除法时,有时需要把被除数转换成位数更长的数据类型。类型。(4)字转换成双字指令)字转换成双字指令l格式:格式:CWDCWDl功能:用功能:用AXAX的符号位去填充的符号位去填充DXDX。l标志位:不影响任何标志位标志位:不影响任何标志位 。 小结:小结:算术运算指令l比较指令比较指令 CMPCMPl加加/ /减减1 1指令指令INCINC,DECDECl不带进位的加不带进位的加/ /减法指令减法指令 ADD ADD,SUBSUBl带进位的加带进位的加/ /减法指令减法指令 ADC ADC,SBBSBBl求补指令求补指令 NEGNEGl无符号数乘无符号数乘/

19、 /除法指令除法指令 MUL,DIV MUL,DIVl有符号数乘有符号数乘/ /除法指令除法指令 IMUL,IDIV IMUL,IDIVl字节转换成字字节转换成字/ /双字双字 CBW,CWDCBW,CWD3.2.3 逻辑运算和位移指令1.1.逻辑运算指令逻辑运算指令 运算规则:按位操作,无进运算规则:按位操作,无进/ /借位借位 对标志位的影响对标志位的影响( (除除NOTNOT指令外指令外) ): CF OF SF ZF PF AF 0 0 * * * 无定义无定义 根据运算结果设置根据运算结果设置(1) 逻辑”与” AND格式:格式:AND dst, src ;按位进行;按位进行 “与与

20、”操作操作用途:保留操作数的某几位,其他位清零。用途:保留操作数的某几位,其他位清零。 例1:AND AL, 0FH 已知执行前:已知执行前:(AL)=35H(AL)=35H执行后执行后:(AL)=:(AL)=?AND DX, 0FF00H ;分离;分离DX内容的高内容的高8位位AND AL, 0F0H ;分离;分离AL内容的高内容的高4位位例2:AL中有字符az, 将其转换成大写。AND AL,1101 1111B ;az61H7AH ;AZ41H5AH ; a A20H z Z20H例3:测试AL的bit7,bit5,bit2是否都是1。AND AL, 1010 0100BCMP AL,

21、1010 0100B JZ YES YES: 格式:格式:OR dst, src ;按位进行按位进行”或或”操作操作用途:对操作数的某几位置用途:对操作数的某几位置1; 对两操作数进行组合。对两操作数进行组合。(2) 逻辑“或” OR例1:把AL的第的第5位置为位置为1。OR AL, 00100000B例2:把把ALAL中的非压缩中的非压缩BCDBCD码变成相应十进制数码变成相应十进制数的的ASCIIASCII码。码。(求数字(求数字0 09 9的的ASCIIASCII码)码) OR AL, 30H;09 = 30H39H格式:NOT mem/reg ;按位取反按位取反(3) 逻辑“非”(取反

22、) NOT 按位取反,原来是按位取反,原来是“0”的位变为的位变为“1”;原来是;原来是“1”的位变为的位变为“0”;CX1100 1010B0CAH例:例:已知已知 CX0011 0101B 35HNOT CX格式:格式:XOR dst, src ;按位进行按位进行”异或异或”操作操作用途:对用途:对regreg清零清零( (自身异或自身异或) ) 把把reg/memreg/mem的某几位变反的某几位变反( (与与11异或异或) ) (4) 逻辑”异或” XOR MOV AX,0 XOR AX,AX AND AX,0 SUB AX,AX 例例2 2:把:把DHDH的的bit4,3bit4,3

23、变反。变反。XOR DH,18H例例1 1:把:把AXAX寄存器清零。寄存器清零。ANDAND指令可用于复位某些位(同指令可用于复位某些位(同0 0相与),不影响相与),不影响其他位:将其他位:将BLBL中中D D3 3和和D D0 0位清位清0 0,其他位不变,其他位不变and bl,1111 and bl,1111 0 011110 0B BOROR指令可用于置位某些位(同指令可用于置位某些位(同1 1相或),不影响其相或),不影响其他位:将他位:将BLBL中中D D3 3和和D D0 0位置位置1 1,其他位不变,其他位不变or bl, 0000 or bl, 0000 1 100001

24、 1B BXORXOR指令可用于求反某些位(同指令可用于求反某些位(同1 1相异或),不影相异或),不影响其他位:将响其他位:将BLBL中中D D3 3和和D D0 0位求反,其他不变位求反,其他不变xor bl, 0000 xor bl, 0000 1 100001 1B B总结:总结:例:测试例:测试AL的内容是否为负数。的内容是否为负数。 TEST AL,80H ;检查检查AL中中D7=1? JNZ MINUS ;转转MINUS MINUS:(5) 测试指令TEST类似类似CMP 操作与操作与ANDAND指令类似指令类似, ,但不将但不将”与与”的结果送的结果送回回, ,只影响标志位。只

25、影响标志位。TESTTEST指令常用于位测试指令常用于位测试, ,与条件转移指令一起用。与条件转移指令一起用。2.移位指令(1)(1)非循环移位指令非循环移位指令 算术左移指令算术左移指令 SAL(Shift Arithmetic Left) 算术右移指令算术右移指令 SAR(Shift Arithmetic Right) 逻辑左移指令逻辑左移指令 SHL(Shift Left) 逻辑右移指令逻辑右移指令 SHR(Shift Right)CL ;移位位数大于1时1 ;移位位数等于1时这这4 4条指令的格式相同条指令的格式相同, ,以以SALSAL为例:为例: SAL mem/reg,SAL m

26、em/reg,非循环移位指令功能示意图非循环移位指令功能示意图最低位最低位最高位最高位CF0(a)算术算术/逻辑左移逻辑左移SAL/SHL最低位最低位最高位最高位CF(b)算术右移算术右移SAR最低位最低位最高位最高位CF(c)逻辑右移逻辑右移SHR0算术/逻辑左移 SHL / SAL指令指令算术右移SARSAR指令指令逻辑右移SHRSHR指令指令mov cl, 4mov al, 0F0H ;al= 1111 0000Bshl al,1 ;al=0E0H=1110 0000Bshr al,1 ;al=70H=0111 0000Bsar al,1 ;al=38H=0011 1000Bsar al

27、,cl ;al=03H=0000 0011Bmov cl,4mov al,1111 0000B;al=0F0Hshl al,1;al=0E0H=1110 0000B ;CF=1,SF=1、ZF=0、PF=0,OF=0shr al,1;al=70H=0111 0000B ;CF=0,SF=0、ZF=0、PF=0、OF=1sar al,1;al=38H=0011 1000B ;CF=0,SF=0、ZF=0、PF=0、OF=0sar al,cl;al=03H=0000 0011B ;CF=1,SF=0、ZF=0、PF=1算术移位算术移位把操作数看做把操作数看做有有符号数;符号数; 逻辑移位逻辑移位把

28、操作数看做把操作数看做无无符号数。符号数。移位位数放在移位位数放在CLCL寄存器中,如果只移寄存器中,如果只移1 1位位, ,也也 可以直接写在指令中。例如:可以直接写在指令中。例如: MOV CL,4MOV CL,4 SHR AL,CL SHR AL,CL ;ALAL中的内容右移中的内容右移4 4位位影响影响C,P,S,Z,OC,P,S,Z,O标志。标志。结果未溢出时:结果未溢出时: 左移左移1 1位位操作数操作数2 2 右移右移1 1位位操作数操作数2 2例:把例:把AL中的数中的数x乘乘10因为因为10=8+2=23+21,所以可用移位实现乘,所以可用移位实现乘10操作。操作。程序如下:

29、程序如下:MOV CL,3SAL AL,1 ; 2xMOV AH,AL SAL AL,1 ; 4x SAL AL,1 ; 8x ADD AL,AH ; 8x+2x = 10 x例:前例中计算例:前例中计算x* *1010。(1)(1)采用乘法指令采用乘法指令: : MOV MOVBL,10BL,10 MUL MULBLBL 共需共需70707777个个T T周期。周期。(2)(2)采用移位和加法指令采用移位和加法指令: : SAL SALAL,1 AL,1 ; 2T2T MOV MOVAH,AL AH,AL ; 2T 2T SAL SALAL,1 AL,1 ; 2T2T SAL SALAL,1

30、 AL,1 ; 2T2T ADD ADDAL,AH AL,AH ; 3T3T 只需只需1111个个T T周期周期, ,仅相当于乘法的仅相当于乘法的1/71/7。用移位操作代替乘除法可提高运算速度用移位操作代替乘除法可提高运算速度 不含进位位的循环左移指令不含进位位的循环左移指令 ROLROL 不含进位位的循环右移指令不含进位位的循环右移指令 RORROR 含进位位的循环左移指令含进位位的循环左移指令 RCLRCL 含进位位的循环右移指令含进位位的循环右移指令 RCRRCR格式同非循环移位指令。格式同非循环移位指令。移位位数放在移位位数放在CLCL寄存器中,如果只移寄存器中,如果只移1 1位位,

31、 , 也可以直接写在指令中。也可以直接写在指令中。循环移位指令只影响标志位循环移位指令只影响标志位CFCF和和OFOF。(2)循环移位指令最低位最高位CF(a) ROL最低位最高位CF(c) RCL最低位最高位CF(b) ROR最低位最高位CF(d) RCR循环移位指令功能示意图循环移位指令功能示意图ROL指令指令ROR指令指令RCL指令指令RCR指令指令循环移位举例:循环移位举例:例例1:将:将AL的高的高4位与低位与低4位互换。位互换。 MOV CL,4 ROL AL,CL例例2 2:将:将DX.AXDX.AX中中3232位数值左移一位位数值左移一位shl ax,1shl ax,1rcl dx,1rcl dx,1DXAXCF0ror bl,1ror al,1rcl bl,1rol al,1AL、BLCFBLCFALCFAL之之D0例例3 3:把:把ALAL最低位送最低位送BLBL最低位,保持最低位,保持ALAL不变不变

展开阅读全文
相关资源
相关搜索

当前位置:首页 > 教育专区 > 教案示例

本站为文档C TO C交易模式,本站只提供存储空间、用户上传的文档直接被用户下载,本站只是中间服务平台,本站所有文档下载所得的收益归上传人(含作者)所有。本站仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。若文档所含内容侵犯了您的版权或隐私,请立即通知淘文阁网,我们立即给予删除!客服QQ:136780468 微信:18945177775 电话:18904686070

工信部备案号:黑ICP备15003705号© 2020-2023 www.taowenge.com 淘文阁