;如果是非壓縮的bcd碼,進程類似,自行修改
dseg segment
num1 dw ..........................; //16個壓縮BCD碼數字
sum dw ?
sum1 dw 0 ;初始化為0,
dseg ends
cseg segment
main proc far
assume cs:cseg, ds:dseg
start:
push ds
xor ax, ax
push ax
mov ax, dseg
mov ds, ax
;----------------------------------
mov cx, 15 ;//執行15次相加
mov si, 0
mov si, bx
mov ax, [si];//第壹項
mov sum, ax ;ax中數據放在sum, sum+1兩個byte中
next:
add si, 2
mov al, byte ptr sum
add al, [si]
daa ;壓縮BCD調整
mov byte ptr sum, al; 結果放入sum中
mov al, byte ptr sum+1; //高8位
adc al, [si+1] ;高位相加
daa
mov byte ptr sum+1, al
jnc loop_next ;如果兩個數相加,沒有更加進位,則進行下壹個元素相加
mov al, byte ptr sum1
adc al, 0 ;如果有進位,則處理
daa
mov byte ptr sum1, al
jnc loop_next
mov al, byte ptr sum1+1
adc al,0
daa
mov byte ptr sum1+1, al
loop_next:
loop next
ret
main endp
cseg ends
end start