键盘3个学生的成绩,如果低于60分,则F (Fail),如 果高于或等于90 分则显示 G (good),否则显示 P (Pass),汇编语言
时间: 2023-09-08 18:14:52 浏览: 93
下面是一份使用 MASM 语法的 x86 汇编代码,可以实现你的要求:
```
.model small
.stack 100h
.data
scores db 80, 45, 95 ; 学生 A、B、C 的成绩
n db 3 ; 学生数量
result db 3 dup(0) ; 用于存储每个学生的成绩等级
.code
main proc
mov ax, @data ; 初始化数据段寄存器
mov ds, ax
mov cx, n ; 用 cx 存储循环次数
mov si, offset scores ; 用 si 存储成绩数组的地址
mov di, offset result ; 用 di 存储成绩等级数组的地址
loop_start:
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 loop_start ; 循环处理下一个成绩
; 输出每个学生的成绩等级
mov cx, n ; 用 cx 存储循环次数
mov si, offset result ; 用 si 存储成绩等级数组的地址
mov ah, 9 ; 设置 9 号 DOS 中断,用于输出字符串
print_loop:
lodsb ; 从数组中读取一个成绩等级,存入 al 中
mov dx, offset al ; 设置 dx 为 al 的地址,用于输出字符串
int 21h ; 调用 DOS 中断
loop print_loop ; 循环输出下一个成绩等级
; 退出程序
mov ah, 4ch
int 21h
main endp
end main
```
这个程序使用了 LODSB 和 STOSB 指令来从数组中读取和存储成绩和成绩等级,同时使用了循环和条件跳转来判断每个成绩的等级,并输出每个学生的成绩等级。注意,这个程序是使用 DOS 中断来输出字符串的,因此只能在 DOS 环境下运行。
阅读全文