【汇编】学生成绩之输入、排名、输出

汇编语言学生成绩管理系统
该博客介绍了使用汇编语言实现学生成绩的输入、排名及输出功能。程序涉及ASCII码、BCD码和二进制之间的转换,并通过DOS调用进行键盘输入和屏幕显示。最终结果显示成绩,由于ASCII码特性,结果中出现冒号。

先看主程序

data segment
grade dw 10 dup(?)  ;十个人的成绩
rank db 10 dup(?)   ;存放十个人的名次
;提示信息
string db 'plaease input grades,separated by commas:',0dh,0ah,'$'
data ends

stack segment
      dw 50 dup(?)
stack ends

code segment
assume ds:data,cs:code,ss:stack

main proc far
start:
mov ax,data
mov ds,ax

lea dx,string    ;提示信息
mov ah,09h
int 21h

call inputGrade  ;输入成绩 
call outGrade    ;输出成绩
call convert     ;转化成二进制
call rankGrade   ;排名
call outRank     ;输出排名 

mov ax,4c00h
int 21h
main endp

从上面可以看到主要功能为

剩下程序有点长,因为涉及到ASCII码-BCD码-二进制之间的转换,还有DOS调用来完成键盘的输入与输出显示。

如下:

;输入成绩子程序
inputGrade proc 
mov cx,10
lea si,grade

input:
mov ah,1
int 21h
mov [si],al

mov ah,1
int 21h
mov [si+1],al

mov ah,1
int 21h
add si,2
loop input

mov ah,2      ;换行
mov dl,0dh
int 21h
ret
inputGrade endp


;输出成绩子程序
outGrade proc
mov grade[si],'$'
lea si,grade
mov ah,2
mov dl,02h
int 21h
mov dl,0ah
int 21h

mov ah,9
mov dx,si
int 21h

ret
outGrade endp

;转换子程序
convert proc
lea si,grade
xor cx,cx
mov cx,20
begin:
mov al,[si]
sub al,30h   ;ASCII转化为BCD码
mov [si],al
inc si
loop begin

lea si,grade ;BCD转化成二进制
lea di,grade
mov cx,000ah
c1:
mov al,[si]
mov dl,[si+1]
mov bl,al
shl bl,1
shl al,1
shl al,1
shl al,1
add al,bl
add al,dl
mov [di],al
add si,2
inc di
loop c1

ret 
convert endp 


;排名子程序
rankGrade proc
lea di,rank
mov ch,0ah  ;外循环次数
xor bx,bx

next1:
lea si,grade
mov al,[si+bx]  ;外循环一次AL也变化一次
mov dl,1      ;名次
mov cl,10      ;内循环次数每次外循环时刷新

next2:    
cmp al,[si]
jnb check   ;若第一个数大于等于 则不记名  
inc dl      ;若第一个数小于 名次+1
inc si
dec cl
jnz next2
jz next3

check:
inc si 
dec cl   ;内循环-1
jnz next2

next3:
mov [di],dl  ;把名次放入
inc di
inc bx  
dec ch
jnz next1
ret
rankGrade endp


;输出排名结果
outRank proc
xor cx,cx
mov cx,10
lea di,rank
mov ah,2
mov dl,02h
int 21h
mov dl,0ah
int 21h

outcom:
mov dl,[di]
add dl,30H   ;转化为ASCII码
mov ah,02H
int 21h
mov dl,' '
mov ah,02h
int 21h
inc di
loop outcom

ret
outRank endp

code ends
    end start

结果显示:
在这里插入图片描述
结果中有个冒号,这是因为在ASCII码没有10
冒号的ASCII码对应过来等价于10

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值