;循环程序设计方法 求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