请用汇编语言编写以下程序,并且能够直接在dosbox中运行 电脑上通过键盘输入10个学生的成绩后,依次在界面上显示:及格人数x个,不及格人数y个。要求:提示输入10个学生成绩score,每个成绩数字之间空格隔开,键盘送入; 换行输出“10个学生成绩分别为……” 换行显示结果:及格人数x个,不及格人数y;
时间: 2024-03-14 17:45:35 浏览: 63
汇编 在数据段定义 10 个学生成绩。统计不及格、及格、中等,良好,优秀,满分的学生人数。统计结果分别存于自己定义各内存单元。
很抱歉,我之前的回答中出现了重复的部分。以下是修改后的程序,它可以实现您所需的功能:
```
.model small
.stack 100h
.data
score db 10 dup(0)
pass_cnt dw 0
fail_cnt dw 0
prompt db '请输入10个学生成绩(用空格隔开):$'
result db 0dh, 0ah, '10个学生成绩分别为:$'
pass_str db '及格人数', 9, 'x个$'
fail_str db '不及格人数', 9, 'y个$'
.code
main proc
mov ax, @data
mov ds, ax
; prompt for scores
mov ah, 09h
lea dx, prompt
int 21h
; read in scores
mov bl, 10
lea si, score
read_score:
mov ah, 01h
int 21h
cmp al, 20h ; check if it's a space
je space_encountered
sub al, 30h ; convert to number
mov [si], al ; store the score
inc si
dec bl
jnz read_score
jmp scores_read
; space encountered between scores
space_encountered:
sub al, 30h ; convert to number
mov [si], al ; store the score
inc si
dec bl
jnz read_score
scores_read:
; output scores
lea dx, result
mov ah, 09h
int 21h
lea si, score
mov bl, 10
output_score:
mov al, [si]
add al, 30h
mov ah, 02h
int 21h
mov al, ' '
mov ah, 02h
int 21h
inc si
dec bl
jnz output_score
; count passes and fails
lea si, score
mov bl, 10
count_scores:
mov al, [si]
cmp al, 60h ; check if it's a pass
jge is_pass
inc fail_cnt
jmp next_score
is_pass:
inc pass_cnt
next_score:
inc si
dec bl
jnz count_scores
; output pass count
lea dx, pass_str
mov ah, 09h
int 21h
mov ax, pass_cnt
add ax, 30h
mov dl, al
mov ah, 02h
int 21h
; output fail count
lea dx, fail_str
mov ah, 09h
int 21h
mov ax, fail_cnt
add ax, 30h
mov dl, al
mov ah, 02h
int 21h
mov ah, 4ch
int 21h
main endp
end main
```
这段程序与之前的程序非常相似,只是输出内容稍有不同。程序首先提示用户输入10个学生成绩,然后读取用户输入的成绩,将其保存在内存中,并使用循环语句遍历这10个成绩,计算及格人数和不及格人数。最后,程序输出计算结果,包括10个学生成绩分别为…、及格人数x个和不及格人数y个。
同样需要注意的是,这段代码可能仍然不完美,具体取决于您的应用场景和需求。在实际应用中,您需要根据实际情况进行修改和优化。
阅读全文