80X86学习笔记算术运算指令

一.加减运算指令

1.加法指令ADD

格式:ADD OPRD1, OPRD2

操作:OPRD1<-OPRD1+OPRD2

加法指令影响标志位,OF位更具操作数符号变化情况来设置:若两个操作数符号相同而结果与之相反时溢出,OF=1,否则OF=0。

CF可以用来表示无符号数的溢出,最高位产生进位或借位,产生溢出,CF=1。

2.带进位的加指令ADC

格式:ADC OPRD1, OPRD2

操作:OPRD<-OPRD1+OPRD2+CF

ADD AX, CX

ADD DX, BX

为实现双精度加法,必须使用两条指令完成低位字和高位字加法,在使用高位字相加时,应用ADC把前一条ADD作低位字加法所产生的进位值加入高位字之内,带符号的双精度溢出,应根据ADC的OF位来判断。

3.加1指令INC

格式:INC OPRD

操作:OPRD<-OPRD+1

操作数可以使通用寄存器,存储单元,影响标志位ZF,SF,OF,PF和AF,但不影响CF,该指令主要用于调整地址指针和计数器。

4.减法指令SUB

格式:SUB OPRD1,OPRD2

操作:OPRD1<-OPRD1-OPRD2

减法溢出:若两个数的符号相反, 而结果符号与减数相同则OF=1,结果溢出。

5.带进位减指令SBB

格式:SBB OPRD1, OPRD2

操作:OPRD1<-OPRD1 – OPRD2 – CF

例:

SBB AL, DL

SBB DX, AX

该指令主要用于多字节数相减。

6.减1指令DEC

DEC OPRD

操作:OPRD<-OPRD-1

例:

DEC VARB

操作数可以使通用寄存器,也可是存储单元,在相减时,把操作数作为一个无符号数对待。这条指令执行的结果影响ZF,SF,OF,PF,AF,不影响CF。

该指令主要用于调整地址指针和计数器。

7.取补指令NEG

格式:NEG OPRD

操作:OPRD<- -OPRD

该指令对操作数取补,就是用0减去操作数,再把结果送回操作数。

若在字节操作时对128取补,或在字操作对32768取补,则操作数不变,但OF被置为1,其他均为0.

操作数可以是通用寄存器,也可是存储单元,此指令执行结果影响CF,ZF,SF,OF,AF,PF.

操作数为0时,运算结果使CF=0,其他情况则均为1.

8.比较指令CMP

格式:CMP OPRD1, OPRD2

操作数OPRD1减去OPRD2,运算结果不送到OPRD1,但影响标志CF,ZF,SF,OF,AF,PF。

执行比较指令后,可根据ZF是否置位,判断两者是否相等,若两者是无符号数,则根据CF判断大小;若为有符号数,则根据SF OF判断大小。

二.乘除运算指令

乘除运算指令分为有符号数和无符号数运算指令。

1.乘法指令

一个操作数总是因旱灾寄存器AL或AX中,另一个操作数可以采用立即数方式以外的任一种寻址方式。

(1)无符号乘法MUL

格式:MUL OPRD

两个8位相乘得16位放在AX中,两个16位相乘得32位乘积放到DX,AX,  DX存放高位字。

若乘积结果高半部分(字节相乘时为AX, 字相乘时为DX)不等于0,则标志CF=1,OF=1,否则CF=0, OF=0,所以若CF=1和OF=1表示AH或DX中含有结果的有效数,该指令对其他标志位无定义。

(2)有符号乘法指令IMUL

若乘积结果的高半部分不是低半部分符号扩展,则标志CF=1,OF=1,若CF=1,OF=1表示在AH或DX中含有结果的有效数,该指令对其他标志位无定义。

2.除法指令

除数总是因旱灾寄存器AX(除数是8位)或者DX和AX(除数是16位)中,另一个操作数可以采用除立即数方式外任意一种寻址方式。

(1)无符号数除法指令DIV

除以8位,商放在AL中,余数放在AH中。

除以16位,商放在AX,余数放在DX中。

若除数为0,或者在8位数除时超过8位,或者16位除时超过16位,则认为是除溢出,引起0号中断。

除法指令对标志位影响无定义。

(2)有符号数除法IDIV

当除数位0,或太大(字节除时超过127,字时超过32767),或者商太小(-127,-3267),则引起0号中断。

3.符号扩展指令

由于除法指令隐含使用字被除数或双字被除数,所以当除数位字节,或者除数和被除数为字时,需要在除操作前扩展被除数。

(1)字节转换为字指令CBW

例:

MOV AX, 3487H   ;AH=34H AL=87H

        CBW                  ;AH=0FFH, AL=87H

这条指令不影响各标志位。

(2)字转换为双字指令CWD

例:

MOV AX, 4567H    ;AX=4567H

CWD                   ;AX=4567H, DX=0

原文地址:https://www.cnblogs.com/seebro/p/2408927.html