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

原创 2012年03月23日 15:55:17

一.加减运算指令

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

x86运算指令

x86指令详解运算指令乘法指令 有符号乘指令单操作数的有符号乘指令 格式: imul ops 功能:字节乘法 (al) * ops --> ax 字乘法 (ax) * (ops) -->...
  • dfq12345
  • dfq12345
  • 2017年04月17日 00:03
  • 407

算术与逻辑运算指令详解

算术与逻辑运算指令详解 前言 上一次讲解了数据传送指令,香型大家肯定对此有了一定的认识了.这些简单的汇编指令,却可以将复杂的程序井然有序的执行完毕,实在是让人惊叹. ...
  • shanyongxu
  • shanyongxu
  • 2015年08月18日 14:23
  • 2739

单片机课件 数据传送指令 算术运算指令

  • 2009年04月21日 01:07
  • 1.37MB
  • 下载

51汇编之算术运算类指令

  • 2015年11月25日 21:15
  • 36.1MB
  • 下载

80x86汇编指令详解

80x86指令系统,指令按功能可分为以下七个部分。  (1) 数据传送指令。  (2) 算术运算指令。  (3) 逻辑运算指令。  (4) 串操作指令。  (5) 控制转移指令。  (6) 处理器控制...
  • zhaofuguang
  • zhaofuguang
  • 2013年10月18日 14:55
  • 1441

80x86系统寄存器以及系统指令(个人理解)

80x86 系统寄存器喝系统指令 为了协助处理器执行初始化和控制系统操作,80x86 提供了一个标志寄存器EFLAGS和几个系统寄存器,除了一些通用状态标志外,EFLAGS 中还包含几个系统标志。 ...
  • liutianshx2012
  • liutianshx2012
  • 2016年08月28日 20:28
  • 1044

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

一.加减运算指令 1.加法指令ADD 格式:ADD OPRD1, OPRD2 操作:OPRD1 加法指令影响标志位,OF位更具操作数符号变化情况来设置:若两个操作数符号相同而结...
  • x954818696
  • x954818696
  • 2012年03月23日 15:55
  • 830

4. 算术运算指令,ADD/ADC,SUB/SBC ,MUL

4.         算术运算指令,ADD/ADC,SUB/SBC ,MUL n         ADD加法指令 ADD R0,R1,R2; R0=R1+R2 ADD R0,R1,#3 ;R0=...
  • zhaolushandong
  • zhaolushandong
  • 2015年11月11日 14:25
  • 426

80x86指令系统(一)

一、Intel 8086/8088的指令格式      Intel 8086/8088指令长度是可变的,指令机器码的长度为1~6个字节。双操作数指令的通用格式如图一:其中第1字节和第2字节为基本字节,...
  • scucj
  • scucj
  • 2009年06月18日 23:03
  • 5185

80x86指令系统和寻址方式

一、数据类型       计算机执行指令过程中需要处理各种类型的机器数,可处理的数据类型有七种:    1)无符号二进制数    2)带符号二进制数    3)BCD码    4)数的定点和浮点表示法...
  • u012620515
  • u012620515
  • 2015年10月16日 20:43
  • 687
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:80X86学习笔记--算术运算指令
举报原因:
原因补充:

(最多只允许输入30个字)