21,453
社区成员
发帖
与我相关
我的任务
分享
;
;This Program Compiled Sucess by Masm 6.15
;
assume cs:code,ds:data
data segment
buf db 5,0,5 dup(0) ;输入缓冲区,每次输入小于10000的数字
msg1 db 'Enter numbers of digit:$'
sum dd 0
ave db 'Average is:$'
data ends
code segment
start:
mov ax,data ;指定数据段
mov ds,ax
mov dx,offset msg1 ;提示信息
mov ah,9
int 21h
mov ah,1 ;输入N个数
int 21h
call crlf ;回车
mov cl,al ;处理循环次数
mov ch,0
sub cl,30h
push cx ;保存,以后恢复做除数
_in: ;循环输入
call input ;调用输入子程序
add word ptr sum,ax ;低位
adc word ptr sum+2,0 ;高位
call crlf ;回车
loop _in
mov dx,word ptr sum+2 ;将结果高16位存放在DX,低16位放在AX里
mov ax,word ptr sum
pop cx ;恢复
div cx ;计算平均值
push ax ;保存平均值
mov dx,offset ave ;显示信息
mov ah,9
int 21h
pop dx ;取出平均值
call show ;调用显示子程序,显示平均值
mov ah,4ch ;程序技术
int 21h
;回车子程序
crlf proc uses ax
mov ah,2
mov dl,13
int 21h
mov dl,10
int 21h
ret
crlf endp
;输入子程序,结果在AX中
input proc uses cx
mov dx,offset buf
mov ah,10
int 21h
xor cx,cx
mov cl,buf+1
mov bx,offset buf+2
mov ax,0
inp:
mov dx,10
mul dx
and byte ptr [bx],0fh
add al,[bx]
adc ah,0
inc bx
loop inp
ret
input endp
;显示十进制子程序,将DX的值以十进制形式显示
show proc uses ax bx cx dx
mov ax,dx
xor dx,dx
mov bx,10
mov cx,0
a: cmp ax,10
jb ok
div bx
add dl,30h
push dx
xor dx,dx
inc cx
jmp a
ok: add al,30h
push ax
inc cx
b: pop dx
mov ah,2
int 21h
loop b
ret
show endp
;
code ends
end start