《322算术和逻辑指令(1)-精品文档资料系列.ppt》由会员分享,可在线阅读,更多相关《322算术和逻辑指令(1)-精品文档资料系列.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或为1FLAG寄存
2、器标标志志位位功功能能状态标志状态标志控制标志控制标志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,O=1,S=0 ADDADD指令对指令对6
4、 6个状态标志均产生影响个状态标志均产生影响(2)(2)ADC:带进位位的加法指令带进位位的加法指令 ADCADC指令在形式上和功能上与指令在形式上和功能上与ADDADD类似,只是相类似,只是相加时还要包括进位标志加时还要包括进位标志CFCF的内容,的内容,例如:例如:ADCAL,68H;AL(AL)+68H+(CF)ADCAX,CX;AX(AX)+(CX)+(CF)ADCBX,DI;BX(BX)+DI+1DI+(CF)例例:两个无符号数相加:两个无符号数相加:2C56F8AC+309E47BE=2C56F8AC+309E47BE=?设被加数、加数分别存放在设被加数、加数分别存放在BUFFER
5、1BUFFER1及及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;高字相加,包括低字的进位高字相加,包括低字的进位多字节加法多字节加法示意图示意图56H2CHBEH47HBUFFER1BUFFER2ACHF8H9EH30
6、H被被加加数数加加数数数数据据段段.BUFFER1+2BUFFER2+2CLCMOVAX,BUFFER2ADDBUFFER1,AXMOVAX,BUFFER2+2ADCBUFFER1+2,AX格式:格式:INCreg/mem功能:类似于功能:类似于C C语言中的语言中的操作:操作:对指定的操作数加对指定的操作数加1 1 例:例:INCALINCSIINCBYTEPTRBX+4注:本指令不影响注:本指令不影响CFCF标志,标志,影响其他状态位影响其他状态位(3)(3)加加1 1指令指令INCINC(单操作数指令(单操作数指令)2.2.减法指令减法指令l减法指令减法指令SUBl带借位减法指令带借位减
7、法指令SBBl减量指令减量指令DECl求补指令求补指令NEGl比较指令比较指令CMPl除DEC不影响CF标志外l其他按定义影响全部状态标志位 格式:格式:SUBdst,src操作:操作:dst(dst)-(src)指令例子:SUB AL,60HSUBBX+20H,DXSUBAX,CX(1)(1)(不考虑借位的)减法指令(不考虑借位的)减法指令SUBSUB类似ADD指令指令SBB指令主要用于多字节的减法。指令主要用于多字节的减法。格式:格式:SBBdst,src操作:操作:dst(dst)-(src)-(CF)指令例子:SBBAX,CXSBBWORDPTRSI,2080HSBBSI,DX(2)(
8、2)带借位的减法指令带借位的减法指令SBBSBB类似ADC指令指令 MOVAX,XMOVDX,X+2ADDAX,YADCDX,Y+2;x+yADDAX,24ADCDX,0;x+y+24SUBAX,ZSBBDX,Z+2;x+y+24-zMOVW,AXMOVW+2,DX;结果存入结果存入W,W+2单元单元【例】【例】x、y、z均为均为32位数,分别存放在地址为位数,分别存放在地址为X,X+2;Y,Y+2;Z,Z+2的存储单元中,用指令序列实现的存储单元中,用指令序列实现wxy24z,结果放在,结果放在W,W+2单元中。单元中。作用类似于作用类似于C语言中的语言中的”操作符。操作符。格式:格式:DE
9、Copr操作:操作:opr(opr)-1指令例子:DECCLDECBYTEPTRDI+2DECSI(3)(3)减减1 1指令指令DECDEC类似INC指令指令(4)求补指令)求补指令NEGl对操作数执行求补运算,即用零减去操作数对操作数执行求补运算,即用零减去操作数NEGreg/mem;opr0oprl对标志的影响与用零作减法的对标志的影响与用零作减法的SUB指令一样指令一样l可用于求补码或由补码求其绝对值可用于求补码或由补码求其绝对值movax,0ff64hnegal;AX=FF9CH,OF=0,SF=1,ZF=0,PF=1,CF=1subal,9dh;AX=FFFFH,OF=0,SF=1,
10、ZF=0,PF=1,CF=1negax;AX=0001H,OF=0,SF=0,ZF=0,PF=0,CF=1decal;AX=0000H,OF=0,SF=0,ZF=1,PF=1,CF=1negax;AX=0000H,OF=0,SF=0,ZF=1,PF=1,CF=0格式:格式:CMPdst,src;(dst)(src)CMP也是执行两个操作数相减也是执行两个操作数相减,但结果不送但结果不送目标操作数目标操作数,其结果只反映在标志位上。其结果只反映在标志位上。指令例子:CMPAL,0AHCMPCX,SICMPDI,BX+03(5)(5)比较指令比较指令CMPCMP根据标志状态获知两个操作数的大小关根
11、据标志状态获知两个操作数的大小关系系给条件转移等指令使用其形成的状态标给条件转移等指令使用其形成的状态标志志SUB与与CMP?例:比较有符号数cmpax,bx;比较;比较ax和和bxjnlnext;若;若axbx,转移,转移xchgax,bx;若;若axbx,交换,交换next:.结果:结果:AX保存较大的有符号数保存较大的有符号数CMPA,BlJG大于大于(AB)时转移时转移lJNL不小于不小于(AB)时转移时转移3.乘法运算指令乘法运算指令lMUL无符号乘法指令无符号乘法指令lIMUL有符号乘法指令有符号乘法指令(1)无符号乘法指令)无符号乘法指令格式:格式:MULops;(AX)(AX)
12、*(ops)(字节相乘)(字节相乘);(DX)(AX)(AX)*(ops)(字相乘)字相乘)MUL是将源操作数和累加器中的数都作为无符号是将源操作数和累加器中的数都作为无符号数相乘,乘积存放在数相乘,乘积存放在AXAX或或DX,AXDX,AX中。其结果只影响中。其结果只影响CFCF和和OFOF。指令例子:MULBLMULCX(2)有符号乘法指令有符号乘法指令格式:格式:IMULops;(AX)(AX)*(ops)(字节相乘)(字节相乘);(;(DX)(AX)(AX)*(ops)(字相乘)字相乘)IMUL是将源操作数和累加器中的数都作为符号数相乘,是将源操作数和累加器中的数都作为符号数相乘,乘积
13、存放在乘积存放在AXAX或或DXDX、AXAX中。其结果只影响中。其结果只影响CFCF和和OFOF。4.除法运算指令除法运算指令lDIV无符号除法指令无符号除法指令lIDIV有符号除法指令有符号除法指令lCBW字节转换成字指令字节转换成字指令lCWD字转换成双字指令字转换成双字指令(1)无)无符号数除法指令符号数除法指令格式:格式:DIV ops DIV ops ;功能:功能:字节除法:(字节除法:(ALAL商)(商)(AHAH余数)余数)(AX)/(OPS)(AX)/(OPS)将将AXAX中的中的1616位无符号数除以位无符号数除以OPSOPS,得到的,得到的8 8位商存放在位商存放在ALA
14、L中,中,8 8位余数存放在位余数存放在AHAH中。中。字除法:(字除法:(AXAX商)(商)(DXDX余数)余数)(DX(DX、AX)/(OPS)AX)/(OPS)将将DXDX、AXAX中的中的3232位无符号数除以位无符号数除以OPSOPS,得到的,得到的1616位商存放在位商存放在AXAX中,中,1616位余数存放在位余数存放在DXDX中。中。标志位:不影响任何标志位。标志位:不影响任何标志位。(2)有符号除法指令)有符号除法指令格式:格式:IDIVOPS指令操作及功能:操作与指令操作及功能:操作与DIV类似。商及余数均为有类似。商及余数均为有符号数,且余数符号总是与被除数符号相同。符号
15、数,且余数符号总是与被除数符号相同。标志位:不影响任何标志位。标志位:不影响任何标志位。注意:注意:8086/8088的除法指令要求被除数的位数为除数的两倍,的除法指令要求被除数的位数为除数的两倍,如果不满足此要求,须对被除数进行扩展,否则会产生错如果不满足此要求,须对被除数进行扩展,否则会产生错误。对无符号数除法扩展,只需将误。对无符号数除法扩展,只需将AH或或DX清零即可;有清零即可;有符号数可使用扩展指令符号数可使用扩展指令CBW和和CWD进行扩展进行扩展(3)字节转换成字指令)字节转换成字指令l格式:格式:CBWCBWl功能:用功能:用ALAL的符号位去填充的符号位去填充AHAH,即:
16、当,即:当ALAL为为正数,则正数,则AH=0AH=0,否则,否则,AH=0FFHAH=0FFH。l标志位:不影响任何标志位。标志位:不影响任何标志位。l在作有符号除法时,有时需要把被除数转换成位数更长的数据在作有符号除法时,有时需要把被除数转换成位数更长的数据类型。类型。(4)字转换成双字指令)字转换成双字指令l格式:格式:CWDCWDl功能:用功能:用AXAX的符号位去填充的符号位去填充DXDX。l标志位:不影响任何标志位标志位:不影响任何标志位。小结:小结:算术运算指令l比较指令比较指令 CMPCMPl加加/减减1 1指令指令INCINC,DECDECl不带进位的加不带进位的加/减法指令
17、减法指令 ADD ADD,SUBSUBl带进位的加带进位的加/减法指令减法指令 ADC ADC,SBBSBBl求补指令求补指令 NEGNEGl无符号数乘无符号数乘/除法指令除法指令 MUL,DIV MUL,DIVl有符号数乘有符号数乘/除法指令除法指令 IMUL,IDIV IMUL,IDIVl字节转换成字字节转换成字/双字双字 CBW,CWDCBW,CWD3.2.3 逻辑运算和位移指令1.1.逻辑运算指令逻辑运算指令 运算规则:按位操作,无进运算规则:按位操作,无进/借位借位 对标志位的影响对标志位的影响(除除NOTNOT指令外指令外):CF OF SF ZF PF AF 0 0 *无定义无定
18、义 根据运算结果设置根据运算结果设置(1)逻辑”与”AND格式:格式:ANDdst,src;按位进行;按位进行“与与”操作操作用途:保留操作数的某几位,其他位清零。用途:保留操作数的某几位,其他位清零。例1:ANDAL,0FH 已知执行前:已知执行前:(AL)=35H(AL)=35H执行后执行后:(AL)=:(AL)=?ANDDX,0FF00H;分离;分离DX内容的高内容的高8位位ANDAL,0F0H;分离;分离AL内容的高内容的高4位位格式:格式:ORdst,src;按位进行按位进行”或或”操作操作用途:对操作数的某几位置用途:对操作数的某几位置1;对两操作数进行组合。对两操作数进行组合。(
19、2)逻辑“或”OR例1:把AL的第的第5位置为位置为1。OR AL,00100000B格式:NOT mem/reg ;按位取反按位取反(3)逻辑“非”(取反)NOT按按位位取取反反,原原来来是是“0”的的位位变变为为“1”;原来是;原来是“1”的位变为的位变为“0”;CX11001010B0CAH例:例:已知已知CX00110101B35HNOTCX格式:格式:XOR dst,src ;按位进行按位进行”异或异或”操作操作用途:对用途:对regreg清零清零(自身异或自身异或)把把reg/memreg/mem的某几位变反的某几位变反(与与1 1异或异或)(4)逻辑”异或”XORMOVAX,0X
20、ORAX,AXANDAX,0SUBAX,AX 例例2 2:把:把DHDH的的bit4,3bit4,3变反。变反。XORDH,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位置
21、位置1 1,其他位不变,其他位不变or bl,0000 or bl,0000 1 100001 1B BXORXOR指令可用于求反某些位(同指令可用于求反某些位(同1 1相异或),不影响相异或),不影响其他位:将其他位:将BLBL中中D D3 3和和D D0 0位求反,其他不变位求反,其他不变xor bl,0000 xor bl,0000 1 100001 1B B总结:总结:例:测试例:测试AL的内容是否为负数。的内容是否为负数。TESTAL,80H;检查检查AL中中D7=1?JNZMINUS;转转MINUSMINUS:(5)测试指令TEST类似类似CMP 操作与操作与ANDAND指令类似指
22、令类似,但不将但不将”与与”的结果送的结果送回回,只影响标志位。只影响标志位。TESTTEST指令常用于位测试指令常用于位测试,与条件转移指令一起用。与条件转移指令一起用。2.移位指令(1)(1)非循环移位指令非循环移位指令 算术左移指令算术左移指令 SAL(Shift Arithmetic Left)算术右移指令算术右移指令 SAR(Shift Arithmetic Right)逻辑左移指令逻辑左移指令 SHL(Shift Left)逻辑右移指令逻辑右移指令 SHR(Shift Right)CL ;移位位数大于1时1 ;移位位数等于1时这这4 4条指令的格式相同条指令的格式相同,以以SALS
23、AL为例:为例:SAL mem/reg,SAL mem/reg,非循环移位指令功能示意图非循环移位指令功能示意图最低位最低位最高位最高位CF0(a)算术算术/逻辑左移逻辑左移SAL/SHL最低位最低位最高位最高位CF(b)算术右移算术右移SAR最低位最低位最高位最高位CF(c)逻辑右移逻辑右移SHR0算术/逻辑左移 SHL/SAL指令指令算术右移SARSAR指令指令逻辑右移SHRSHR指令指令movcl,4moval,0F0H;al=11110000Bshlal,1;al=0E0H=11100000Bshral,1;al=70H=01110000Bsaral,1;al=38H=00111000
24、Bsaral,cl;al=03H=00000011B算术移位算术移位把操作数看做把操作数看做有有符号数;符号数;逻辑移位逻辑移位把操作数看做把操作数看做无无符号数。符号数。移位位数放在移位位数放在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例:把例:把A
25、L中的数中的数x乘乘10因为因为10=8+2=23+21,所以可用移位实现乘,所以可用移位实现乘10操作。操作。程序如下:程序如下:MOVCL,3SALAL,1;2xMOVAH,ALSALAL,1;4xSALAL,1;8xADDAL,AH;8x+2x=10 x 不含进位位的循环左移指令不含进位位的循环左移指令 ROLROL 不含进位位的循环右移指令不含进位位的循环右移指令 RORROR 含进位位的循环左移指令含进位位的循环左移指令 RCLRCL 含进位位的循环右移指令含进位位的循环右移指令 RCRRCR格式同非循环移位指令。格式同非循环移位指令。移位位数放在移位位数放在CLCL寄存器中,如果只
26、移寄存器中,如果只移1 1位位,也可以直接写在指令中。也可以直接写在指令中。循环移位指令只影响标志位循环移位指令只影响标志位CFCF和和OFOF。(2)循环移位指令最低位最高位CF(a)ROL最低位最高位CF(c)RCL最低位最高位CF(b)ROR最低位最高位CF(d)RCR循环移位指令功能示意图循环移位指令功能示意图ROL指令指令ROR指令指令RCL指令指令RCR指令指令循环移位举例:循环移位举例:例例1:将:将AL的高的高4位与低位与低4位互换。位互换。MOVCL,4ROLAL,CL例例2 2:将:将DX.AXDX.AX中中3232位数值左移一位位数值左移一位shl ax,1shl ax,1rcl dx,1rcl dx,1DXAXCF0rorbl,1roral,1rclbl,1rolal,1AL、BLCFBLCFALCFAL之之D0例例3 3:把:把ALAL最低位送最低位送BLBL最低位,保持最低位,保持ALAL不变不变