第二章8086指令系统2全解.ppt

2.3 算术运算类指令   算术指令包括加、减、乘、除指令,它包括对二进制数进行的算术运算的指令,以及对十进制数(用BCD码表示)运算进行调整的指令。执行算术指令都会影响条件标志位,条件标志位包括CF、PF、AF、ZF、SF和OF,它们标志算术运算结果的特征。 ⑴ 加法指令            ⑵ 减法指令 ADD  加法            SUB  减法 ADC  带进位加          DEC  减1 INC  加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)+CF INC opr 加1指令(increment)    执行操作: (opr) ← (opr)+1       ADD和ADC指令是双操作数指令,它们的两个操作数不能同时为存储器寻址方式,也就是说,除源操作数为立即数的情况外,源和目的操作数必须有一个是寄存器寻址方式。INC指令是单操作数指令,它可以使用除立即数方式外的任何寻址方式。    ADD和ADC指令影响条件标志位(也称条件码),INC指令影响除CF外的其它条件码。条件码中最主要的是SF、ZF、CF和OF,加法运算对这四个条件码的设置方法如下:    SF=1 加法结果最高位为1 SF=0 加法结果最高位为0 ZF=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)

1亿VIP精品文档

相关文档