2.3 算术运算类指令 算术指令包括加、减、乘、除指令,它包括对二进制数进行的算术运算的指令,以及对十进制数(用BCD码表示)运算进行调整的指令。执行算术指令都会影响条件标志位,条件标志位包括CF、PF、AF、ZF、SF和OF,它们标志算术运算结果的特征。 ⑴ 加法指令 ⑵ 减法指令 ADD 加法 SUB 减法ADC 带进位加 DEC 减1INC 加1 NEG 求补 CMP 比较 ⑶ 乘法指令 ⑷ 除法指令MUL 无符号数乘法 DIV 无符号数除法IMUL 带符号数乘法 IDIV 带符号数除法 P9 2.3.1 加法指令ADD dst,src 加法指令(addition) 执行操作: (dst) ← (src)+(dst)ADC dst,src 带进位加指令(add with carry) 执行操作: (dst) ← (src)+(dst)+CFINC opr 加1指令(increment) 执行操作: (opr) ← (opr)+1 ADD和ADC指令是双操作数指令,它们的两个操作数不能同时为存储器寻址方式,也就是说,除源操作数为立即数的情况外,源和目的操作数必须有一个是寄存器寻址方式。INC指令是单操作数指令,它可以使用除立即数方式外的任何寻址方式。 ADD和ADC指令影响条件标志位(也称条件码),INC指令影响除CF外的其它条件码。条件码中最主要的是SF、ZF、CF和OF,加法运算对这四个条件码的设置方法如下: SF=1 加法结果最高位为1 SF=0 加法结果最高位为0ZF=1 加法结果为零ZF=0 加法结果不为零CF=1 最高有效位向高位有进位CF=0 最高有效位向高位无进位OF=1 相加两数最高位相同,结果最高位与其相反. [两个同符号数相加(正数+正数,或负 数加负数),结果符号与其相反]OF=0 相加两数最高位不同或相加两数最高位相同结果也相同 [不同符号数相加时,或同符号数相加结果符号与其相同] 计算机在执行运算时,并不区别操作数是带符号数还是无符号数,一律按上述规则设置条件码,因此,程序员要清楚当时处理的是什么类型的数据。例如,当加法运算结果的最高有效位为1时,机器将SF置1。如果参加运算的是两个带符号数,那么和的最高有效位是符号位,SF置1说明结果是一个负数。如果参加运算的是两个无符号数,那么和的最高有效位也是数值位,此时SF置0或置1都失去了表示正负数的意义。 对带符号数和无符号数,它们表示结果溢出的条件标志位也是不同的。上述OF位的设置条件显然只符合带符号数的溢出情况,OF=1表示运算结果是错误的。而无符号数溢出(运算结果超出了有限位的表示范围)时,表现为最高有效位产生进位,因此,CF=1是无符号数溢出的标志。另外,在双字长数运算时,低位字相加设置的CF,说明低位字向高位字有无进位的情况。P46 例 MOV BX,9B8AH ; (BX)=9B8CH ADD BX,6476H ; now (BX)=0000H 9B8A 1001 1011 1000 1010 + 6476 + 0110 0100 0111 0110 ----------- -------------------------- 1← 0000 1← 0000 0000 0000 0000条件码设置: SF=0 最高有效位(D15)为0 ZF=1 结果为0 CF=1 最高有效位向高位有进位 OF=0 不同符号数相加,不产生溢出?debug 执行ADD指令: 2AC0 0010 1010 1100 0000 + E25B + 1110 0010 0101 1011 --------- ------------------------ 1← 0D1B 1← 0000 1101 0001 1011条件码设置: SF=0 最高有效位(D15)为0,无符号位意义 ZF=0 结果不为0 CF=1 最高有
原创力文档

文档评论(0)