微机原理汇编语言,对输入的一些成绩进行分类汇总
发布时间:2024-11-06
发布时间:2024-11-06
(a)所有数字由键盘输入;(b)输入的成绩个数为任意个(小于100);(c)对成绩进行归类并输出显示在屏幕:·显示最高成绩、最低成绩、平均成绩·显示90-100分人数,80-89分人数,70-79分人数,60-69分人数,低于60分人数,·显示无效数字个数(非数字或大于100数字个数)
汇编语言程序
成绩汇总
对输入的一些成绩进行分类汇总。
要求:
(a)所有数字由键盘输入;
(b)输入的成绩个数为任意个(小于100);
(c)对成绩进行归类并输出显示在屏幕:
·显示最高成绩、最低成绩、平均成绩
·显示90-100分人数,80-89分人数,70-79分人数,60-69分人数,低于60分人数,
·显示无效数字个数(非数字或大于100数字个数)
data segment
save DW 100 dup(0) ;输入数据的存放位置
buffer dw 0 ;暂时存放当前输入的数字
n db 1 ; 总共输入的数字个数
highest dw 0
lowest dw 0
average dw 0
0to60 dw 0
60to70 dw 0
70to80 dw 0
80to90 dw 0
90to100 dw 0
wrong dw 0
shuzi_w db 0
shuzi_q db 0
shuzi_b db 0
shuzi_s db 0
shuzi_g db 0 ;将排序好的数字显示出来,需要每一位转换成ASCII码
string db 'input numbers:',0dh,0ah,24h
string1 db 'output: ',0dh,0ah,24h
string2 db 'highest:',0dh,0ah,24h
string3 db 'lowest: ',0dh,0ah,24h
string4 db '0~59: ',0dh,0ah,24h
(a)所有数字由键盘输入;(b)输入的成绩个数为任意个(小于100);(c)对成绩进行归类并输出显示在屏幕:·显示最高成绩、最低成绩、平均成绩·显示90-100分人数,80-89分人数,70-79分人数,60-69分人数,低于60分人数,·显示无效数字个数(非数字或大于100数字个数)
string5 db '60~69: ',0dh,0ah,24h
string6 db '70~79: ',0dh,0ah,24h
string7 db '80~89: ',0dh,0ah,24h
string8 db '90~99: ',0dh,0ah,24h
string9 db 'wrong: ',0dh,0ah,24h
string10 db 'average:',0dh,0ah,24h
kongge db 0dh, 0ah,24h
ends
stack segment
dw 128 dup(0)
ends
code segment
start:
; set segment registers:
xor ax,ax
push ax
mov ax, data
mov ds, ax
mov es, ax
lea dx , string
mov ah, 09h
int 21h ;显示请输入数据
;>>>>>>>>>>>>>>>>>>>>数
入>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
mov di , offset save
mov ax , 0
mov buffer,ax
shurushuzi:
mov ah,01h
int 21h
cmp al,0dh
je stopinput
据的输
(a)所有数字由键盘输入;(b)输入的成绩个数为任意个(小于100);(c)对成绩进行归类并输出显示在屏幕:·显示最高成绩、最低成绩、平均成绩·显示90-100分人数,80-89分人数,70-79分人数,60-69分人数,低于60分人数,·显示无效数字个数(非数字或大于100数字个数)
cmp al,'0'
jb shurukongge
cmp al,'9'
ja shurukongge
;将输入的字符转为对应的数字
sub al,30h ;ascll码转为相应的十进制数
mov ah,0
mov bx,ax ;buffer保存的为前一个数字,ax为当前输入的字符,buffer*10+ax即为输入的十进制数
mov dx,buffer
mov ax,10
mul dx
add ax,bx
mov buffer,ax
mov [di],ax ;将转化好的数字放入储存空间
jmp shurushuzi; 输入大于10 的数字的下一位
;输入了空格,开始为输入下一个数字做准备
shurukongge:
call konggexianshi
add di,2 ;指向下一个储存单元
inc n
mov ax,0
mov buffer,ax ;当前数字存入缓冲区等待处理
jmp shurushuzi
stopinput:
call konggexianshi
;>>>>>>>>>>>>>>>>>>>>数据处理部分>>>>>>>>>>>>>>>>>>>>>>>>>
;比较全部数据,找出最高成绩
mov cl,n
mov ch,0
(a)所有数字由键盘输入;(b)输入的成绩个数为任意个(小于100);(c)对成绩进行归类并输出显示在屏幕:·显示最高成绩、最低成绩、平均成绩·显示90-100分人数,80-89分人数,70-79分人数,60-69分人数,低于60分人数,·显示无效数字个数(非数字或大于100数字个数)
mov bx,offset save
mov ax,[bx]
lab1:
cmp ax,[bx]
ja lab2
mov ax,[bx]
lab2:
inc bx
inc bx
loop lab1
mov highest,ax
;比较全部数据,找出最低成绩
mov cl,n
xor ch,ch
mov bx,offset save
mov ax,[bx]
lab3:cmp ax,[bx]
jb lab4
mov ax,[bx]
lab4:
inc bx
inc bx
loop lab3
mov lowest,ax
;求平均值
mov cl,n
xor ch,ch
mov bx,offset save
mov ax,0
lab5:
add ax,[bx]
adc AX,0
inc bx
inc bx
loop lab5
mov bl,n
(a)所有数字由键盘输入;(b)输入的成绩个数为任意个(小于100);(c)对成绩进行归类并输出显示在屏幕:·显示最高成绩、最低成绩、平均成绩·显示90-100分人数,80-89分人数,70-79分人数,60-69分人数,低于60分人数,·显示无效数字个数(非数字或大于100数字个数)
xor ah,ah
mov average,ax
;各段人数统计
mov cl,n
mov bx,offset save
L12:
cmp [bx],0
jb jw6
cmp [bx],60
jb jw1
cmp [bx],70
jb jw2
cmp [bx],80
jb jw3
cmp [bx],90
jb jw4
cmp [bx],100
jb jw5
ja jw6
jw1: ;xiaoyu60
add 0to60,1
jmp jw7
jw2: ;
add 60to70,1
jmp jw7
jw3: ;
add 70to80,1
jmp jw7
jw4: ;
add 80to90,1
jmp jw7
jw5: ;
add 90to100,1
jmp jw7
jw6: ;
add wrong,1
jmp jw7
jw7:
inc bx
(a)所有数字由键盘输入;(b)输入的成绩个数为任意个(小于100);(c)对成绩进行归类并输出显示在屏幕:·显示最高成绩、最低成绩、平均成绩·显示90-100分人数,80-89分人数,70-79分人数,60-69分人数,低于60分人数,·显示无效数字个数(非数字或大于100数字个数)
loop L12
;xianshichengxu
push dx
push ax
lea dx,string1
mov ah ,09h
int 21h
lea dx,string2
mov ah ,09h
int 21h
pop ax
pop dx
mov ax,highest
mov dx,0
call shujuxianshi
call konggexianshi
push dx
push ax
lea dx,string3
mov ah ,09h
int 21h
pop ax
pop dx
mov ax,lowest
mov dx,0
call shujuxianshi
call konggexianshi
push dx
push ax
lea dx,string10
mov ah ,09h
int 21h
pop ax
pop dx
mov ax,average
mov dx,0
call shujuxianshi
call konggexianshi
push dx
(a)所有数字由键盘输入;(b)输入的成绩个数为任意个(小于100);(c)对成绩进行归类并输出显示在屏幕:·显示最高成绩、最低成绩、平均成绩·显示90-100分人数,80-89分人数,70-79分人数,60-69分人数,低于60分人数,·显示无效数字个数(非数字或大于100数字个数)
lea dx,string4
mov ah ,09h
int 21h
pop ax
pop dx
mov ax,0to60
mov dx,0
call shujuxianshi
call konggexianshi
push dx
push ax
lea dx,string5
mov ah ,09h
int 21h
pop ax
pop dx
mov ax,60to70
mov dx,0
call shujuxianshi
call konggexianshi
push dx
push ax
lea dx,string6
mov ah ,09h
int 21h
pop ax
pop dx
mov ax,70to80
mov dx,0
call shujuxianshi
call konggexianshi
push dx
push ax
lea dx,string7
mov ah ,09h
int 21h
pop ax
pop dx
mov ax,80to90
mov dx,0
call shujuxianshi
call konggexianshi
push dx
(a)所有数字由键盘输入;(b)输入的成绩个数为任意个(小于100);(c)对成绩进行归类并输出显示在屏幕:·显示最高成绩、最低成绩、平均成绩·显示90-100分人数,80-89分人数,70-79分人数,60-69分人数,低于60分人数,·显示无效数字个数(非数字或大于100数字个数)
lea dx,string8
mov ah ,09h
int 21h
pop ax
pop dx
mov ax,90to100
mov dx,0
call shujuxianshi
call konggexianshi
push dx
push ax
lea dx,string9
mov ah ,09h
int 21h
pop ax
pop dx
mov ax,wrong
mov dx,0
call shujuxianshi
call konggexianshi
;;;;;;;;;;;;;;;;;;;;;;;;;;
konggexianshi proc near
push ax
push dx
mov ah,09
mov dx ,offset kongge
int 21h
pop dx
pop ax
ret
konggexianshi endp
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
xianshidangeshuzi proc near
push dx
push ax
mov dx,0
mov dl,al
xor ax,ax
(a)所有数字由键盘输入;(b)输入的成绩个数为任意个(小于100);(c)对成绩进行归类并输出显示在屏幕:·显示最高成绩、最低成绩、平均成绩·显示90-100分人数,80-89分人数,70-79分人数,60-69分人数,低于60分人数,·显示无效数字个数(非数字或大于100数字个数)
mov ah,02h
int 21h
pop ax
pop dx
ret
xianshidangeshuzi endp
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
shujuxianshi proc near
push cx
push ds
mov cx,10000
div cx
push dx ;保存余数
mov shuzi_w,al
cmp shuzi_w,0
je j1
add al,30h
call xianshidangeshuzi
j1:
pop ax;取余数
mov dx,0
mov cx,1000
div cx
push dx;保存余数
mov shuzi_q,al
add shuzi_w,al
cmp shuzi_w,0
je j2
add al,30h
call xianshidangeshuzi
j2:
(a)所有数字由键盘输入;(b)输入的成绩个数为任意个(小于100);(c)对成绩进行归类并输出显示在屏幕:·显示最高成绩、最低成绩、平均成绩·显示90-100分人数,80-89分人数,70-79分人数,60-69分人数,低于60分人数,·显示无效数字个数(非数字或大于100数字个数)
pop ax;取余数
mov dx,0
mov cx,100
div cx
push dx;保存余数
mov shuzi_b,al
add shuzi_w,al
cmp shuzi_w,0
je j3
add al,30h
call xianshidangeshuzi
j3:
pop ax;取余数
mov dx,0
mov cx,10
div cx
push dx;保存余数
mov shuzi_s,al
add shuzi_w,al
cmp shuzi_w,0
je j4
add al,30h
call xianshidangeshuzi
j4:
pop dx
add dl,30h
mov al,dl
call xianshidangeshuzi
xor ax,ax ;chushuhua mov shuzi_w,al
mov shuzi_q,al
mov shuzi_b,al
mov shuzi_g,al
(a)所有数字由键盘输入;(b)输入的成绩个数为任意个(小于100);(c)对成绩进行归类并输出显示在屏幕:·显示最高成绩、最低成绩、平均成绩·显示90-100分人数,80-89分人数,70-79分人数,60-69分人数,低于60分人数,·显示无效数字个数(非数字或大于100数字个数)
pop ds
pop cx
ret
shujuxianshi endp
mov ax, 4c00h ; exit to operating system. int 21h
ends
end start ; set entry point and stop the assembler.