8086汇编:在电脑上通过键盘输入10个学生的成绩后,依次在界面上显示:及格人数x个,不及格人数y个。 要求:提示输入10个学生成绩score,每个成绩数字之间空格隔开,键盘送入; 换行输出“10个学生成绩分别为……” 换行显示结果:及格人数x个,不及格人数y;
时间: 2023-12-29 20:02:09 浏览: 88
好的,我会尽力回答你的问题。根据你的要求,我编写了以下的8086汇编代码来完成此任务:
```
.model small
.stack 100h
.data
score db 10 dup(0) ; 存储学生成绩
pass db 0 ; 及格人数
fail db 0 ; 不及格人数
msg1 db 'Enter 10 scores: $'
msg2 db 0ah, '10 scores: $'
msg3 db 0ah, 'Pass: $'
msg4 db 'Fail: $'
newline db 0ah, '$'
.code
mov ax, @data
mov ds, ax
; 输出提示信息
mov ah, 09h
lea dx, msg1
int 21h
; 读取学生成绩
mov cx, 10
lea si, score
read_score:
mov ah, 01h ; 读取一个字符
int 21h
cmp al, 20h ; 判断是否为空格
je skip ; 如果是,则跳过
sub al, 30h ; 将字符转换为数字
mov [si], al ; 存储成绩
inc si
dec cx
jz print_score ; 如果读取完10个成绩,则跳转到输出成绩的代码
jmp read_score ; 继续读取下一个成绩
; 输出学生成绩
print_score:
mov ah, 09h
lea dx, msg2
int 21h
mov cx, 10
lea si, score
print_loop:
mov dl, [si]
add dl, 30h ; 将数字转换为字符
mov ah, 02h ; 输出一个字符
int 21h
mov dl, ' '
int 21h
inc si
loop print_loop
; 统计及格和不及格的人数
mov cx, 10
lea si, score
mov bl, 60 ; 及格分数
pass_loop:
cmp [si], bl
jl fail_count ; 如果成绩小于60分,则跳转到fail_count
inc pass ; 否则,将及格人数加1
jmp next_score ; 然后跳转到next_score
fail_count:
inc fail ; 不及格人数加1
next_score:
inc si
loop pass_loop
; 输出及格和不及格人数
mov ah, 09h
lea dx, newline
int 21h
lea dx, msg3
int 21h
mov dl, pass
add dl, 30h
int 21h
lea dx, newline
int 21h
lea dx, msg4
int 21h
mov dl, fail
add dl, 30h
int 21h
mov ah, 4ch
int 21h
end
```
你可以将以上代码保存为一个 `.ASM` 文件,然后使用 DOSBox 等模拟器来运行。当程序运行时,它会提示你输入 10 个学生成绩,依次输入每个成绩之后,按下回车键即可。程序会输出这 10 个成绩,并统计及格和不及格的人数,最后在界面上显示出来。
阅读全文