算术与逻辑运算指令41算术运算指令.ppt
第4章 算术与逻辑运算指令,4.1&4.2 算术运算指令,本章包括加法,减法,乘法,和二进制数据的除法。,(13.算术运算),加法指令:ADD、ADC、INC.,减法指令:SUB、SBB、DEC、CMP,乘法指令:MUL、IMUL、,除法指令:DIV、IDIV,INC 与 DEC 指令,用INC 与DEC 指令 将寄存器的内容(除了段寄存器)或将内存单元的内容增1或 减1。,(INC 与DEC 指令),格式:标号:INC/DEC DST 寄存器/内存选项:(DST)(DST)1注意:只有一个操作数清除或置位O,S,和 Z 标志;不影响 C。,(INC 与DEC 指令),列表6-2-4 INC指令格式,(INC),例:将NUMB+1和NUMB相加,结果放到AL中注意:会影响DI 寄存器的内容。SUMS PROC NEAR MOV DI,OFFEST NUMB;寻址NUMB MOV AL,0;清除AL ADD AL,DI;加上NUMB INC DI;寻址 NUMB+1 ADD AL,DI;加上NUMB+1 RETSUMS ENDP,DEC-减1,格式:DEC DST 寄存器/内存操作:(DST)(DST)-1DEC 指令清除或设置OF,SF,和 ZF标志位,但是不影响CF标志位。,加法和减法,格式:ADD/SUB DST,SCR 寄存器 寄存器/内存/立即数 内存 寄存器/立即数不可直接内存到内存操作。操作:(DST)(DST)(SCR),ADD或SUB操作会设置或清除溢出标志、进位标志、标志寄存器的右8位。用 二进制数的补码表示 一个负的二进制数。,(加法指令跟减法指令),例 2:MOV DL,12HADD DL,33H执行,(DL)=sum=45H 要改变的标志位:Z=0(结果0)C=0(无进位)A=0(无辅助进位)S=0(结果为正)P=0(校验是奇数)O=0(无溢出),例 3:数组相加;累积数组元素3、5、7,结果放在AL中;注意执行过程会影响SI的内容SUM PROC NEAR MOV AL,0;清除总和 MOV SI,3;指向元素3 ADD AL,ARRAYSI;加上元素3 ADD AL,ARRAYSI+2;加上元素5 ADD AL,ARRAYSI+4;加上元素7 RETSUM ENDP,ADC带进位的加法,格式:ADC DST,SCR 寄存器 寄存器/内存/立即数 内存 寄存器/立即数操作符:(DST)(DST)+(SCR)+CF设置或清除溢出和进位标志,改变标志寄存器的右8位。,(ADC带进位的加法),例:双字加 将BX-AX 加 DX-CX,结果放在BX-AX中SUM PROC NEAR ADD AX,CX ADC BX,DX RETSUM ENDP,带借位的减法,格式:SBB DST,SCR 寄存器 寄存器/内存/立即数 内存 寄存器/立即数操作:(DST)(DST)-(SCR)-C 影响标志位,乘法,MUL 处理无符号数据IMUL(整数乘法)处理带符号数据两者都会影响溢出和进位标志。乘积 是乘数的双倍长度。乘法操作是字节乘字节,字乘字或双字乘双字。,非立即数数据的乘法,格式:label:MUL/IMUL 操作数 寄存器/内存,(非立即数数据的乘法),操作:字节乘法:(AX)(AL)(OPR)字乘法:(DX-AX)(AX)(OPR),MUL之前 MUL之后,MUL之前 MUL之后,字节乘法,字乘法,例:生成(DX)=(BL)(CL)MOV BL,5 MOV AL,10 MUL BL MOV DX,AX;结果放到DX中如果上述是带符号数据的乘法,应当用IMUL 来代替 MUL。,除法,格式:DIV OPR;不带符号数 寄存器/内存 IDIV OPR;带符号数 寄存器/内存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,