在以 GRADE 为首地址的数组中存放着某班某门课 20 个学生的成绩,编写 三个子程序分别实现:(1)统计该门课的总分(SUM);(2)求该门课的平均分 (AVESCORE);(3)统计不及格(成绩<60)(NUM1)和优秀学生人数(成绩>=90)(NUM2)汇编语言写
时间: 2024-02-02 14:05:35 浏览: 121
学生成绩统计程序,汇编语言编写
5星 · 资源好评率100%
我们可以使用汇编语言实现这三个子程序,以下是代码:
```
DATA SEGMENT
GRADE DB 60, 70, 80, 90, 65, 75, 85, 95, 62, 72, 82, 92, 68, 78, 88, 98, 58, 68, 78, 88
DATA ENDS
CODE SEGMENT
ASSUME CS:CODE, DS:DATA
SUM PROC
MOV AX, 0
MOV SI, OFFSET GRADE
MOV CX, 20
ADD_LOOP:
ADD AL, [SI]
INC SI
LOOP ADD_LOOP
RET
SUM ENDP
AVESCORE PROC
CALL SUM
MOV BL, 20
DIV BL
RET
AVESCORE ENDP
NUM1 PROC
MOV AX, 0
MOV SI, OFFSET GRADE
MOV CX, 20
NUM1_LOOP:
CMP [SI], 60
JL NUM1_COUNT
INC SI
LOOP NUM1_LOOP
RET
NUM1 ENDP
NUM2 PROC
MOV AX, 0
MOV SI, OFFSET GRADE
MOV CX, 20
NUM2_LOOP:
CMP [SI], 90
JGE NUM2_COUNT
INC SI
LOOP NUM2_LOOP
RET
NUM2 ENDP
CODE ENDS
END
```
以上代码使用了四个子程序:`SUM`用于计算总分,`AVESCORE`用于计算平均分,`NUM1`用于统计不及格人数,`NUM2`用于统计优秀学生人数。
其中,`SUM`程序使用`AL`寄存器来累加成绩,最后返回结果。`AVESCORE`程序调用`SUM`程序来计算总分,再除以总人数(20)来得到平均分。`NUM1`程序使用`AX`寄存器来统计不及格人数,如果某个成绩小于60,就将计数器加一。`NUM2`程序使用`AX`寄存器来统计优秀学生人数,如果某个成绩大于等于90,就将计数器加一。
需要注意的是,以上代码中使用了`DATA`和`CODE`两个段。`DATA`段用于存储成绩数组`GRADE`,而`CODE`段用于存放程序代码。在程序开始处,我们使用`ASSUME`语句来指定`CS`和`DS`寄存器的默认段寄存器值。最后,我们使用`END`语句来结束程序。
阅读全文