汇编大作业
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
汇编语言课程设计
课题名称:学生成绩管理系统
小组成员:
班级:
指导教师:
日期:2014.06.18 一、选题目的:
熟悉汇编语言程序设计的实验环境,主要是熟悉汇编程序的基本结构,编译、连接和
调试等基本操作。利用该题目进行汇编语言程序设计运用的综合性训练,综合运用汇编语言循环程序和子程序编程方法,巩固以及提高汇编语言程序设计能力运用水平,为后续的开发和实验工作打好基础。
二、功能设计:
编制一个程序,要求接收从键盘收入的一个班的学生成绩,并存放于50字节的GRADE 数组中,其中GRADE+N保存学号N+1的学生成绩,然后根据GRADE得学生成绩,把学生名次填入50自己的RANK数组中,其中RANK+N的内容是学号N+1学生的名次,在按学号把学生顺序学生名次显示出来。
三、算法流程图:
四、运行结果:
从键盘输入三个学生的姓名和成绩,按学生成绩升序排序,并显示出排序结果
五、程序源代码:
data segment
infor0 db 0ah,0dh,'sort=$'
infor1 db 0ah,0dh,'input name:$'
infor2 db 0ah,0dh,'input score:$'
n equ 8 姓名长度
m equ 4 成绩长度(3位+回车符)
p equ 3 输入的人数
q equ 3 成绩的位数
buff1 db n,?,n dup(0),'$' 姓名缓冲区,加$字符以便输入时用 buff2 db m,?,m dup(0),'$' 成绩缓冲区
sname db p dup(n+1 dup(0)) 保存姓名
score1 dw p dup(m+1 dup(0)) 保存成绩
score2 dw p dup(m+1 dup(0))
mingci db p dup(0) 名次
x dw ?
sign1 dw 0
sign2 dw 0
cont db '1' 计数
data ends
code segment
assume cs:code, ds:data
main proc far
start:
mov ax,data
mov ds,ax
mov es,ax
mov bx,0
mov cx,0
call input
call sort
call print
mov ah,4ch
int 21h
main endp
input proc
inc bx 输入次数统计
cmp bx,p 输入次数>p?
ja exit
lea dx,infor1 显示提示2
mov ah,9
int 21h
lea dx,buff1 输入姓名
mov ah,10
int 21h
mov al,buff1+1 实际输入个数——a1
add al,2 +2.包含bufferl的0、1号单元
mov ah,0
mov si,ax 回车0d所在位置,跟在最后一个字符后 mov buff1[si],0 将0d换为0,便于输出显示
lea dx,infor2 显示提示2
mov ah,9
int 21h
lea dx,buff2 输入成绩
mov ah,10
int 21h
mov al,buff2+1 实际输入个数
add al,2 个数+2,包含0、1单元,为找到0d
mov ah,0
mov si,ax
mov buff2[si],0 将0d换为0,便于输出显示
mov mingci[bx-1],bl bx为输入次数,保存输入的次序
cmp bx,1 第一次输入转let1
jz let1
add sign1,n+1 姓名间隔为n+1
add sign2,q 成绩间隔为q
let1: 子程序嵌套
call copy
jmp input
exit:
ret
input endp
copy proc
mov cx,n+1 姓名长度+3(包含$)
lea si,buff1+2
lea di,sname 姓名传递到sname
add di,sign1 加上间隔值
cld
rep movsb
mov cx,n
mov ax,'$' 用$覆盖姓名区,清除已输入的姓名 lea si,buff2+2
lea di,score1 成绩传递到score1
add di,sign2 加上间隔符
cld
rep movsb
lea si,buff2+2
mov di,sign2
call change 二进制成绩score2
ret
copy endp
change proc
mov x,0
mov cx,[si-1] 成绩的位数cx
mov cx,000fh 保留低四位
rept2:
mov al,[si] 按位取出成绩
cmp al,30h 是否在0、9之间
jl exit1
cmp al,39h
jg exit1
and ax,000fh
xchg ax,x
mov dx,10 将ax中前一次形成的书扩大十倍
mul dx 保存到x
add x,ax
inc si