8086算术运算类指令

算术运算指令

①加法类指令

②减法类指令

③乘法指令

④除法指令

⑤BCD吗指令

一、加法类指令

首先我么们先看加法类指令三个(add,adc,inc)

1)不带进位位的加法指令ADD

add用来执行2个字节或2个字的相加操作,运算时不考虑CF位

ADD DST,SRC   ;DST<--(DST)+(SRC)

ADD影响OF,SF,ZF,AF,PF,CF标志

2)带进位位的加法指令ADC

ADC在功能上和ADD类似,只是有一点区别,即执行ADC指令时,将进位标志CF的值加进和中。

ADC DST,SRC         ;DST<--(DST)+(SRC)+CF

ADC指令多用于多字节相加运算,如进行两个8字节(64位)数据相加,应先用ADD指令将低32位相加,再用ADC指令将高32位相加,此时会把低位字节产生的进位传递到高位字节运算中。

ADC影响OF,SF,ZF,AF,PF,CF.标志位

3)增量指令INC

INC指令只有一个操作数,指令执行时,将操作数内容加1,

INC指令影响AF,OF,PF,SF,ZF.

注意:INC指令不影响进位标志CF

二、减法类指令(SUB,SBB,CMP,DEC,NEG)

1)比考虑借位的减法指令SUB

SUB和上面的加法类似,也是不带借位的减

SUB [BP+2],CL               ;将ss段中的BP+2所指的单元中的值减去CL中的值,结果在BP+2所指堆栈单元中

SUB影响的标志位OF,ZF,AF,SF,PF,CF

2)考虑借位的减法指令SBB

和上面的ADC类似,就是SBB在执行减法运算时还要减去CF的值。

SBB AX,2530H       ;将AX中的内容减去2530H,并减去进位位CF的值

和上面类似,这里不在重复

3)减量指令DEC

这又和上面的INC类似,就是将操作数减一,同样不会影响CF,只是执行减一而已。

和上面都一样,这里不在重复。

4)求补指令NEC

其实我更喜欢叫它求负指令,它就是对给出的操作数求一个负,然后回送,可是机器内部是以补码的形式存储的,所以就是求补指令啦。

NEG影响的标志位AF,CF,ZF,PF,SF,OF‘

注意:①如果操作数的值为80H、8000H、80000000H,那么执行求补指令会溢出,结果没有变化,但溢出标志OF置1

②此指令执行时,通常使CF为1,只有当操作数为0时,CF才为0,因为此指令是用0减去某个操作数,所以除非为0,通常都会产生借位。

5)比较指令CMP

cmp也是执行两个数相减操作,但不送回相减结果,会影响标志位

此指令会影响标志位AF,CF,OF,PF,SF,ZF

那么如果判断比较结果呢?

答:如果比较的两个操作数相等的话,ZF = 1,根据ZF就可判断两数是否相等

①两个无符号比较

无符号相减时CF,就是借位标志,如果CF为0,表示无借位,则被减数大,若果,CF为1,则表示有借位,则减数大

②两个有符号数比较

看符号标志SF,而符号标志SF总是和结果的最高位相同,如果SF为0,表示被减数大,如果SF为1,则表示减数大

转载来自 http://blog.csdn.net/best_fiends_zxh/article/details/52723765

时间: 2024-10-26 23:59:29

8086算术运算类指令的相关文章

汇编--算术运算类指令

加法指令:ADD.ADC.INC 减法指令:SUB.SBB.DEC.NEG.CMP 乘法指令:MUL.IMUL 除法指令:DIV.IDIV 十进制调整指令:DAA.DAS.AAA.AAS.AAM.AAD 加法指令: ADD 带进位加法指令:ADC 加一指令:   INC 注意: 除 INC 指令不影响 CF 标志外,均对条件标志位有影响. 结果为0   ZF=1       结果为负   SF=1 CF 位表示 无符号数 相加的溢出.   和的最高有效位 有 向高位的进位 OF 位表示 带符号数

汇编--指令系统 数据传送类指令

(1) 数据传送类指令 通用数据传送指令:MOV .PUSH.POP.XCHG 交换指令 累加器专用传送指令: IN.OUT .XLAT 换码指令 地址传送指令:LEA.LDS.LES 标志寄存器传送指令:LAHF.SAHF.PUSHF.POPF 类型转换指令:CBW.CWD.CDQ.BSWAP MOV指令 对于存储器单元与立即数同时作为操作数的情况,必须显式指明   ;byte ptr 说明是字节操作   ;word ptr 说明是字操作 mov [bx],[si+2]  错误 不允许立即数传

ARM汇编初探---汇编代码中都有哪几类指令---ARM伪指令介绍

要学习一个东西首先要把概念搞清楚,下面只是自己的一些关于汇编的理解. 可执行文件中的01码是机器码,机器码不等于汇编码,虽然机器码可以很容易翻译成汇编码. 汇编码中包含很多汇编指令.伪指令和宏指令等,这些是不可以直接在机器上运行的. 机器指令是ARM指令集和Thumb指令集这些arm硬件支持的指令集组成的. 汇编码中的伪指令和宏指令这些都是汇编语言这个级别的指令,在汇编文件编译的时候汇编编译器as会去处理这些指令,在编译期间也会对宏进行展开,类似于gcc编译的时候对C代码中的宏展开一样.个人感觉

or1200中加载存储类指令说明

以下内容摘自<步步惊芯--软核处理器内部设计分析>一书 OR1200中实现的加载存储类指令有8条,每条指令的作用与说明如表9.1所示. 说明一点:在第2章建立的最小系统没有配置使用MMU,所以有效地址等于物理地址. 加载存储类指令的助记符也很好理解记忆,第一位是's'表示存储指令,'l'表示加载指令:第二位是'b'表示对字节操作,'h'表示对半字操作,'w'表示对字操作:第三位是'z'表示零扩展,'s'表示符号扩展.据此可以对指令进行简称,如:l.sb指令可以简称为存储字节指令.l.lwz指令

or1200中载入存储类指令说明

下面内容摘自<步步惊芯--软核处理器内部设计分析>一书 OR1200中实现的载入存储类指令有8条,每条指令的作用与说明如表9.1所看到的. 说明一点:在第2章建立的最小系统没有配置使用MMU,所以有效地址等于物理地址. 载入存储类指令的助记符也非常好理解记忆.第一位是's'表示存储指令,'l'表示载入指令.第二位是'b'表示对字节操作,'h'表示对半字操作,'w'表示对字操作:第三位是'z'表示零扩展,'s'表示符号扩展.据此能够对指令进行简称,如:l.sb指令能够简称为存储字节指令.l.lw

or1200处理器的异常处理类指令介绍

以下内容摘自<步步惊芯--软核处理器内部设计分析>一书 我们在计算机体系结构的学习中知道:中断实质上包括由外部事件引起的硬中断(又称外中断)和由内部预先安排的特定指令或内部异常引起的软中断(又称内中断或异常)两大类.在OR1200处理器中将中断称之为异常(exception),硬中断是其中的一种异常,当然这只是说法的不同而已.当异常发生时,有关处理器的状态信息被存储到某些寄存器,OR1200处理器转移到事先定义好的一个地址,在那个地址中往往有异常处理例程,在其中进行异常处理,这个地址称为异常处

《80X86汇编语言程序设计教程》十九 操作系统类指令与输入输出保护

1.  通常只在操作系统代码中使用,80386支持4个特权等级,操作系统指令也可分3种:实模式和任何特权级下可执行指令.实模式及特权级0下可执行的指令和仅在保护模式下执行的指令. 1)  实模式和任何特权级下可执行的指令 a)存储全局和中断描述符表寄存器指令 GDT与IDT整个系统各只有一张,它们的定位信息分别保存在GDTR与IDTR中,这两个寄存器的值可以被保存.须注意,LDT表示任务私有,存储LDTR值的指令不属于这一类. i)存储全局描述符表寄存器指令:SGDT  DST DST是48位(

Linux里面的压缩和解压类指令

gzip/gunzip 指令 ( .gz  不能压缩目录) gzip 用于压缩文件, gunzip 用于解压的 . gzip gzip命令用来压缩文件.gzip是个使用广泛的压缩程序,文件经它压缩过后,其名称后面会多处".gz"扩展名.gzip是在Linux系统中经常使用的一个对文件进行压缩和解压缩的命令,既方便又好用.gzip不仅可以用来压缩大的.较少使用的文件以节省磁盘空间,还可以和tar命令一起构成Linux操作系统中比较流行的压缩文件格式.据统计,gzip命令对文本文件有60%

Linux文件目录类指令

⒈pwd 显示当前工作目录的绝对路径 ⒉ls [Options] [目录或文件] 常用选项: -a:显示当前目录下所有的文件和目录,包括隐藏的. -l:以列表的方式显示信息. ⒊cd [目录的绝对路径] 切换工作目录到指定目录 常用参数: cd ~或者cd:切换到当前用户的主目录 cd ..:回到当前目录的上一级目录 ⒋mkdir [Options] 要创建的目录 用于创建目录(Make Directory) 常用选项: -p:创建多级目录 ⒌rmdir [Oprions] 要删除的空目录 用于