目录

1.加法指令ADD/ADC、INC

普通加法指令ADD

带进位加法指令ADC

加1指令INC

2.减法指令SUB/SBB

不考虑借位减法指令SUB

考虑借位的减法指令SBB

减1指令DEC

比较指令CMP

求补指令NEG

3.乘法指令MUL

4.除法指令DIV


1.加法指令ADD/ADC、INC

普通加法指令ADD

指令格式:ADD OPRD1,OPRD2             ;OPRD1←OPRD1+OPRD2

功能:将源操作数和目的操作数相加,结果送到目标操作数

注意:

  1. 这里源操作数和目标操作数都可以是无符号数,也可以是带符号数,但两者类型要相同,长度相同
  2. 源操作数可以是通用寄存器、存储器或立即数,而目的操作数只能是通用寄存器或存储器,不能是立即数,且两者不能同时为存储器操作数。
ADD CL,20H        ;CL←CL+20H
ADD DX,[BX+SI]    ;DX←DX+[BS+SI]

带进位加法指令ADC

指令格式:ADC OPRD1,OPRD2             ;OPRD1←OPRD1+OPRD2+CF

功能:ADC和ADD指令在功能、格式以及对标志位的影响上基本相同,只是在求和运算时加入了CF标志位,结果依然送目标操作数

;当CF=1
MOV AL,7EH
ADC AL,0ABH   ;执行完之后AL=2AH=7eH+0ABH+1且CF=1

加1指令INC

指令格式:INC OPRD               ;OPRD←OPRD+1

功能:INC指令是将指定操作数的内容加1,再送回该操作数。其操作类似c语言中的"++"运算符。

注意:

  1. 目的操作数可以是任意一个8位或16位通用寄存器或存储单元,但不能是立即数,且把操作数看作是无符号二进制数。
  2. 指令执行影响PF、AF、ZF、SF、OF,但不影响CF
INC SI                ;修改地址指针
INC BYTE PYR [BX]     ;修改地址指针

2.减法指令SUB/SBB

不考虑借位减法指令SUB

指令格式:SUB OPRD1,OOPRD2    ;OPRD1←OPRD1-OPRD2

功能:SUB是一条双操作数指令,其功能是用目标操作数减去源操作数,并将结果送至目标操作数。

注意:该指令对标志位的影响和ADD完全相同。

SUB BL,30H        ;BL←BL-30H
SUB AL,[BP+SI]    ;AL←AL-[BP+SI]

考虑借位的减法指令SBB

指令格式:SBB OPRD1,OPRD2          ;OPRD←OPRD1-OPRD2-CF

功能:目标操作数减去源操作数以及标志位CF的值,并将结果送至目标操作数所在地址。

注意:该指令对于标志位的影响和SUB相同,主要用于多字节减法运算

SBB BL,30H    ;BL←BL-30H-CF

减1指令DEC

指令格式:DEC OPRD        ;OPRD←OPRD-1

功能:DEC和INC功能一样,是一条单字节指令,其功能是将操作数的值减1,结果送回操作数的地址。

注意:该指令对于标志位的影响和INC相同

DEC AX             ;AX←AX-1
DEC BYTE PTR[DI]   ;将数据段中DI所指单元的内容减1,结果送回该单元

比较指令CMP

指令格式:CMP OPRD1,OPRD2     ;OPRD1-OPRD2,结果不送回

功能:CMP指令是用目标操作数减源操作数,但相减的结果不送回目标操作数,即指令执行后的两操作数内容不变,对6个状态标志位的影响和SUB相同。常在其后跟一个条件转移指令,用于程序跳转。

求补指令NEG

指令格式:NEG OPRD         ;OPRD ←0-OPRD

功能:对操作数求补,该指令执行效果是改变操作数的符号---将正数变为负数或将负数变为正数,大小不变。因此该指令也叫取负指令

MOV AL,FFH
NEG AL        ;AL=0-FFH=01H

3.乘法指令MUL

指令格式:MUL OPRD               ;AX←OPRD*AL          (字节乘法)

;DS:AX←OPRD*AX     (字乘法)

IMUL OPRD              ;和MUL相同

功能:MUL和IMUL用于无符号数和有符号数的乘法运算,他们都是有一个源操作数,而目标操作数都是隐含规定的:8位乘法时隐含操作数为AL, 16位乘法时隐含的操作数为AX。

注意:

  1. 指令MUL对标志位CF、OF有影响,而对SF、ZF、AF、PF不确定,如果运算结果的高半部分(在AH或DX中)为零,则CF=OF=0,表示AH或DX中所存的结果为有效数字;否则CF=OF=1,表示AH或DX中结果为无效数字。
  2. 指令IMUL对标志位的影响与MUL类似,由于指令IMUL将两个操作数按带符号数进行处理,如果乘积的高半部分仅是低半部分符号位的扩展,则CF=OF=0,f否则,AH或DX的内容为乘积的有效数字。
MOV AX,04E8H        ;(AX)=04E8H
MOV BX,4E20H        ;(BX)=4E20H
IMUL BX             ;(DX:AX)=(AX)*(BX)

4.除法指令DIV

指令格式:DIV OPRD          ; AL←(AX)/(OPRD)的商   -----  (字节除法)

;AH←(AX)/(OPRD)的余数

;AX←(DX:AX)/(OPRD)的商 ---- (字除法)

;DX←(DX:AX)/(OPRD)的余数

IDIV  OPRD         ;与DIV格式相同

功能:DIV和IDIV指令用于无符号数和有符号数的除法运算,只有一个源操作数,而目标操作数时隐含规定的:若被除数为16位,则隐含操作数为AX,其中,8位商放在AL中,8位余数放在AH中;若被除数为32位,则隐含的操作数为DX:AX,其中,16位商在AX中,16位余数在DX中。

注意:

  1. 指令DIV/IDIV使状态标志位的值不确定
  2. 除法指令中被除数的长度应为除数长度的两倍。如果被除数长度和除数长度相等,则应在使除法指令之前,将被除数的高位进行扩展,确保在使用DIV指令时,高位扩展为8个零或者16个零。
DIV BL                ;AX除以BL,商放AL,余数放AH
DIV WORD PTR[SI]      ;DX:AX除以SI和SI+1所指向单元的内容,商放AX,余数放DX

8086CPU指令系统--汇编语言算术运算指令(ADD/ADC、SUB/SBB、INC/DEC、CMP、MUL、DIV)相关推荐

  1. 汇编语言--算术运算指令

    算术运算指令 add.sub.adc.sbb.inc.dec.cmp.imul.idiv.aaa等都是算术运算指令,这些指令实现存器和内存中的数据的算数运算. 它们的执行结果影响标志寄存器的sf.zf ...

  2. 汇编语言---算术运算指令

    指令包括:add,adc,inc,sub,sbb,dec,cmp,neg,mul,imul,div,idiv,daa,das,aaa,aas,aam,aad,cbw,cwd 重点掌握:add,adc, ...

  3. 8086CPU指令系统--汇编语言逻辑运算和移位操作指令

    文章目录 一.逻辑运算指令 1.逻辑'与'指令 AND 2.逻辑'或'指令 OR 3.逻辑"非"指令 NOT 4.逻辑"异或" XOR 5.测试指令TEST 二 ...

  4. 【单片机仿真】(九)指令系统 — 算术运算指令 之 ADD、ADDC、SUBB、INC、DEC、DA

    目录 1.算术运算指令 2.不带进位加法指令ADD 3.带进位加法指令ADDC和减法指令SUBB

  5. 微机原理——指令系统——算数运算指令(ADD、ADC、SUB、SBB、INC、DEC、NEG、CMP、MUL、IMUL、DIV、IDIV、CBW、CWD、BCD调整)

    博主联系方式: QQ:1540984562 QQ交流群:892023501 群里会有往届的smarters和电赛选手,群里也会不时分享一些有用的资料,有问题可以在群里多问问. 算数运算指令 1.加减法 ...

  6. Pentium的指令系统(3)——算术运算指令

    对有符号和无符号数的分析 1.对加法或减法来说,无符号数和有符号数可采用同一套指令,乘法和除法不行: 无符号数和有符号数采用同一套加法指令及减法指令有两个条件: 1.要求参与运算的两个数同为无符号数或 ...

  7. 汇编语言随笔(4)-数据段和栈段与mov,add,sub,div,mul、adc、sbb指令

    再次声明,默认采用小端法在内存中存储数据. 在8086PC中,定位一个内存地址需要由段地址和偏移地址一起来完成.注意:当编写指令想要读取某个内存单元中的数据时,需要对偏移地址加上中括号'[ ]'.表示 ...

  8. 算术运算导致溢出。_【S7200指令教程】数据运算指令ADD SUB MUL DIV

    ↖戳上方蓝字 "PLC课程" 关注我们哦! S7-200的数学运算指令有整数.双整数.实数数学运算指令.梯形图加/减运算指令采用指令盒格式,指令盒由指令类型,使能端 EN,操作数( ...

  9. 8086CPU相关汇编语言的简单概述

    8086CPU相关汇编语言的简单概述 1.寄存器 通用寄存器 8806CPU给出物理地址的方法 段寄存器 修改CS,IP的指令 2.寄存器(内存访问) 栈机制 3.[BX]和loop指令 [BX] l ...

  10. 【Android 逆向】x86 汇编 ( add / sub / mul / div 数值运算指令 | xor / not / sal / sar / shl / shr 位运算指令 )

    文章目录 一.add / sub / mul / div 数值运算指令 二.xor / not / sal / sar / shl / shr 位运算指令 总结 一.add / sub / mul / ...

最新文章

  1. toad dba suite for oracle 12.1,Toad for Oracle 12.1下载地址
  2. 异常“只能在执行Render()的过程中调用RegisterForEventValidation”的解决办法(转)...
  3. JavaScript 身份证号有效验证详解及实例代码
  4. POJ 2184 Cow Exhibition
  5. java第一句_Java如何开始第一个项目?
  6. Linux基础之while语句
  7. eclipse 3.x中热部署WEB程序TOMCAT配置
  8. 4412开发板团购活动
  9. 钟控RS,D,JK,T触发器
  10. SPSS中的比较均值—均值分析过程
  11. 【EfficientNet】EfficientNet网络结构及代码详解
  12. html加载图片路径问题
  13. Visual Paradigm 如何绘制平面图?
  14. 基于归一化互相关函数的语音基音周期检测
  15. Matlab含新能源(风电光伏)和多类型电动汽车配电网风险评估 由于电动汽车负荷与风电光伏出力的不确定性,造成配电网运行风险,运用蒙特卡洛概率潮流计算分析电压和线路支路越限
  16. Element级联菜单省市json数据
  17. 深度学习数学基础之线性代数
  18. 憨猫的EventLoop事件循环小解
  19. Microsoft Azure 容器技术助力游戏出海
  20. Shell 脚本中 set -ex 命令的作用

热门文章

  1. 哪种存储器是非易失的_ROM是易失性存储器还是非易事性存储器?
  2. xiao zhang   jia you
  3. 服务器定时关机 修改时间,服务器调定时关机
  4. 用计算机弹出记事本,为何电脑开机会弹出desktop的记事本出来的
  5. PAT L1-019. 谁先倒
  6. 老码农的2019这一年——
  7. Clickhouse 数据库连接工具——DBeaver
  8. python少儿编程面试题-《与孩子一起学编程》python自测题
  9. eclipse安装SVN插件(2020最新,亲测可用)
  10. 【思路】2021年第十四届“认证杯“数学中国数学建模国际赛(小美赛)思路