|
马上注册,结交更多好友,享用更多功能^_^
您需要 登录 才可以下载或查看,没有账号?立即注册
x
RT~而且好像还跳过了一段部分少了一个字符串..
data segment
ARRAY dw 12ch,13ah,18bh,50dh,60fh,70fh,15ah,10dh,19ch,22bh;定义数据
N equ 10
M dw 10D
Q dw 8D
ave dw 0
ave2 dw 0
string0 db 'the ARRAY is:','$'
string1 db 0DH,0AH,'the average is:','$'
string2 db 0DH,0AH,'after buffer the array is:','$'
string3 db 0DH,0AH,'the max number is:','$'
string4 db 0DH,0AH,'the min number is:','$'
string5 db 0DH,0AH,'without max and min the average is:','$'
data ends
stack segment
dw 100 dup(0)
stack ends
code segment
assume cs:code,ds:data,ss:stack,es:data
start: mov ax,data
mov ds,ax
mov dx,offset string0 ;显示提示符
mov ah,09h
int 21h
lea si,ARRAY
mov cx,10
s: call ZH ;调用子程序,显示未排序的数组
loop s
mov dx,offset string1 ;显示提示符,计算此时数组平均值
mov ah,09h
lea si,ARRAY
mov ax,[si]
mov bx,[si+2]
add ax,bx
mov bx,[si+4]
add ax,bx
mov bx,[si+6]
add ax,bx
mov bx,[si+8]
add ax,bx
mov bx,[si+10]
add ax,bx
mov bx,[si+12]
add ax,bx
mov bx,[si+14]
add ax,bx
mov bx,[si+16]
add ax,bx
mov bx,[si+18]
add ax,bx
cwd
div M
lea si,ave
mov [si],ax
call ZH ;调用转换程序
mov cx,10 ;进行排序
s1: push cx
lea SI,ARRAY
lodsw ;把SI指向的存储单元读入累加器,LODSW就读入AX中,然后SI自动增加2.其常常是对数组或字符串中的元素逐个进行处理。
P1: mov bx,ax
lodsw
cmp bx,ax
jl p2
mov [si-2],bx
mov [si-4],ax
mov ax,[si-2]
p2: loop p1
pop cx
loop s1
;输出排序后的结果
mov dx,offset string2
mov ah,09
int 21h
mov cx,10
lea si,ARRAY
p3: call ZH
loop p3
;输出最大值
mov dx,offset string3
mov ah,09h
int 21h
lea si,ARRAY
add si,18H;定义的是DW最大数排在最后所以要+18取最大
call ZH
;输出最小值
mov dx,offset string4
mov ah,09h
int 21h
lea si,ARRAY
call ZH
;输出去掉最大最小后的平均值
mov dx,offset string5
mov ah,09h
mov ax,[si]
mov bx,[si+2]
add ax,bx
mov bx,[si+4]
add ax,bx
mov bx,[si+6]
add ax,bx
mov bx,[si+8]
add ax,bx
mov bx,[si+10]
add ax,bx
mov bx,[si+12]
add ax,bx
mov bx,[si+14]
add ax,bx
cwd
div Q
lea si,ave2
mov [si],ax
call ZH
ZH proc ;转换子程序(SI指针由外部提供,方便选择要显示的东西)
lodsw
mov bx,3 ;数据在十进制时的是三位数所以计数部分BX置三
ZL1:cwd
div M
push dx
dec bx
jnz ZL1
mov bx,3
ZL2:pop dx
add dl,30h
dec bx
mov ah,2
int 21h
jnz ZL2
mov DL,20H
mov ah,2
int 21h
ret
ZH endp
code ends
end start
|
|