X86指令系统一----------算术运算

本文详细介绍了二进制运算指令,包括加法指令(ADD、ADC)、加一指令(INC)、减法指令(SUB、SBB)、减一指令(DEC)、求补指令(NEG)及比较指令(CMP)。通过具体实例演示了这些指令的应用场景,如多字节加减法运算和求绝对值等。

1二进制运算指令

   1)加法指令

         不带进位的加法指令ADD

         ADD dst, src   ; dst<-dst+src

         影响全部6个状态标志位

         带进位的加法指令ADC

         ADC  dst, src  ; dst<-dst+src+CF

         举例  计算两个多字节16机制数之和  3B74AC60F8H+20D59E36C1H=?

          假设data1 是3B74AC60F8H  ;  data2是20D59E36C1H

          mov cx, 5

          mov si, 0

          clc

      looper:mov al , data2[si]

                 adc  data1[si], al

                 inc   si

                 dec  cx

                 jnz   looper

                hlt

         加一指令INC

           INC   dst        ;dst<-dst+1   除了cf之外,对别的状态标志均有影响

           INC 的操作数不能是立即数或段寄存器。

 

    2)减法指令

        不带借位的减法指令SUB

         SUB  dst, src    ; dst<-dst-src

         SUB AL,  37H

         SUB DX, BX

         SUB CX, VARE1

         当无符号小数减大数,产生借位,CF置一

         当有符号小数减大数,得到负值,SF置一

         当有符号小数减大数,结果益处,OF置一

         带借位的减法指令SBB

         SBB<-SBB-SRC-CF

          SBB BX,1000

          SBB CX, DX

         这个多用于多字节的减法

         减一指令DEC

         DEC dst       ;dst<-dst-1

         DEC常用来修改循环次数CX

       求补指令NEG

       NEG  dst  ;  dst<-0-dst

       这个用来求负数的绝对值

       mov  ax,  0ffh    ;ax = -1

       NEG  ax          ;  ax =1

        有下面这个例子,内存中有200个带符号数,首地址是TAB1,要求将各数据求绝对值后,存入到TAB2中去

       LEA  SI, TAB1

       LEA  DI, TAB2

       MOV CX, 200

CHECK:

       MOV AL, [SI]

       OR AL, AL

       JNS NEXT

       NEG AL

NEXT:

      MOV [DI], AL

      INC SI

      INC DI

      DEC CX

      JNZ  CHECK

      HLT

       比较指令CMP

       CMP  dst, src       ; dst-src

       状态标志位改变,其他不变,不能同为存储器

          相等时:ZF=1

          比较的两个无符号数,相减小于0,:CF=1

        例子:MYDATA存储单元存放了两个8位无符号数,找出较大的那个,放入MAX单元中

         LEA SI, MYDATA

         LEA DI, MAX

         MOV AL, [SI]

         CMP AL,[SI+1]

         JNC DONE

         MOV AL, [SI+1]

 DONE:

        MOV MAX, AL

         HLT

  3  乘法指令

 

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值