《2022年2022年汇编运算类指令 .pdf》由会员分享,可在线阅读,更多相关《2022年2022年汇编运算类指令 .pdf(5页珍藏版)》请在淘文阁 - 分享文档赚钱的网站上搜索。
1、算术运算类指令用来执行二进制及十进制的算术运算:加减乘除。这类指令会根据运算结果影响状态标志,有时要利用某些标志才能得到正确的结果。一、加法指令1、加法指令ADD ADD reg,imm/reg/mem ;reg reg+imm/reg/memADD mem,imm/reg ;mem mem+imm/regADD 指令按照状态标志的定义相应的设置这些标志的0或1状态。2、带进位标志加法指令ADC ADC reg,imm/reg/mem ;reg reg+imm/reg/mem+CFADC me m,imm/reg ;mem mem+imm/reg+CFADC 指令除完成ADD 加法指令运算外,
2、还要加进位CF。3、增量指令INC INC reg/mem ;reg/mem reg/mem+1INC 指令对操作数加1(增量)。它是一个单操作数指令。设计加 1指令和后面介绍的减1指令的目的,主要是用于对计数器和地址指针的调整,所以他们不影响进位CF 标志,对其他标志位的影响与ADD,ADC相同。二、减法指令1、减法指令SUB SUB reg,imm/reg/mem ;reg reg-imm/reg/mem SUB mem,imm/reg ;mem mem/reg2、带借位减法指令SBB SBB reg,imm/reg/mem ;reg reg-imm/reg/mem-CF SBB mem,
3、imm/reg ;mem mem -imm/reg-CF 3、减量指令DEC DEC reg/mem ;reg/mem reg/mem-1 名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 1 页,共 5 页 - - - - - - - - - 同样不影响CF 标志。4、求补指令NEG NEG reg/mem ;reg/mem0-reg/mem NEG 指令也是一个单操作数指令,它对操作数执行求补运算,即用零减去操作数,然后结果返回操作数。求补运算也可以表达成:将操作数按位求反后加1。
4、5、比较指令CMP CMP reg,imm/reg/mem ;reg-imm/reg/mem CMP mem,imm/reg ;mem-imm/reg 该指令将目的操作数减去源操作数,但结果不回送目的操作数。也就是说CMP 指令与减法指令SUB 执行相同的操作,同样影响标志, 只是不改变目的操作数。CMP 指令用于比较两个操作数的大小关系。 执行比较指令之后,可以根据标志判断两个数是否相同、大小关系等。 所以,CMP指令后常跟条件转移指令,根据比较结果不同产生不同的分支。三、乘法指令1、无符号数乘法指令MUL MUL 指令执行无符号二进制数的乘法运算:MUL r8/m8 ; 无符号字节乘:AX
5、 AL r8/m8MUL 6/6 ;无符号字乘:DX.AX AX r16/m16乘法指令隐含使用一个操作数AX 和 DX,源操作数则显式给出,可以是寄存器或存储单元。MUL 指令影响标志OF 和 CF。2、有符号数乘法指令IMUL IMUL r8/m8 ; 有符号数字节乘:AX AL r8/m8IMUL r16/m16 ; 有符号数字乘:DX.AX AX r16/m16四、除法指令1、无符号数除法指令DIV 名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 2 页,共 5 页 - -
6、- - - - - - - DIV r8/m8 ; 无符号字节除法:AL AX r8/m8的商, AH AX r8/m8 的余数DIV r16/m16 ; 无符号字除法:AX DX.AX r16/m16 的商, DX DX.AX r16/m16 的余数。2、有符号数除法指令IDIV IDIV r8/m8 IDIV r16/m16 五、符号扩展指令符号扩展是指用一个操作数的符号位(即最高位)形成另一个操作数,后一个操作数的各位是全0(正数)或全 1(负数)。符号扩展指令可用来将字节转换为字,字转换为双字。均不影响标志位。1、字节转换为字指令CBW CBW ; AL 符号扩展成AX CBW 指令将
7、 AL 的最高有效位D7扩展至 AH ,即:如果 AL 的最高有效位是0,则 AH=00 ;AL的最高有效位为1,则 AH=FFH 。AL 不变。2、字转换为双字指令CWD CWD ;AX 符号扩展成DX 指令将 AX 的内容符号扩展形成DX ,即如果AX 的最高有效位D15位0,则 DX=0000H, 如果AX 的最高有效位为1,则 DX=FFFFh. 符号扩展指令常用来获得除法指令所需要的被除数。六、十进制调整指令十进制调整指令对二进制运算结果进行十进制调整,以得到十进制的运算结果。十进制在计算机中也要用二进制表示,这就是十进制编码的十进制数:BCD 码。8086支持压缩的BCD 码和非压
8、缩的 BCD 码,相应的十进制调整指令分为压缩BCD 码调整指令和非压缩BCD 码调整指令。1、压缩 BCD 码调整指令名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 3 页,共 5 页 - - - - - - - - - 压缩的 BCD 码是通常的 8421码,它用 4个二进制位表示一个十进制位,一个字节可以表示两个十进制位,即 0099。(1)加法的十进制数调整指令DAA DAA ;AL 将 AL 中的加和调整为压缩BCD 码该指令跟在以AL 为目的操作数的ADD 或 ADC 指
9、令之后,对AL 的二进制结果进行十进制调整,并在 AL 得到十进制结果。DAA 指令对 OF 标志无定义,按其结果影响所有其他标志,其中 CF 反映压缩BCD 码相加的进位状态。(2)减法的十进制调整指令DAS DAS ;AL 将 AL 中的减差调整为压缩BCD 码2、非压缩 BCD 码调整指令非压缩 BCD 码用 8个二进制位表示一个十进制位。(1)加法的非压缩BCD 码调整指令AAA AAA ;AL 将 AL 中的加和调整为非压缩BCD 码, AH AH+ 调整产生的进位该指令跟在以AL 为目的操作数的ADD 或 ADC 指令之后, 对 AL 进行非压缩BCD 码调整; 如果调整中产生了进
10、位,则将进位1加到 AH 中,同时CF=AF=1; 否则 CF=AF=0 。AAA 指令对其他标志无定义。使AL 的高 4位清 0。(2)减法的非压缩BCD 码调整指令AAS AAS ;AL 将 AL 中的减差调整为非压缩BCD 码, AH AH -调整产生的借位该指令跟在以Al 为目的操作数的SUB 或 SBB 指令之后,对AL 进行非压缩BCD 码调整;如果调整中产生了借位,则将AH 减去借位 1,同时 CF=AF=1; 否则 CF=AF=0. (3)乘法的非压缩BCD 码调整指令AAM AAM ;AX 将 AX 中的乘积调整为非压缩BCD 码该指令跟在以AX 为目的操作数的MUL 指令之
11、后, 对 AX 进行非压缩BCD 码调整。 利用 MUL相乘的两个非压缩BCD 码的高 4位必须为 0。AAM 指令根据结果设置SF、 ZF 和 PF,但 OF、名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 4 页,共 5 页 - - - - - - - - - CF、AF 无定义。(4)除法的非压缩BCD 码调整指令AAD AAD ;AX 将 AX 中的非压缩BCD 码扩展成二进制数,即:AL 10d AH+AL,AH0AAD 调整指令与其他的调整指令应用情况不同。他先将存放在AX 寄存器中的两位非压缩BCD码数进行调整, 然后再用DIV 指令除以一个非压缩BCD 码数, 这样得到非压缩BCD 码数的除法结果。其中,要求AL 、 AH 和除数的高 4位为 0。AAD 指令根据结果设置SF、 ZF 和 PF,但OF、CF 和 AF 无定义。名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 5 页,共 5 页 - - - - - - - - -
限制150内