二进制加、减法编程

1、二进制加法基本指令

(1)ADD指令

格式:ADD DST,SRC

该指令把源操作数(SRC)指向的数据与目的操作数(DST)相加后,将结果放到目的操作数(DST)中,所执行的操作:(DST)ß(SRC)+(DST)

SRC和DST不能同时为存储器操作数和段寄存器,同时SRC和DST的数据类型要匹配,要同是字节或字。受影响的标志位有:OF,SF,ZF,AF,PF,CF。

(2)ADC指令

格式:ADC DST,SRC

所执行的操作:(DST)ß(SRC)+(DST)+CF     了解清楚进位是怎样加的

该指令把两个操作数(SRC和DST)相加以后,再加上进位标志CF,将结果放到目的操作数(DST)中。受影响的标志位有:OF,SF,ZF,AF,PF,CF。ADC指令多用于多精度数据相加。

2、二进制减法基本指令

(1)SUB指令

扫描二维码关注公众号,回复: 835380 查看本文章

格式:SUB DST,SRC

所执行的操作:(DST)ß (DST)-(SRC)

该指令把源操作数(SRC)指向的数据与目的操作数(DST)相减后,将结果放到目的操作数(DST)中,SRC和DST不能同时为存储器操作数和段寄存器(,同时SRC和DST的数据类型要匹配,要同是字节或字。受影响的标志位有:OF,SF,ZF,AF,PF,CF。

(2)SBB指令

格式:SBB DST,SRC

(DST)ß (DST)-(SRC)-CF     了解清楚进位是怎样减的

该指令把两个操作数(SRC和DST)相减以后,再减去CF,将结果放到目的操作数(DST)中。受影响的标志位有:OF,SF,ZF,AF,PF,CF。SBB指令多用于多精度数据相加。

3、多精度数相加程序设计示例

将两个双字长度的数分别相加并将结果存放在result中。

首先进行题目分析:

(1)如何存放多精度数?

多精度数的存放有两种方式,高地址优先(如1234H,5678H表示56781234H)和低地址优先(如1234H,5678H表示12345678H),具体的存放方式由用户根据自己的习惯选择。在这里虑我们使用了高地址优先的存储方式。

(2)分析程序设计

由于汇编语言的ADD,ADC,SUB,SBB指令都不支持两个操作数都是存储器操作数的情况,因此将一个操作数的低字放到寄存器AX中,高字放到寄存器DX中分别完成高字部分的加法,高字部分的带进位加法。

(3)具体程序设计

datasegment

data1      dw          5311h,8a13h   ;表示数据8a135311h

data2      dw      4783h,9526h   ;表示数据95264783h

result     dw    2 dup(?)     ; 存放多字节加法的结果

dataends

codesegment

  assume cs:code,ds:data

start:

    mov ax,data

    mov ds,ax

    mov ax,data1

    mov dx,data1+2

    add ax,data2      ;低字部分相加

    adc dx,data2+2  ;高字部分带进位相加

    mov result,ax       ;存放低字部分相加结果

    mov result+2,dx        ;存放高字部分相加结果  

codeends

  end start


猜你喜欢

转载自blog.csdn.net/abc1498880402/article/details/80258446