求高手帮忙看一下我的8086程序为什么显示会乱码了~
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,
mov bx,
add ax,bx
mov bx,
add ax,bx
mov bx,
add ax,bx
mov bx,
add ax,bx
mov bx,
add ax,bx
mov bx,
add ax,bx
mov bx,
add ax,bx
mov bx,
add ax,bx
mov bx,
add ax,bx
cwd
div M
lea si,ave
mov ,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 ,bx
mov ,ax
mov ax,
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,
mov bx,
add ax,bx
mov bx,
add ax,bx
mov bx,
add ax,bx
mov bx,
add ax,bx
mov bx,
add ax,bx
mov bx,
add ax,bx
mov bx,
add ax,bx
cwd
div Q
lea si,ave2
mov ,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
页:
[1]