资源描述
华 北 科 技 学 院
课程设计说明书
课程名称: 汇编语言
班级: 计算机B08-1 姓名: 胡诗招
学号: 200807014102
设计题目: 个人档案管理文件
设计时间: 2010年6月23号 _至 2010年7月2号 _
指导教师:______ 李冬艳_ ___________
评 语:_________________________________
_________________________________________
_________________________________________
_________________________________________
_________________________________________
评阅成绩:__ __评阅教师:__ ___
一、 课程设计目的
进行程序设计方法和技能的基本训练,巩固在课堂上学到的有关程序设计的基本知识和基本方法,通过实际动手能力的培养,进一步熟悉汇编语言的结构和使用方法,达到能独立阅读、编制和调试一定规模的汇编语言程序的水平。
二、 课程设计要求
1.要求编写并调试通过一个小型软件,实现对软件或硬件的操作。
2.遵循模块化、结构化的程序设计方法。
3.要求程序必须正确。
4.程序简明易懂,多运用输入输出提示,出错信息及必要的注释。
5.要求程序结构合理,语句使用得当。
6.适当追求编程技巧和程序运行效率。
三、课程设计题目:
个人档案管理文件
四、课题分析
程序开始时,先建立判断是否存在文件,如果不存在,就创立文件。然后随便输入i,l,q中任意一个字母,然后跳到相应的子程序,输入i诗,跳到输入的子程序,输入相应的数据,保存到文件里。当输入l时,保存在文件里的数据就会显示,每个学生的信息显示一行。当输入q时,直接关闭文件,程序结束
五、流程图:
开始
先建立一个文件
输入i,l,q中的
一个字母
输入i 输入l
输入学生的名字,年龄
性别,身高,体重,并把 打开文件
数据依次存到文件
显示学生名字,年领
,性别,身高,体重
输入q
关闭文件
结束
六、程序源代码:
vardata segment
filename db 'ffff.txt',00 ;定义文件
vardata ends
condata segment
names db 10 dup(?) ;名字定义
age db ?,? ;年龄定义
sex db 2 dup(?) ;性别定义
height db 3 dup(?) ;身高定义
weight db 3 dup(?) ;体重定义
mess_n db 0dh,0ah,' name:$'
mess_a db 0dh,0ah,' age:$'
mess_s db 0dh,0ah,' sex:$'
mess_h db 0dh,0ah,' height:$'
mess_w db 0dh,0ah,' weight:$'
s4 db 0dh,0ah
db '***************************************',0dh,0ah
db '* -1: print list [L]- *',0dh,0ah
db '* -2: insert new ele [I]- *',0dh,0ah
db '* -3: quit [q]- *',0dh,0ah
db '***************************************',0dh,0ah
db 0dh,0ah
db '$'
s1 db ' name age sex height weight',13,10,'$'
s2 db ' $'
s3 db ' $'
condata ends
code segment
assume cs:code,ds:vardata,es:condata
start:
mov ax, condata
mov es, ax
mov ax, vardata
mov ds, ax
push ds
;--------------print command hint-------------------
mov ax, es
mov ds, ax
mov dx, offset s4
mov ah, 9h
int 21h
pop ds
;----------------intepret command------------------
cmp_l: mov ah, 01h
int 21h
cmp al, 'l'
jnz cmp_i
call list_all
jmp start
cmp_i:
cmp al, 'i'
jnz cmp_q
call insert
jmp start
cmp_q:
cmp al, 'q'
jnz closef
exit:
mov ax, 4c00h
int 21h
;-------------打开和创建文件
list_all proc near
call open_create ;open or create file
push ds
mov ax, es ;es里放的是文件
mov ds, ax
lea dx, s1
mov ah, 9
int 21h
mov dl, 0ah
mov ah,2
int 21h
loop_rd:
mov ah, 3fh ;read record from file to memory 读取文件
mov dx, offset names
mov cx, 20
mov bx, si
int 21h
cmp ax, 0
je read_finish ;read to the end,then finish相等是结束
;--------------------名字
lea dx, s3
mov ah, 9
int 21h
mov bx, 0
go_on:
mov dl, names[bx]
mov ah, 2h
int 21h
inc bx
cmp bx, 10
jl go_on
;---------------------年龄
lea dx,s2
mov ah,9
int 21h
mov dl, age[0]
mov ah, 2
int 21h
mov dl, age[1]
mov ah, 2
int 21h
;---------------------性别
lea dx,s2
mov ah,9
int 21h
mov bx, 0
l1: mov dl, sex[bx]
mov ah, 2h
int 21h
inc bx
cmp bx, 2
jl l1
;----------------------身高
lea dx,s2
mov ah,9
int 21h
mov bx, 0
l2: mov dl, height[bx]
mov ah, 2h
int 21h
inc bx
cmp bx, 3
jl l2
;----------------------体重
lea dx,s2
mov ah,9
int 21h
mov bx, 0
l3: mov dl, weight[bx]
mov ah, 2h
int 21h
inc bx
cmp bx, 3
jl l3
mov dl, 0dh
mov ah,2
int 21h
mov dl, 0ah
mov ah,2
int 21h
jmp loop_rd ; a record finished ,then to read the next接着显示
read_finish:
call closef
pop ds
ret
list_all endp
;-----------------------输入子程序
insert proc near
call open_create ; open of create file
push ds
mov ax, es
mov ds, ax
;------------------------名字输入
mov dx, offset mess_n
mov ah, 9h
int 21h
mov bx, 0
init: ;memory initialize初始化
mov names[bx],0
inc bx
cmp bx, 20
jl init
mov bx, 0
lp: ;从键盘接受数据
mov ah, 1
int 21h
cmp al, 0dh
jz inext
cmp al, 0ah
jz inext
mov names[bx],al
inc bx
cmp bx, 10
jl lp
;---------------------年龄 的输入
inext:
lea dx,s2
mov ah,9
int 21h
mov dx, offset mess_a
mov ah, 9h
int 21h
mov bx, 0
lp2: mov ah, 1h
int 21h
cmp al, 0dh
jz inext1
cmp al, 0ah
jz inext1
mov age[bx],al
inc bx
cmp bx, 1
jle lp2
;-----------------------性别输入
inext1: lea dx,s2
mov ah,9
int 21h
mov dx, offset mess_s
mov ah, 9h
int 21h
mov bx, 0
lp3: mov ah, 1h
int 21h
cmp al, 0dh
jz inext2
cmp al, 0ah
jz inext2
mov sex[bx],al
inc bx
cmp bx,2
jle lp3
;--------------------身高输入
inext2: lea dx,s2
mov ah,9
int 21h
mov dx, offset mess_h
mov ah, 9h
int 21h
mov bx, 0
lp4: mov ah, 1h
int 21h
cmp al, 0dh
jz inext3
cmp al, 0ah
jz inext3
mov height[bx],al
inc bx
cmp bx,3
jle lp4
;-------------------体重输入
inext3: lea dx,s2
mov ah,9
int 21h
mov dx, offset mess_w
mov ah, 9h
int 21h
mov bx, 0
lp5: mov ah, 1h
int 21h
cmp al, 0dh
jz iexit
cmp al, 0ah
jz iexit
mov weight[bx],al
inc bx
cmp bx,3
jle lp5
iexit: ;move the file pointer to the end of file
mov ah, 42h ;移动文件
mov al, 2
mov bx, si
mov cx, 0
mov dx, 0
int 21h
mov ah, 40h ;write the record to file写入文件
mov bx, si
mov cx, 20
mov dx, offset names
int 21h
back:
call closef
pop ds
ret
insert endp
;---------------------------
open_create proc near
push ds
mov ax, seg filename ;filename文件d的段地址值送给ax
mov ds, ax
mov ah, 3dh ;open the file
mov dx, offset filename
mov al, 2h ;显示文件
int 21h
jnc ok ;大于等于时跳转
mov ah, 3ch ;如果不存在文件,就创建文件
mov dx, offset filename
mov cx, 00
int 21h
ok:
mov si, ax
pop ds
ret
open_create endp
closef proc near
mov bx, si
mov ah, 3eh ;关闭文件
int 21h
ret
closef endp
code ends
end start
七、结果显示
八、 感想、收获及体会
课程设计从开始找资料到课设结束,在这短时间里,课设给我的收获很大,虽然我的题目不是很难,比其他同学的简单,程序也简单,程序的代码都是简单的指令,但我学到的却很多。以前学程序时思维都很乱,但写这个程序是,我的思路确是非常清晰的,本来想加上一些代码,让显示时带有颜色,但试了几次都不太理想,就去掉了。这个程序不是我单独完成的,有些东西是在网上找的。虽然是别人的,但我把它转换为自己的东西。在写程序时,思路是最终要的,如果思路错了,你就很难写出正确的程序,但要是思路非常的清晰,就算程序有写错误,你也会很快的找出并把它改对。所以我认为在写一个程序时,必须把思路弄得非常的清楚,然后再开始写。
展开阅读全文