code segment
assume cs:code
org 100h
start:
jmp bbb
lfcr db 13,10,'$'
bbb:
push cs
pop ds
call inputnum
mov ah,9
lea dx,lfcr
int 21h
lea si,array
mov ch,0
mov cl,byte ptr[num]
mov ax,0
lp:
add ax,word ptr[si]
daa ; 十进制加法调整指令
inc si
inc si
loop lp
call dispnum
mov ah,4ch
int 21h
dispnum proc near
; 将要显示的数据放入AL中
mov dl,al ; 将AL暂存在DL中
and al,0Fh ; 取AL的低4位
mov bl,al ; 非压缩的bcd码
add bl,30h ; 转成ASCii码
mov al,dl ; 取回AL 并经以下4次右移取出AL的高4位
shr al,1
shr al,1
shr al,1
shr al,1
mov bh,al ; 非压缩的bcd码
add bh,30h ; 转成ASCii码
mov ax,bx ; 非压缩的两位数的ASCii码存放在AX中
mov byte ptr[y+4],al
mov byte ptr[y+3],ah
mov ah,9
lea dx,y
int 21h
ret
y db 10,13,0,0,0,'$'
dispnum endp
inputnum proc near
; 输入的数据以一个空格分隔,以回车符结束输入
lea di,array ;将数组第一个元素的有效地址置入DI
mov byte ptr[num],0
stin:
mov ax,0
push ax
again1:
mov ah,1
int 21h
mov byte ptr[char],al
cmp al,13
je line0
cmp al,' '
je line0
sub al,30h
mov ah,0
mov si,ax
pop ax
mov cl,10
mov ch,0
mul cx
add ax,si
push ax
jmp again1
line0:
pop ax
mov word ptr[di],ax
inc byte ptr[num]
cmp byte ptr[char],13
je stinend
inc di
inc di
jmp stin
stinend:
ret
array dw 100 dup(0)
num db 0
char db ?
inputnum endp
code ends
end start