在当前数据段(DS),偏移地址为DATAB开始的顺序80个单元中,存放着BDI某班30个同学 某门考试成绩。按如下要求编写程序: (1) 编写程序统计≥90 分、80~89 分、70~79 分、60~69 分、<60 分的人数各为多
少,并将结果放在同一数据段、偏移地址为BTRX 开始的顺序单元中。 (2)
试编程序,求该班这门课的平均成绩为多少,并放在该数据段的AVER单元中。 (3) 尝试上机调试运行及验证上述程序。输出并保存结果
DATA SEGMENT
TABLE DB 88,79,72,86,76,83,81,69,94,87,78,61,87,71,70,78,76,75,69,93,62,97,88,80,86,51,73,79,85,78
GRADEA DB 0
GRADEB DB 0
GRADEC DB 0
GRADED DB 0
GRADEE DB 0
AVER DB 0FFH
DATA ENDS
CODE SEGMENT
ASSUME CS: CODE, DS: DATA, ES:DATA
START: MOV AX, DATA
MOV DS, AX
MOV ES, AX
LEA SI, TABLE
MOV DX,0
MOV CX, 30 ;30个成绩,循环30次
AGAIN: MOV AL,[SI]
CMP AL,59
JA GD ;>=则跳转到下一个成绩等级
GE: INC GRADEE ;不跳转则该成绩等级人数加一
JMP NEXT
GD: CMP AL,69
JA GC
INC GRADED
JMP NEXT
GC: CMP AL, 79
JA GB
INC GRADEC
JMP NEXT
GB: CMP AL,89
JA GA
INC GRADEB
JMP NEXT
GA: INC GRADEA
NEXT: ADD SI,1 ;每次SI加一,到下一个成绩的地址
ADD DL,AL ;把所有成绩相加
ADC DH,0 ;进位
LOOP AGAIN ;循环重复,直到CX=0
MOV AX,DX ;除法默认把AX里的数当除数
MOV BL,30 ;除去30得到平均成绩
DIV BL ;无符号除法
MOV AVER,AL ;把商赋值给平均数
EXIT: MOV AX,4C00H
INT 21H
CODE ENDS
END START