汇编语言

这样的程序,我做过多次,这个比较简单。因为“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 ;编译到此结束