汇编语言成绩统计8086
时间: 2024-04-08 16:25:03 浏览: 14
汇编语言可以用于实现成绩统计系统,下面是一个简单的8086汇编语言程序,可以实现成绩的录入、排序和统计平均分的功能:
```assembly
.model small
.stack 100h
.data
name db "Tom", "$"
class db "Class 1", "$"
id db "001", "$"
score db 0
count db 0
sum dw 0
avg dw 0
scores db 10 dup(0)
.code
main proc
mov ax, @data
mov ds, ax
; 录入成绩
mov ah, 01h
mov cx, 10
mov di, 0
mov bl, 0
input_score:
int 21h
cmp al, 0dh ; 判断是否回车
je sort_score
cmp al, '0'
jb input_score
cmp al, '9'
ja input_score
mov ah, 0
mov al, scores[di]
sub al, '0'
mov bl, 10
mul bl
add al, scores[di+1]
sub al, '0'*2
mov bl, 10
mul bl
add al, scores[di+2]
sub al, '0'*3
mov scores[di], al
inc di
cmp di, 30
jne input_score
; 排序
sort_score:
mov cx, 10
mov di, 0
sort_loop:
mov al, scores[di]
cmp al, scores[di+1]
jbe next
mov ah, scores[di]
mov scores[di], scores[di+1]
mov scores[di+1], ah
mov di, -1
next:
inc di
loop sort_loop
; 统计平均分
mov cx, 10
mov di, 0
mov sum, 0
mov count, 0
calc_avg:
mov al, scores[di]
add sum, ax
inc count
add di, 3
loop calc_avg
mov ax, sum
div count
mov avg, ax
; 显示结果
mov ah, 09h
lea dx, name
int 21h
lea dx, class
int 21h
lea dx, id
int 21h
mov ah, 02h
mov dl, ' '
int 21h
mov cx, 10
mov di, 0
print_score:
mov al, scores[di]
add al, '0'
mov ah, 02h
int 21h
mov dl, '.'
int 21h
mov al, scores[di+1]
add al, '0'
mov ah, 02h
int 21h
mov al, scores[di+2]
add al, '0'
mov ah, 02h
int 21h
mov ah, 02h
mov dl, ' '
int 21h
add di, 3
loop print_score
mov ah, 02h
mov dl, 0dh
int 21h
mov dl, 0ah
int 21h
mov ah, 09h
lea dx, avg_msg
int 21h
mov ax, avg
call print_num
mov ah, 02h
mov dl, 0dh
int 21h
mov dl, 0ah
int 21h
mov ah, 4ch
int 21h
main endp
print_num proc near
push ax
push bx
push cx
push dx
mov bx, 10
xor cx, cx
cmp ax, 0
jnz print_num_loop
mov dl, '0'
mov ah, 02h
int 21h
jmp print_num_end
print_num_loop:
xor dx, dx
div bx
add dl, '0'
push dx
inc cx
cmp ax, 0
jnz print_num_loop
print_num_print:
pop dx
mov ah, 02h
int 21h
loop print_num_print
print_num_end:
pop dx
pop cx
pop bx
pop ax
ret
print_num endp
avg_msg db "Average score: ", "$"
end main
```
该程序使用了8086汇编语言,实现了成绩的录入、排序和统计平均分的功能。具体实现过程如下:
1. 首先定义了一些数据,包括学生的姓名、班级、学号、成绩等信息,以及用于存储成绩的数组和统计平均分的变量。
2. 然后进入主程序,将数据段的地址赋给DS寄存器。
3. 接着使用INT 21h中断实现成绩的录入,将输入的字符转换为数字,并存储到数组中。
4. 使用冒泡排序算法对成绩进行排序。
5. 统计平均分,将所有成绩相加并除以总人数。
6. 最后使用INT 21h中断将结果输出。