汇编语言
这样的程序,我做过多次,这个比较简单。因为“RECORD”是汇编语言关键字,不能用作变量名,所以,用“RECORDS”代替了,请理解。
; 本程序通过编译,运行正确
Code Segment
Assume CS:Code,DS:Code
; -----------------------------------------
; 功能:统计各分数段成绩
; 入口:SI=成绩首地址,cx=成绩数目,dl=用于除10(除数)
; 出口:成绩为60-69分,70-79分,80-89分,90-99分及100分的人数,分别存放到G6,G7,G8,G9和G10单元中。
Staticing Proc Near
lodsb ; 提取成绩
div dl ; 除10
sub al,6 ; 减6,分数段计数地址偏移量
cbw
push ax
pop bx
inc G6[bx] ; 计数增1
loop Staticing ; 循环,统计下一个成绩
ret
Staticing EndP
; -----------------------------------------
RECORDS db 66,69,84,82,73,88,99,63,100,80,73,84,80,100,90,73,93,60,63,72,88
db 88,78,99,100,89,65,61,74,84,79,92,60,61,62,62,66,82,79,71,62,63
db 99,98,65,71,82,93,96,81,75,86,97,61,72,83,94,91,89,87,76,65,100
db 88,78,99,100,89,65,61,74,84,79,92,60,61,62,62,66,82,79,71,62,63
db 66,69,84,82,73,88,99,63,100,80,73,84,80,100,90,79 ; 成绩单
Elements equ ($-RECORDS)/Type RECORDS ;元素个数
G6 db 0 ;60-69分计数
G7 db 0 ;70-79分计数
G8 db 0 ;80-89分计数
G9 db 0 ;80-89分计数
G10 db 0 ; 100分计数
Start: push cs
pop ds ;使数据段与代码段同段
cld
lea si,RECORDS ; 成绩首地址
mov cx,Elements ;成绩数目
mov dl,10 ; 用于除10
call Staticing ;统计各分数段成绩
Exit_Proc: mov ah,4ch ;结束程序
int 21h
Code ENDS
END Start ;编译到此结束