- 一个有符号字数组以0为结束标志,编程求这个数组的最大值、 最小值、平均值。
DATAS SEGMENT
buf dw 100H,-90H,50H,0
max dw 0
min dw 0
ave dw 0
num dw 0
buf1 db 'The maximum number is: ','$'
buf2 db 0ah,'The minimum number is: ','$'
buf3 db 0ah,'The average number is: ','$'
;此处输入数据段代码
DATAS ENDS
STACKS SEGMENT
;此处输入堆栈段代码
STACKS ENDS
CODES SEGMENT
ASSUME CS:CODES,DS:DATAS,SS:STACKS
START:
MOV AX,DATAS
MOV DS,AX
lea di,buf
mov cx,10
mov bx,0
edg:
mov ax,[di]
cmp ax,0
je fpx
inc bx
inc di
inc di
loop edg
fpx:
mov num,bx ;得知数据段长度
lea di,buf
mov ax,[di]
mov cx,num
mov bx,0
min1:
inc di
inc di
mov bx,[di]
cmp bx,0
je fpx1
cmp ax,bx
jl l2
mov ax,bx
l2: loop min1
fpx1:
mov min,ax ;得知数据段最小值
LEA DX,buf2
MOV AH,09H
int 21H;输出最小值
mov bx,min
call output
MOV DL,0AH
MOV AH,02H
INT 21H ;回车换行
;----------------------------------------
lea di,buf
mov ax,[di]
mov cx,num
mov bx,0
max1:
inc di
inc di
mov bx,[di]
cmp bx,0
je edg1
cmp ax,bx
jg l1
mov ax,bx
l1: loop max1
edg1:
mov max,ax ;得知数据段最大值
mov bx,ax
LEA DX,buf1
MOV AH,09H
int 21H
call output
MOV DL,0AH
MOV AH,02H
INT 21H ;回车换行
;输出最大值
;----------------------------------------
lea di,buf
mov ax,[di]
mov cx,num
mov bx,0
ave1:
inc di
inc di
mov bx,[di]
cmp bx,0
je rng1
adc ax,bx
loop ave1
rng1:
mov dx,0
mov cx,num
idiv cx
mov ave,ax ;得知数据段平均值
mov bx,ave
LEA DX,buf3
MOV AH,09H
int 21H
mov bx,ave
call output
MOV DL,0AH
MOV AH,02H
INT 21H ;回车换行
MOV AH,4CH
INT 21H;输出平均值
output proc near
MOV AL,BH
MOV AH,0
MOV DL,10H
DIV DL
ADD AX,3030H
mov cx,ax
CMP AL,3AH
JB FPX2
ADD AL,07H
FPX2:
MOV DL,AL
MOV AH,02H
INT 21H
mov al,ch
CMP AL,3AH
JB LNG
ADD AL,07H
LNG:
MOV DL,AL
MOV AH,02H
INT 21H ;打印高位字节
MOV AL,BL
MOV AH,0
MOV dL,10H
DIV dL
ADD AX,3030H
mov cx,ax
CMP AL,3AH
JB IG
ADD AL,07H
IG:
MOV DL,AL
MOV AH,02H
INT 21H
mov al,ch
CMP AL,3AH
JB RNG
ADD AL,07H
RNG:
MOV DL,AL
MOV AH,02H
INT 21H ;打印低位字节
ret
output endp
CODES ENDS
END START