汇编语言03:8086算术运算指令 |
您所在的位置:网站首页 › 汇编语言sbb指令 › 汇编语言03:8086算术运算指令 |
目录 进位标志CF 溢出标志OF 其他状态标志 加法指令 加法指令ADD 带进位加法指令ADC 增量指令INC 减法指令 减法指令SUB 带借位减法指令SBB 减量指令DEC 求补指令NEG 比较指令CMP 乘法指令 无符号数乘法指令MUL 有符号乘法指令IMUL 除法指令 无符号数二进制除法指令DIV 有符号数二进制除法指令IDIV 符号扩展指令 8位扩展指令CB(byte)W(word) 16位扩展指令CW(word)D(doubleword) 十进制调整指令 压缩BCD码调整指令DAA、DAS 非压缩BCD码调整指令 加和调整指令AAA 减差调整指令AAS 乘积调整指令AAM 除法调整指令AAD 总结: 8086的算术运算指令除了常见的加、减、乘、除指令,还有符号拓展指令和十进制调整指令。同时,在讨论算术运算指令时,我们需要仔细考虑状态标志带来的影响。 进位标志CF首先是进位标志CF,它指示字节最高位是否产生进位。注意,在字节内产生进位不影响CF。例如如下二进制加法: 00011000+01111100 = [0]10010100 由于最高位没有继续向上进位,因此CF=0,但是如果是如下情况: 10011000+01111100 = [1]00010100 最高位继续向上进位,因此CF=1。 溢出标志OF溢出标志用于表示有符号整数加减运算的结果是否超出了范围。若超出范围,则是有溢出,设置OF=1,否则OF=0。例如如下有符号运算: 00111010+0111100 = 10110110 (58+124=182) 运算结果发生了溢出,所以OF是1,实际上表达的是负数。10101010按照负数补码+1得到绝对值86,故这个数是-86。他和二进制数124相加,结果发生了进位,但是由于是有符号整数相加,不考虑进位,因此结果表现为38. 由上可以看出,进位标志CF和溢出标志OF作用的地方不相同。其中,CF用于判断无符号整数运算结果是否超出范围,而溢出标志表示有符号整数运算结果是否超出范围。实际上,在使用汇编语言进行编程时,标志的控制方面是需要程序员注意的。 其他状态标志1.零标志ZF反映运算结果是否为0。注意,产生进位的情况不在该标志的考虑范围内。例如如下二进制加法 11111111+00000001 = [1]00000000. 此时进位标志CF被设置为1,但同时地零标志ZF也会被设置为1,表示运算结果是0. 2.符号标志SF反映运算结构是正数还是负数。可以通过符号位来判断。 3.奇偶标志PF并非判断结果是奇数还是偶数,而是反映运算结果最低字节中‘1’的个数是偶数还是奇数,从而实现奇偶校验。若个数是偶数个,则PF=1,否则PF=0。 4.调整标志AF反映加减运算时最低半字节有无进位或者借位.当有进(借)位时,将AF设置为1,否则设置为0. 总结了以上运算时可能遇到的标志之后,接下来介绍算术运算指令。、 加法指令8086提供了三种加法指令: 加法指令ADD操作:将源操作数与目的操作数相加,结果送目的操作数。其基本格式如下: ADD reg,imm/reg/mem ADD mem,imm/reg寻址方式:和其他指令相同,源操作数和目的操作数不可以同时是存储器的存储单元。 标志影响:对OF,SF,ZF,AF,PF,CF造成影响。 带进位加法指令ADC操作:在执行ADD指令的同时加上进位标志CF。主要用于和ADD指令一起完成多精度数相加。其基本格式如下: ADC reg,imm/reg/mem ADC mem,imm/reg寻址方式:和其他指令相同,源操作数和目的操作数不可以同时是存储器的存储单元。 标志影响:ADC用在下位进位的加法中,在运算时将会在除最低字节考虑CF的影响。例如,若操作数值分别为0001H和0002H,CF=1,那么得出结果将会是0005H。 增量指令INC操作:只有一个操作数,对操作数加1。其基本格式如下: INC reg/mem寻址方式:因为为自增,不能为立即数寻址。 标志影响:不影响CF,其他情况和ADD,ADC一样。 从汇编指令可以看出,这是高级语言中运算符+和++(C语言)的雏形和底层。 减法指令减法指令执行字或者字节的减法运算。常用的减法指令有SUB,SBB,DEC,NEG,CMP 减法指令SUB操作:执行减法指令,结果送目的操作数,类似于ADD指令。其基本格式如下: SUB reg,reg/mem/imm SUB mem,reg/imm寻址方式:和其他指令相同,源操作数和目的操作数不可以同时是存储器的存储单元。 标志影响:影响OF,SF,PF,CF,ZF,AF. 带借位减法指令SBB操作:在执行SUB的基础上,如果CF为1,还需要再减去1。其基本格式如下: SBB reg,imm/reg/mem SBB mem,imm/reg寻址方式:和其他指令相同,源操作数和目的操作数不可以同时是存储器的存储单元。该指令常用于和SUB结合来进行多精度的减法。 标志影响:用在下位借位的减法中,一般会在除最低字节外考虑CF的影响。 减量指令DEC操作:只有一个操作数,对操作数-1.其基本格式如下: DEC reg/mem寻址方式:因为为自减,不能为立即数寻址。 标志影响:不影响CF,其他情况和SUB,SBB一样。 求补指令NEG操作:对操作数按位取反后加1.当操作数是有符号数时,求补指令作用为求其相反数。其基本格式如下: NEG reg/mem寻址方式:因为为求反,不能为立即数寻址。 标志影响:和SUB一样。 比较指令CMP操作:将目的操作数减去源操作数,但是结果不返回。即:只会影响标志,不会影响操作数。一般用于流程的控制,比如条件和循环判断。其基本格式如下: CMP reg,imm/reg/mem CMP mem,imm/reg寻址方式:和其他指令相同,源操作数和目的操作数不可以同时是存储器的存储单元。 影响标志:和SUB一样。 下方展示了一个比较和返回的简单代码: CMP AL,100 ;AL-100 JB below ;AL |
今日新闻 |
点击排行 |
|
推荐新闻 |
图片新闻 |
|
专题文章 |
CopyRight 2018-2019 实验室设备网 版权所有 win10的实时保护怎么永久关闭 |