用8086汇编语言解决如下问题:设有10个学生的成绩分别为46、68、88、87、76、89、99、65、100和80分。试编制程序统计低于60分、60~69分、70~79分、80~89分、90~99分及100分的人数,并存放到S5、S6、S7、S8、S9及S10单元中。
时间: 2023-10-29 07:05:20 浏览: 140
下面是用8086汇编语言编写的解决方案:
```
; 数据段
data segment
scores db 46, 68, 88, 87, 76, 89, 99, 65, 100, 80 ; 成绩数组
count db 0, 0, 0, 0, 0, 0 ; 统计数组
data ends
; 代码段
code segment
assume cs:code, ds:data
start:
mov ax, data
mov ds, ax ; 初始化数据段寄存器
mov cx, 10 ; 循环计数器
mov si, 0 ; 成绩数组索引
loop_start:
cmp byte ptr scores[si], 60 ; 判断是否低于60分
jl below_60
cmp byte ptr scores[si], 70 ; 判断是否在60~69分之间
jl below_70
cmp byte ptr scores[si], 80 ; 判断是否在70~79分之间
jl below_80
cmp byte ptr scores[si], 90 ; 判断是否在80~89分之间
jl below_90
cmp byte ptr scores[si], 100 ; 判断是否在90~99分之间
jl below_100
inc byte ptr count[5] ; 100分
jmp loop_end
below_100:
inc byte ptr count[4] ; 90~99分
jmp loop_end
below_90:
inc byte ptr count[3] ; 80~89分
jmp loop_end
below_80:
inc byte ptr count[2] ; 70~79分
jmp loop_end
below_70:
inc byte ptr count[1] ; 60~69分
jmp loop_end
below_60:
inc byte ptr count[0] ; 低于60分
loop_end:
inc si ; 成绩数组索引加1
loop loop_start
; 将统计结果存储到对应的单元中
mov si, offset count
mov ax, 5
mov cx, 6
store_count:
mov byte ptr [si], count[ax-1]
inc si
loop store_count
; 程序结束
mov ah, 4ch
int 21h
code ends
end start
```
代码中使用一个大小为10的数组存储学生成绩,另外使用一个大小为6的数组存储统计结果。程序通过循环遍历成绩数组,对每个成绩进行判断,并将统计结果存储到对应的单元中。最后,程序将控制权交还给DOS系统。
注意,本程序使用了8086汇编语言的基本语法,如果您不熟悉汇编语言,可能需要更多的学习和练习才能理解和编写。
阅读全文