8086CPU指令系统--汇编语言算术运算指令(ADD/ADC、SUB/SBB、INC/DEC、CMP、MUL、DIV)
目录
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
功能:将源操作数和目的操作数相加,结果送到目标操作数
注意:
- 这里源操作数和目标操作数都可以是无符号数,也可以是带符号数,但两者类型要相同,长度相同
- 源操作数可以是通用寄存器、存储器或立即数,而目的操作数只能是通用寄存器或存储器,不能是立即数,且两者不能同时为存储器操作数。
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语言中的"++"运算符。
注意:
- 目的操作数可以是任意一个8位或16位通用寄存器或存储单元,但不能是立即数,且把操作数看作是无符号二进制数。
- 指令执行影响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。
注意:
- 指令MUL对标志位CF、OF有影响,而对SF、ZF、AF、PF不确定,如果运算结果的高半部分(在AH或DX中)为零,则CF=OF=0,表示AH或DX中所存的结果为有效数字;否则CF=OF=1,表示AH或DX中结果为无效数字。
- 指令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中。
注意:
- 指令DIV/IDIV使状态标志位的值不确定
- 除法指令中被除数的长度应为除数长度的两倍。如果被除数长度和除数长度相等,则应在使除法指令之前,将被除数的高位进行扩展,确保在使用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)相关推荐
- 汇编语言--算术运算指令
算术运算指令 add.sub.adc.sbb.inc.dec.cmp.imul.idiv.aaa等都是算术运算指令,这些指令实现存器和内存中的数据的算数运算. 它们的执行结果影响标志寄存器的sf.zf ...
- 汇编语言---算术运算指令
指令包括:add,adc,inc,sub,sbb,dec,cmp,neg,mul,imul,div,idiv,daa,das,aaa,aas,aam,aad,cbw,cwd 重点掌握:add,adc, ...
- 8086CPU指令系统--汇编语言逻辑运算和移位操作指令
文章目录 一.逻辑运算指令 1.逻辑'与'指令 AND 2.逻辑'或'指令 OR 3.逻辑"非"指令 NOT 4.逻辑"异或" XOR 5.测试指令TEST 二 ...
- 【单片机仿真】(九)指令系统 — 算术运算指令 之 ADD、ADDC、SUBB、INC、DEC、DA
目录 1.算术运算指令 2.不带进位加法指令ADD 3.带进位加法指令ADDC和减法指令SUBB
- 微机原理——指令系统——算数运算指令(ADD、ADC、SUB、SBB、INC、DEC、NEG、CMP、MUL、IMUL、DIV、IDIV、CBW、CWD、BCD调整)
博主联系方式: QQ:1540984562 QQ交流群:892023501 群里会有往届的smarters和电赛选手,群里也会不时分享一些有用的资料,有问题可以在群里多问问. 算数运算指令 1.加减法 ...
- Pentium的指令系统(3)——算术运算指令
对有符号和无符号数的分析 1.对加法或减法来说,无符号数和有符号数可采用同一套指令,乘法和除法不行: 无符号数和有符号数采用同一套加法指令及减法指令有两个条件: 1.要求参与运算的两个数同为无符号数或 ...
- 汇编语言随笔(4)-数据段和栈段与mov,add,sub,div,mul、adc、sbb指令
再次声明,默认采用小端法在内存中存储数据. 在8086PC中,定位一个内存地址需要由段地址和偏移地址一起来完成.注意:当编写指令想要读取某个内存单元中的数据时,需要对偏移地址加上中括号'[ ]'.表示 ...
- 算术运算导致溢出。_【S7200指令教程】数据运算指令ADD SUB MUL DIV
↖戳上方蓝字 "PLC课程" 关注我们哦! S7-200的数学运算指令有整数.双整数.实数数学运算指令.梯形图加/减运算指令采用指令盒格式,指令盒由指令类型,使能端 EN,操作数( ...
- 8086CPU相关汇编语言的简单概述
8086CPU相关汇编语言的简单概述 1.寄存器 通用寄存器 8806CPU给出物理地址的方法 段寄存器 修改CS,IP的指令 2.寄存器(内存访问) 栈机制 3.[BX]和loop指令 [BX] l ...
- 【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 / ...
最新文章
- toad dba suite for oracle 12.1,Toad for Oracle 12.1下载地址
- 异常“只能在执行Render()的过程中调用RegisterForEventValidation”的解决办法(转)...
- JavaScript 身份证号有效验证详解及实例代码
- POJ 2184 Cow Exhibition
- java第一句_Java如何开始第一个项目?
- Linux基础之while语句
- eclipse 3.x中热部署WEB程序TOMCAT配置
- 4412开发板团购活动
- 钟控RS,D,JK,T触发器
- SPSS中的比较均值—均值分析过程
- 【EfficientNet】EfficientNet网络结构及代码详解
- html加载图片路径问题
- Visual Paradigm 如何绘制平面图?
- 基于归一化互相关函数的语音基音周期检测
- Matlab含新能源(风电光伏)和多类型电动汽车配电网风险评估 由于电动汽车负荷与风电光伏出力的不确定性,造成配电网运行风险,运用蒙特卡洛概率潮流计算分析电压和线路支路越限
- Element级联菜单省市json数据
- 深度学习数学基础之线性代数
- 憨猫的EventLoop事件循环小解
- Microsoft Azure 容器技术助力游戏出海
- Shell 脚本中 set -ex 命令的作用
热门文章
- 哪种存储器是非易失的_ROM是易失性存储器还是非易事性存储器?
- xiao zhang jia you
- 服务器定时关机 修改时间,服务器调定时关机
- 用计算机弹出记事本,为何电脑开机会弹出desktop的记事本出来的
- PAT L1-019. 谁先倒
- 老码农的2019这一年——
- Clickhouse 数据库连接工具——DBeaver
- python少儿编程面试题-《与孩子一起学编程》python自测题
- eclipse安装SVN插件(2020最新,亲测可用)
- 【思路】2021年第十四届“认证杯“数学中国数学建模国际赛(小美赛)思路