;循环程序设计方法 求A和B两个4字节BCD数之和 他们在内存中以压缩BCD码形式存放
;低字节在前 高字节在后 要求结果以同样形式存放以SUM的单元中
data segment
a db 44h,33h,22h,11h ;数A BCD数 加上后缀H
b db 88h,77h,66h,55h ;数B 格式同上
sum db 5 dup(?) ;存和(包含进位)
data ends
stack segment 'stack'
stapn db 100 dup(?)
top equ length stapn
stack ends
code segment
min proc far
assume cs:code,ds:data,es:data,ss:stack;使用串操作指令要设置附加段
start:mov ax,stack
mov ss,ax
mov sp,top
push ds
sub ax,ax
mov ds,ax ;设置数据段
mov es,ax ;设置附加段 与数据段相同
mov si,offset a ;si<数A的偏移地址
mov bx,offset b ;bx<数B的偏移地址
mov di,offset sum ;di
mov cx,length sum ;cx 和的长度(含进位位) 为5
dec cx ;循环次数为4
cld ;串操作做清方向标志 地址增量
clc ;进位位清0
mov ah,0 ;ah存最后一次进位 初值置0
get_sum:lods a ;al 从a取一个字节 si自动增1
adc al,[bx] ;与数B 相加 结果al
daa ;
inc bx
stos sum
loop get_sum
adc ah,0
mov al,ah
stosb
ret
main endp
code ends
end main