资源描述
第4章算术与逻辑运算指令,4.1不影响C。,(INC与DEC指令),列表6-2-4INC指令格式,(INC),例:将NUMB+1和NUMB相加,结果放到AL中注意:会影响DI寄存器的内容。SUMSPROCNEARMOVDI,OFFESTNUMB;寻址NUMBMOVAL,0;清除ALADDAL,DI;加上NUMBINCDI;寻址NUMB+1ADDAL,DI;加上NUMB+1RETSUMSENDP,DEC-减1,格式:DECDST寄存器/内存操作:(DST)(DST)-1DEC指令清除或设置OF,SF,和ZF标志位,但是不影响CF标志位。,加法和减法,格式:ADD/SUBDST,SCR寄存器寄存器/内存/立即数内存寄存器/立即数不可直接内存到内存操作。操作:(DST)(DST)(SCR),ADD或SUB操作会设置或清除溢出标志、进位标志、标志寄存器的右8位。用二进制数的补码表示一个负的二进制数。,(加法指令跟减法指令),例2:MOVDL,12HADDDL,33H执行,(DL)=sum=45H要改变的标志位:Z=0(结果0)C=0(无进位)A=0(无辅助进位)S=0(结果为正)P=0(校验是奇数)O=0(无溢出),例3:数组相加;累积数组元素3、5、7,结果放在AL中;注意执行过程会影响SI的内容SUMPROCNEARMOVAL,0;清除总和MOVSI,3;指向元素3ADDAL,ARRAYSI;加上元素3ADDAL,ARRAYSI+2;加上元素5ADDAL,ARRAYSI+4;加上元素7RETSUMENDP,ADC带进位的加法,格式:ADCDST,SCR寄存器寄存器/内存/立即数内存寄存器/立即数操作符:(DST)(DST)+(SCR)+CF设置或清除溢出和进位标志,改变标志寄存器的右8位。,(ADC带进位的加法),例:双字加将BX-AX加DX-CX,结果放在BX-AX中SUMPROCNEARADDAX,CXADCBX,DXRETSUMENDP,带借位的减法,格式:SBBDST,SCR寄存器寄存器/内存/立即数内存寄存器/立即数操作:(DST)(DST)-(SCR)-C影响标志位,乘法,MUL处理无符号数据IMUL(整数乘法)处理带符号数据两者都会影响溢出和进位标志。乘积是乘数的双倍长度。乘法操作是字节乘字节,字乘字或双字乘双字。,非立即数数据的乘法,格式:label:MUL/IMUL操作数寄存器/内存,(非立即数数据的乘法),操作:字节乘法:(AX)(AL)(OPR)字乘法:(DX-AX)(AX)(OPR),MUL之前MUL之后,MUL之前MUL之后,字节乘法,字乘法,例:生成(DX)=(BL)(CL)MOVBL,5MOVAL,10MULBLMOVDX,AX;结果放到DX中如果上述是带符号数据的乘法,应当用IMUL来代替MUL。,除法,格式:DIVOPR;不带符号数寄存器/内存IDIVOPR;带符号数寄存器/内存OPR可以是8位、16位的操作数,分别对应字节除法、字除法。,(除法),除法操作:字节除法:(AL)(AX)/(OPR)的商(AH)(AX)/(OPR)的余数字除法:(AX)(DX-AX)/(OPR)的商(DX)(DX-AX)/(OPR)的余数,除前除后,除前除后,(除法),当被除数不是除数双倍长度时,扩展被除数。用0扩展无符号数和正数;用1扩展带符号的负数;扩展指令:CBW;将AL的最高有效位D7扩展至AHCWD;将AX的最高有效位D7扩展至DX,
展开阅读全文