初学汇编,问一道题
设有十个学生成绩分别是76,69,84,90,73,88,99,63,100和80分。试编制一个子程序,统计低于60分,60~69分,70~79分,80~89分,90~99分和100分的人数,并输出显示统计结果。
编程提示:
1、成绩分等部分采用分支结构,统计所有成绩则用循环结构完成,显示统计结果采用DOS功能调用。
2、统计学生成绩和显示统计结果两部分内容用子程序结构来完成。
extrn cdispbx:far,ccount:far
data1 segment
msg db 76,69,84,90,73,88,99,63,100,80
data1 ends
code1 segment
assume cs:code1,ds:data1
start: mov ax,data1
mov ds,ax
mov dx,offset msg
mov cx,data1
jcxz exit
call ccount
call cdispbx
mov bh,bl
call cdispbx
mov bh,ch
call cdispbx
mov bh,cl
call cdispbx
mov bh,dh
call cdispbx
mov bh,dl
call cdispbx
exit:mov ah,4ch
int 21h
code1 ends
end start
public ccount
seg1 segment 'code'
ccount proc far
assume cs:seg1
push ax
push si
mov si,dx
xor bh,bh
xor bl,bl
xor ch,ch
xor cl,cl
xor dh,dh
xor dl,dl
mov si,dx
mov cx,10
jcxz exit
again:mov al,[si]
inc si
cmp al,60
jae next1
inc bh
loop again
next1:cmp al,70
jae next2
inc bl
loop again
next2:cmp al,80
jae next3
inc ch
loop again
next3:cmp al,90
jae next4
inc cl
loop again
next4:cmp al,100
je next5
inc dh
loop again
next5:inc dl
loop again
exit: pop si
pop ax
ret
ccount endp
seg1 ends
end
public cdispbx
data1 segment
db 5 dup('0'),0ah,0dh,'$'
data1 ends
seg3 segment 'code'
cdispbx proc far
assume cs:seg3,ds:data1
push ds
push dx
push cx
push ax
push si
mov ax,data1
mov ds,ax
mov si,4
mov al,bh
cbw
mov cx,10d
again:xor dx,dx
idiv cx
add dl,'0'
mov [si],dl
dec si
jge again
xor dx,dx
mov ah,9
int 21h
pop si
pop ax
pop cx
pop dx
pop ds
ret
cdispbx endp
seg3 ends
end
请各位高手们帮小弟看一下这个程序哪里错了。
运行后的结果如下
F:\masm>cmain
00127
00086
00000
00000
65459
65451
谢谢!!!