8086汇编:在电脑上通过键盘输入10个学生的成绩后,依次在界面上显示:及格人数x个,不及格人数y个。 要求:提示输入10个学生成绩score,每个成绩数字之间空格隔开,键盘送入; 换行输出“10个学生成绩分别为……” 换行显示结果:及格人数x个,不及格人数y;
时间: 2023-12-29 11:02:09 浏览: 95
以下是实现该功能的8086汇编代码:
```
.model small
.stack 100h
.data
score db 10 dup(?) ; 存储10个学生成绩
msg1 db '10个学生成绩分别为:$'
msg2 db '及格人数为$x个,不及格人数为$y个$'
.code
main proc
mov ax, @data ; 初始化数据段寄存器
mov ds, ax
; 输入10个学生成绩
mov si, offset score
mov cx, 10
input:
mov ah, 01h ; 从键盘读入字符
int 21h
cmp al, 20h ; 判断是否为空格
je skip_input
sub al, 30h ; 将字符转换为数值
mov [si], al
inc si
skip_input:
loop input
; 显示10个学生成绩
mov ah, 09h
lea dx, msg1
int 21h
mov si, offset score
mov cx, 10
display:
add [si], 30h ; 将数值转换为字符
mov dl, [si]
mov ah, 02h ; 显示字符
int 21h
mov dl, ',' ; 显示逗号分隔符
int 21h
inc si
loop display
mov dl, 0dh ; 回车
int 21h
mov dl, 0ah ; 换行
int 21h
; 统计及格和不及格人数
mov si, offset score
mov cx, 10
mov bx, 0 ; bx存储及格人数
mov ax, 0 ; ax存储不及格人数
count:
cmp [si], 60h ; 判断是否及格
jge pass
inc ax
jmp next
pass:
inc bx
next:
inc si
loop count
; 显示统计结果
mov ah, 09h
lea dx, msg2
int 21h
mov ah, 02h
mov dl, ' '
int 21h
mov bl, bh ; 将bx的高字节存入bl
mov bh, 0 ; 将bx的低字节清零
mov cx, 10
display_pass:
mov al, bl
div cx
add al, 30h
mov dl, al
mov ah, 02h
int 21h
mov dl, ',' ; 显示逗号分隔符
int 21h
loop display_pass
mov dl, 0dh
int 21h
mov dl, 0ah
int 21h
mov ah, 02h
mov dl, ' '
int 21h
mov ax, 0
mov al, bh
add al, 30h
mov dl, al
int 21h
mov dl, 0dh
int 21h
mov dl, 0ah
int 21h
mov ah, 4ch ; 退出程序
int 21h
main endp
end main
```
注意:在DOSBox等模拟器中运行时,可能需要先按Alt+Enter将窗口切换到全屏模式,以便在界面上显示所有结果。
阅读全文