8086从键盘输入10个学生的成绩,试编制一个程序统计60~69分、70~79分、80~89分、90~99分及100分的人数,分别存放到S5(不及格)、S6、S7、S8、S9及S10单元中
时间: 2023-10-09 15:08:29 浏览: 250
以下是一种基于汇编语言的程序,可以实现从键盘输入10个学生的成绩,并统计各个分数段的人数,最后将结果存储到S5~S10单元中。
```
assume cs:code, ds:data
data segment
scores db 10 dup(0) ; 存放10个学生的成绩
counts db 6 dup(0) ; 存放各个分数段的人数
data ends
code segment
start:
mov ax, data
mov ds, ax
; 从键盘输入10个学生的成绩到scores数组中
mov si, offset scores
mov cx, 10
input_loop:
mov ah, 01h ; 从键盘读入一个字符
int 21h
sub al, '0' ; 将字符转换为数字
mov [si], al ; 存入scores数组中
inc si ; si指向下一个元素
loop input_loop
; 统计各个分数段的人数
mov si, offset scores
mov cx, 10
count_loop:
mov al, [si]
cmp al, 60 ; 如果成绩小于60,存入S5单元
jl count_s5
cmp al, 70 ; 如果成绩小于70,存入S6单元
jl count_s6
cmp al, 80 ; 如果成绩小于80,存入S7单元
jl count_s7
cmp al, 90 ; 如果成绩小于90,存入S8单元
jl count_s8
cmp al, 100 ; 如果成绩等于100,存入S10单元
je count_s10
; 否则存入S9单元
count_s9:
inc byte ptr counts+4
jmp count_end
count_s10:
inc byte ptr counts+5
jmp count_end
count_s8:
inc byte ptr counts+3
jmp count_end
count_s7:
inc byte ptr counts+2
jmp count_end
count_s6:
inc byte ptr counts+1
jmp count_end
count_s5:
inc byte ptr counts
count_end:
inc si ; si指向下一个元素
loop count_loop
; 输出各个分数段的人数
mov si, offset counts
mov cx, 6
output_loop:
mov al, [si]
call print_num ; 调用打印整数的子程序
mov dl, ',' ; 输出逗号分隔符
mov ah, 02h
int 21h
add si, 1 ; si指向下一个元素
loop output_loop
mov ah, 4ch ; 程序结束
int 21h
print_num proc near
push ax
push bx
push cx
push dx
push si
mov bx, 10 ; 进制数为10
mov cx, 0 ; cx用于记录数字位数
mov si, sp ; si指向存放数字的栈顶
cmp ax, 0 ; 如果ax为0,直接输出'0'
jne num_to_str
mov dl, '0'
mov ah, 02h
int 21h
jmp print_num_end
num_to_str:
cmp ax, 0 ; 如果ax小于0,输出负号并取相反数
jge positive_num
mov dl, '-'
mov ah, 02h
int 21h
neg ax
positive_num:
mov bx, 10 ; 进制数为10
num_to_str_loop:
xor dx, dx ; 清除dx
div bx ; ax = ax / bx, dx = ax % bx
push dx ; 将余数存入栈中
inc cx ; 增加数字位数
cmp ax, 0 ; 如果ax不为0,继续循环
jne num_to_str_loop
output_num:
pop dx ; 从栈中取出余数
add dl, '0' ; 余数转换为字符
mov ah, 02h ; 输出字符
int 21h
loop output_num
print_num_end:
pop si
pop dx
pop cx
pop bx
pop ax
ret
print_num endp
code ends
end start
```
注意,以上代码还需要根据实际情况进行调整,例如,如果成绩不是单个数字,而是字符或字符串,需要进行转换。
阅读全文