汇编 学生成绩管理系统 学生成绩排序

qq_29492583 2016-01-20 12:53:11
怎么把学生姓名和成绩一起按成绩大小排序输出 代码如下

data segment
chengji_tab db 5 dup (20 dup(0))
name_tab db 12,?,13 dup (0)
grade_tab db 4,?,5 dup(0)
chengji db 20 dup(0),13,10,'$'
namecount dw 0
string1 db 'Do you want to insert a item to gradetab?(Y/N)',13,10,'$'
string2 db 'Input name:','$'
string3 db 'Input a grade:','$'
string4 db 'Error!Please enter the requested...',13,10,'$'
string5 db 'name grade.',13,10,'$'
gradeall dw 5 dup ('?')
data ends
stack segment para stack 'stack' ;定义堆栈段
dw 256 dup(0)
stack ends
code segment
assume cs:code,ds:data,es:data,ss:stack
start:
mov ax,data
mov ds,ax
mov es,ax
xor bx,bx
;lea di,chengji_tab

a1: lea dx, string1
mov ah, 9
int 21h
mov ah, 01
int 21h
mov bl,al
call crlf
cmp bl,'n' ;判断输入
jz a2
cmp bl,'N'
jz a2
cmp bl,'y'
jz next1
cmp bl,'Y'
jz next1
lea dx,string4
mov ah,09
int 21h
jmp a1
next1:
lea dx,string2
mov ah,09
int 21h
call intputname
lea dx,string3
mov ah,09
int 21h
call intputgrade
call change
mov si,namecount
shl si,1
mov gradeall[si],bx
INC namecount
cmp namecount,5
jae a2
jmp a1

a2: xor bx,bx
mov bx,namecount
cmp bx,0
jz a3
call printall
call crlf
jmp a4

a3: lea dx,string4
mov ah,09
int 21h
jmp a1 ; 70

a4:
mov ah,4ch ;exit to dos
int 21h
;--------------------

intputname proc near
lea dx,name_tab
mov ah,0ah
int 21h
call crlf
lea si,name_tab + 2
mov ax,namecount
mov di,20
mul di
mov di,offset chengji_tab
add di,ax
n10:
lodsb
cmp al,0dh
jz n20
stosb
jmp short n10
n20:
ret
intputname endp

intputgrade proc near
lea dx,grade_tab
mov ah,0ah
int 21h
call crlf
lea si,grade_tab + 2
mov ax,namecount
mov bx,20
mul bx
mov di,offset chengji_tab + 16
add di,ax
m10:
lodsb
cmp al,0dh
jz m20
stosb
jmp short m10
m20:
ret
intputgrade endp

change proc near
mov bx,0
mov ax,namecount
mov di,20
mul di
add ax,offset chengji_tab + 16
mov di,ax
newc:
mov al,[di]
sub al,30h
jl exit2
cmp al,9
jg exit2
cbw
xchg ax,bx
mov cx,10
mul cx
xchg ax,bx
add bx,ax
inc di
jmp newc
exit2:ret
change endp

printall proc near
lea dx,string5
mov ah,09
int 21h
mov bp,0
mov dx,offset chengji_tab

all10:
push dx
mov bx,2
mov ah,40h
mov cx,12
int 21h
mov si,dx
add si,16
mov bx,bp
shl bx,1
cmp ds:gradeall[bx],60
mov bl,1
jae all20
mov bl,4
all20:
push bp
mov bp,4
call print_color
call Crlf
pop bp
pop dx
inc bp
cmp bp,namecount
jae allx
add dx,20
jmp short all10
allx:
ret
printall endp

crlf proc near ;回车换行
mov dl,0dh
mov ah,2
int 21h
mov dl,0ah
mov ah,2
int 21h
ret
crlf endp

print_color proc near
push ax
push bx
push cx
push dx
push si
push di
push bp

mov ah,3
mov bh,0
int 10h ;get cursor position
re_print:

push dx ;save it
lodsb
mov ah,9
mov bh,0
mov cx,1
;mov bl,red_color
int 10h ;print 1 bytes with red color
pop dx ;restore cursor position
inc dl ; forward 1 byte ; 200
mov bh,0
mov ah,2 ;get new cursor position
int 10h
dec bp ;next bytes
jnz re_print
pop bp
pop di
pop si
pop dx
pop cx
pop bx
pop ax
ret
print_color endp

code ends
end start
十万火急 万分感谢
...全文
599 2 打赏 收藏 转发到动态 举报
写回复
用AI写文章
2 条回复
切换为时间正序
请发表友善的回复…
发表回复
赵4老师 2016-01-20
  • 打赏
  • 举报
回复
先在BC或TC中写个C语言实现所需功能,然后在TurboDebug中看对应的汇编。 bc++3.1 帮助里面对每个函数都有一小段能拷贝出来运行看效果的例子程序。非常适合初学C语言。相比较而言VC带的帮助MSDN就没有。http://download.csdn.net/source/2805028
zara 2016-01-20
  • 打赏
  • 举报
回复
排序,基本流程是确定的,比较数据,需要时对数据进行交换,无论是对简单数据,还是复杂结构的数据,也是一样的吧。

21,458

社区成员

发帖
与我相关
我的任务
社区描述
汇编语言(Assembly Language)是任何一种用于电子计算机、微处理器、微控制器或其他可编程器件的低级语言,亦称为符号语言。
社区管理员
  • 汇编语言
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧