文档介绍:学院:生物科学与工程学院
系别:生物医学工程
学号:
学生姓名:
时间:2008-12-07
指导老师:刘惠芳
4-13 若已定义以下数据段:
Data segment
Buf db 100 dup(?)
Good db ?
Pass db ?
Bad db ?
Avrg db ?
Data ends
若已知将某年级100学生电路分析的成绩以压缩bcd数形式存入变量buf中,试编写程序段统计成绩高于85、低于60分和界于60分和85分的学生人数,仍以压缩bcd数形式存入good、bad和pass变量中(假定任一档的人数都不达到100人)。并计算全年级平均成绩,也以压缩bcd形式存入变量avrg中(假定平均成绩低于100分,且舍去小数点以后的数)。
流程图如下所示:
取数
与85H比较
比85H大?
与60H比较
比60H大?
GOOD计数加1
PASS计数加1
BAD计数加1
CX=0 ?
求AVRG
加到总成绩
结束
开始
是
是
是
否
否
否
程序如下:
data segment ;定义数据段
buf db 100 dup(43h,44h,76h,87h,90h,43h,53h,88h,87h,75h) ; 分配空间与初始化
good db ?
pass db ?
bad db ?
avrg db ?
message1 db 'the nuber of good=$'
message2 db 'the nuber of pass=$'
message3 db 'the nuber of bad=$'
message4 db 'the nuber of avrg=$'
count equ 100
data ends
code segment
assume cs:code,ds:data
start:mov ax,data
mov ds,ax
xor ax,ax
xor bx,bx
xor si,si
xor di,di
mov cx,count ;设置循环次数
mov good,0
mov pass,0
mov bad,0
lea di,buf ;指针指向变量地址
lp: mov ah,[di] ; 取数
cmp ah,85h ;若大于85转向you
ja you
cmp ah,60h ; 若小于85大于60转向jige
ja jige
cha: mov al,bad ;若小于60则运行cha
inc al
daa
mov bad,al
jmp total
you: mov al,good ;计数
inc al
daa
mov good,al
jmp total ;转向统计
jige: mov al,pass ;计数
inc al
daa
mov pass,al
jmp total ;转向统计
total:mov al,bl ;总成绩付给bx
add al,ah ;其中低位付给bl,高位付给bh
daa
mov bl,al
mov al,bh
adc al,0
daa
mov bh,al
inc di ;修改指针
loop lp ; 未完继续
mov avrg,bh ; 由于不计小数点后,故总成绩除100后所得整数部分即bh
xor dx,dx
xor cx,cx
mov ah,9 ;输出显示good语句串指令
mov dx,offset message1
int 21h
mov al,good ; good低4位转化为asII码输出显示
mov cl,4
shr al,cl
or al,30h
mov dl,al
mov ah,2
int 21h
mov al,good ;good高4位转化为asII码输出显示
and al,0fh
or al,30h
mov dl,al
mov ah,2
int 21h
mov dl,13 ;显示换行
int 21H
mov dl,10
int 21H
mov ah,9
mov dx,offset message2
int 21h
mov al,pass
mov cl,4
shr al,cl
or al,30h
mov dl,al
mov ah,2
int 21h
mov al,pass
and al,0fh
or al,30