汇编大作业

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 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

相关文档
最新文档