从键盘输入5个学生的成绩,如果低于60分,则F (Fail),如 果高于或等于90 分则显示 G (good),否则显示 P (Pass),汇编语言
时间: 2024-02-16 19:03:55 浏览: 67
学生成绩管理系统 C++课程设计
4星 · 用户满意度95%
下面是一份使用 MASM 语法的 x86 汇编代码,可以实现你的要求:
```
.model small
.stack 100h
.data
scores db 5 dup(0) ; 用于存储5个学生的成绩
result db 5 dup(0) ; 用于存储每个学生的成绩等级
.code
main proc
mov ax, @data ; 初始化数据段寄存器
mov ds, ax
; 从键盘输入5个学生的成绩
mov cx, 5 ; 用 cx 存储循环次数
mov si, offset scores ; 用 si 存储成绩数组的地址
input_loop:
mov ah, 1 ; 设置 1 号 DOS 中断,用于从键盘读取字符
int 21h ; 调用 DOS 中断
sub al, '0' ; 将字符转换为数字
mov [si], al ; 将数字存入成绩数组中
inc si ; 指向下一个元素
loop input_loop ; 循环输入下一个成绩
; 计算每个学生的成绩等级
mov cx, 5 ; 用 cx 存储循环次数
mov si, offset scores ; 用 si 存储成绩数组的地址
mov di, offset result ; 用 di 存储成绩等级数组的地址
calc_loop:
lodsb ; 从数组中读取一个成绩,存入 al 中
cmp al, 60 ; 比较成绩和 60
jb fail_label ; 如果小于 60,跳转到 fail_label
cmp al, 90 ; 比较成绩和 90
jae good_label ; 如果大于等于 90,跳转到 good_label
jmp pass_label ; 否则跳转到 pass_label
fail_label:
mov al, 'F' ; 设置成绩等级为 'F'
jmp store_label ; 跳转到 store_label
good_label:
mov al, 'G' ; 设置成绩等级为 'G'
jmp store_label ; 跳转到 store_label
pass_label:
mov al, 'P' ; 设置成绩等级为 'P'
jmp store_label ; 跳转到 store_label
store_label:
stosb ; 将 al 中存储的成绩等级存入 di 指向的数组中
loop calc_loop ; 循环处理下一个成绩
; 输出每个学生的成绩和成绩等级
mov cx, 5 ; 用 cx 存储循环次数
mov si, offset scores ; 用 si 存储成绩数组的地址
mov di, offset result ; 用 di 存储成绩等级数组的地址
mov ah, 9 ; 设置 9 号 DOS 中断,用于输出字符串
output_loop:
lodsb ; 从数组中读取一个成绩,存入 al 中
add al, '0' ; 将数字转换为字符
mov dl, al ; 设置 dl 为字符
mov ah, 2 ; 设置 2 号 DOS 中断,用于输出字符
int 21h ; 调用 DOS 中断
mov dl, ' ' ; 输出一个空格
int 21h ; 调用 DOS 中断
lodsb ; 从数组中读取一个成绩等级,存入 al 中
mov dl, al ; 设置 dl 为字符
mov ah, 2 ; 设置 2 号 DOS 中断,用于输出字符
int 21h ; 调用 DOS 中断
mov dl, 0dh ; 输出回车符
int 21h ; 调用 DOS 中断
mov dl, 0ah ; 输出换行符
int 21h ; 调用 DOS 中断
loop output_loop ; 循环输出下一个学生的成绩和成绩等级
; 退出程序
mov ah, 4ch
int 21h
main endp
end main
```
这个程序使用了 LODSB 和 STOSB 指令来从数组中读取和存储成绩和成绩等级,同时使用了循环和条件跳转来判断每个成绩的等级,并输出每个学生的成绩和成绩等级。注意,这个程序是使用 DOS 中断来输出字符和字符串的,因此只能在 DOS 环境下运行。
阅读全文