用汇编语言写一个简易成绩分析系统。按优(>=90),良(80-89),中(70-79),及格(60-69),“40-59”, ”40以下”,几个分数段统计。屏幕提示输入每个分数段的人数,然后用柱状图的形式画出每个分数段人数所占百分比,并在相应的柱顶端显示百分比数字、底端显示相应的分数段。
时间: 2024-03-10 13:48:43 浏览: 26
好的,以下是一个用汇编语言编写的简易成绩分析系统,实现了您的要求。请注意,由于汇编语言的语法和操作码可能有所不同,您需要根据自己的汇编语言版本进行适当的修改和调整。
```
; 定义分数段数组
score_array db 0, 0, 0, 0, 0, 0
section .data
prompt db "请输入优(>=90)的人数:$"
prompt1 db "请输入良(80-89)的人数:$"
prompt2 db "请输入中(70-79)的人数:$"
prompt3 db "请输入及格(60-69)的人数:$"
prompt4 db "请输入 40-59 的人数:$"
prompt5 db "请输入 40 以下的人数:$"
percent db "0%", 0
section .text
global _start
_start:
mov ah, 09h ; 显示提示信息
mov dx, prompt
int 21h
mov ah, 01h ; 读取用户输入
int 21h
sub al, '0' ; 将字符转换为数字
mov [score_array + 0], al ; 存储到分数段数组
mov ah, 09h ; 显示提示信息
mov dx, prompt1
int 21h
mov ah, 01h ; 读取用户输入
int 21h
sub al, '0' ; 将字符转换为数字
mov [score_array + 1], al ; 存储到分数段数组
mov ah, 09h ; 显示提示信息
mov dx, prompt2
int 21h
mov ah, 01h ; 读取用户输入
int 21h
sub al, '0' ; 将字符转换为数字
mov [score_array + 2], al ; 存储到分数段数组
mov ah, 09h ; 显示提示信息
mov dx, prompt3
int 21h
mov ah, 01h ; 读取用户输入
int 21h
sub al, '0' ; 将字符转换为数字
mov [score_array + 3], al ; 存储到分数段数组
mov ah, 09h ; 显示提示信息
mov dx, prompt4
int 21h
mov ah, 01h ; 读取用户输入
int 21h
sub al, '0' ; 将字符转换为数字
mov [score_array + 4], al ; 存储到分数段数组
mov ah, 09h ; 显示提示信息
mov dx, prompt5
int 21h
mov ah, 01h ; 读取用户输入
int 21h
sub al, '0' ; 将字符转换为数字
mov [score_array + 5], al ; 存储到分数段数组
; 计算总人数
mov bl, 0
mov cl, 6
.loop1:
add bl, [score_array + cl - 1]
dec cl
jnz .loop1
; 计算每个分数段的百分比,并绘制柱状图
mov cx, 6
.loop2:
mov al, [score_array + cx - 1]
mul 100
div bl
mov ah, 0ch ; 设置颜色
mov dx, ax
mov al, '*'
mov bh, 0
mov cx, ax ; 绘制柱子
mov dl, cx
.loop3:
int 10h
dec dl
jnz .loop3
mov al, '0' + [score_array + cx - 1] ; 在底部显示分数段
mov ah, 0eh
mov bh, 0
mov bl, 0x07
mov cx, 1
int 10h
mov al, ' '
mov cx, 4
int 10h
mov dx, percent ; 在柱子顶部显示百分比
mov ah, 09h
mov bh, 0
int 21h
dec cx
cmp cx, 0
jnz .loop2
; 显示结果
mov ah, 4ch
xor al, al
int 21h
```