主题:[讨论]高分请高手解题
在10个同学的成绩中求最高分和最低分,还有平均分,还有各分段的人数
以下是我编的,很遗憾不能显示正确的结果,请各位高人帮忙看看,100分奖励!
.model small
.data
score db 90,95,45,76,67,66,86,78,92,89 ;成绩
max db 0 ;最高分
min db 0 ;最低分
avg db 0 ;平均成绩
sum dw 0 ;总成绩
A1 db 0 ;等级A
B1 db 0 ;等级B
C1 db 0 ;等级C
D1 db 0 ;等级D
count equ 10 ;学生人数
str db 2 dup(?),0dh,0ah,'$' ;用来存放临时字符
.code
.startup
main proc far
xor ax,ax
xor dx,dx
xor cx,cx
mov cx,count
lea si,score
mov ax,[si]
mov max,al
mov min,al
call makeScore ;子过程
xor si,si
xor di,di
lea bx,score ;显示成绩
mov si,cx
dec si
lea di,str
call display
xor si,si
xor di,di
lea bx,max ;显示最高分
mov si,0
lea di,str
call display
xor si,si
xor di,di
lea bx,min ;显示最低分
mov si,0
lea di,str
call display
xor si,si
xor di,di
lea bx,avg ;显示平均分
mov si,0
lea di,str
call display
mov ah,4ch
int 21h
main endp
makeScore proc ;求最大,最小分数,平均成绩和等级人数
push cx
again:
mov bl,[si]
add al,bl
cwd
mov sum,ax
mov bl,max
mov al,min
.if [si] > bx
mov bl,[si]
mov max,bl
.elseif [si] < ax
mov al,[si]
mov min,al
.endif
.if [si] > 80
inc A1
.elseif [si] > 70
inc B1
.elseif [si] > 60
inc C1
.else
inc D1
.endif
inc si
inc si
loop again
mov ax,sum
mov bx,10d
div bx
mov avg,al
pop cx
ret
makeScore endp
display proc
lop:
mov dl,[bx][si]
call disc
add dh,30H
mov [di],dh
inc di
add dl,30h
mov [di],dl
inc di
dec si
loop lop
lea dx,str
mov ah,9H
int 21H
ret
display endp
disc proc
push cx
mov dh,dl
and dh,0f0H
mov Cl,4
shr dh,cl
and dl,0FH
pop cx
ret
disc endp
.exit 0
end
以下是我编的,很遗憾不能显示正确的结果,请各位高人帮忙看看,100分奖励!
.model small
.data
score db 90,95,45,76,67,66,86,78,92,89 ;成绩
max db 0 ;最高分
min db 0 ;最低分
avg db 0 ;平均成绩
sum dw 0 ;总成绩
A1 db 0 ;等级A
B1 db 0 ;等级B
C1 db 0 ;等级C
D1 db 0 ;等级D
count equ 10 ;学生人数
str db 2 dup(?),0dh,0ah,'$' ;用来存放临时字符
.code
.startup
main proc far
xor ax,ax
xor dx,dx
xor cx,cx
mov cx,count
lea si,score
mov ax,[si]
mov max,al
mov min,al
call makeScore ;子过程
xor si,si
xor di,di
lea bx,score ;显示成绩
mov si,cx
dec si
lea di,str
call display
xor si,si
xor di,di
lea bx,max ;显示最高分
mov si,0
lea di,str
call display
xor si,si
xor di,di
lea bx,min ;显示最低分
mov si,0
lea di,str
call display
xor si,si
xor di,di
lea bx,avg ;显示平均分
mov si,0
lea di,str
call display
mov ah,4ch
int 21h
main endp
makeScore proc ;求最大,最小分数,平均成绩和等级人数
push cx
again:
mov bl,[si]
add al,bl
cwd
mov sum,ax
mov bl,max
mov al,min
.if [si] > bx
mov bl,[si]
mov max,bl
.elseif [si] < ax
mov al,[si]
mov min,al
.endif
.if [si] > 80
inc A1
.elseif [si] > 70
inc B1
.elseif [si] > 60
inc C1
.else
inc D1
.endif
inc si
inc si
loop again
mov ax,sum
mov bx,10d
div bx
mov avg,al
pop cx
ret
makeScore endp
display proc
lop:
mov dl,[bx][si]
call disc
add dh,30H
mov [di],dh
inc di
add dl,30h
mov [di],dl
inc di
dec si
loop lop
lea dx,str
mov ah,9H
int 21H
ret
display endp
disc proc
push cx
mov dh,dl
and dh,0f0H
mov Cl,4
shr dh,cl
and dl,0FH
pop cx
ret
disc endp
.exit 0
end