使用8086汇编,设计一个毕业生答辩成绩评分系统;通过输入评委的成绩然后统计出答辩学生的答辩成绩,最后显示毕业生的答辩成绩; 基本要求: 6名评委,每个评委给分范围为0~100,由键盘输入;6名评委给分中,平均分为毕业生答辩成绩(精确到小数点后两位,不考虑四舍五入);将最后得分在光标位置处显示出来;
时间: 2024-02-24 08:00:40 浏览: 126
好的,以下是一个简单的8086汇编程序,可以实现你的需求。需要注意的是,该程序需要在DOS环境下运行。
```
.model small
.stack 100h
.data
score db 6 dup(0) ; 评委的成绩
sum dw 0 ; 成绩总和
avg dw 0 ; 平均成绩
result db 10 dup(0) ; 存储最终成绩
.code
main proc
mov ax, @data
mov ds, ax
; 循环输入每个评委的成绩,并累加总和
mov cx, 6
mov bx, 0
input_score:
mov ah, 1
int 21h ; 读取键盘输入的字符
cmp al, 0dh ; 判断是否为回车键
je calc_score ; 如果是回车键,跳转到计算平均成绩的代码段
sub al, '0' ; 将字符转换成数字
mov score[bx], al
inc bx
jmp input_score
; 计算平均成绩
calc_score:
mov cx, 6
mov bx, 0
mov sum, 0
calc_avg:
mov al, score[bx]
add sum, ax ; 累加总和
inc bx
loop calc_avg ; 循环6次
mov ax, sum
mov bx, 6
div bx ; 求平均数
mov avg, ax
mov ax, sum
and ax, 00ffh ; 取低8位,即小数点后两位
mov bl, 10 ; 将余数乘以10
mul bl
mov result, al ; 将乘积存储在result数组的第一个位置
mov bl, 100 ; 将余数再次乘以10
div bl
mov result+1, al ; 将商存储在result数组的第二个位置
; 将最终成绩显示在屏幕上
mov ah, 9
lea dx, result ; 将result数组的地址传递给dx
int 21h
mov ah, 4ch
int 21h
main endp
end main
```
该程序的基本思路是:首先,使用循环输入每个评委的分数,并将分数存储在数组score中;然后,计算出所有分数的总和,并求出平均分数;最后,将平均分数的整数部分和小数部分存储在result数组中,并将其显示在屏幕上。需要注意的是,由于8086处理器没有浮点数运算指令,因此在计算小数部分时,需要手动进行乘法和除法运算。
阅读全文