求解编程 微机原理及应用~

2024年11月28日 21:44
有1个网友回答
网友(1):

;先假定16个数都为16位,即两个字,并且都为压缩的BCD码,也就是说,每个数字最大为9999
;如果是非压缩的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