微机原理课程设计Word格式.docx
- 文档编号:18476665
- 上传时间:2022-12-17
- 格式:DOCX
- 页数:25
- 大小:508.32KB
微机原理课程设计Word格式.docx
《微机原理课程设计Word格式.docx》由会员分享,可在线阅读,更多相关《微机原理课程设计Word格式.docx(25页珍藏版)》请在冰豆网上搜索。
pusha
leadx,str
movah,9
popa
endm
关闭文件
file_closemacro
pushax
pushbx
movah,3eh
movx,handle
=====================================
文件指针移动
file_indexmacroa1,a2
localexit,point
movbx,handle
movcx,00h
movdx,a2
cmpdx,0
jgepoint
notcx
point:
moval,a1
movah,42h
jncexit
displayfile_index_error
exit:
将剩余的空间置为空
setspacemacropart,b1,b2
localnext
movbh,00h
movbl,b1
movah,00h
moval,b2
incax
next:
movpart[bx],'
'
incbx
cmpbx,ax
jnznext
数据段定义
datareasegment
;
菜单信息
searchdb"
1.search$"
insertdb"
2.insert$"
updatedb"
3.update$"
deletedb"
4.delete$"
quitdb"
5.quit$"
index_numdb0
姓名
namepart1labelbyte
iddw0
namepartlabelbyte
nmaxlendb20
ntruelendb?
_namedb20dup('
),'
$'
电话号码
telpartlabelbyte
tmaxlendb12
ttruelendb?
_teldb12dup('
indextemplabelbyte
id1tempdb0
id2tempdb0
db3dup('
)
nametempdb20dup('
teltempdb12dup('
),0dh,'
filepathdb"
E:
\telbook.doc"
handledw?
mflagdb0
mmflagdb0
flagdb0
create_error_msgdb"
createfileerror!
$"
open_error_msgdb"
openfileerror!
close_error_msgdb"
closefileerror!
write_error_msgdb"
writefileerror!
input_error_msgdb"
inputerror,pleaseinputagain!
file_index_errordb"
fileindexerror!
read_error1_msgdb"
filereaderror!
delete_error_msgdb"
deleteerror!
deleted_msgdb"
deleted!
input_msgdb"
pleasechoosetheoperate:
input_null_msgdb"
inputnull,pleaseinputagain!
search_inputdb"
pleaseinputthenameyouwanttosearch:
$"
update_inputdb"
pleaseinputthenameyouwanttoupdate:
delete_inputdb"
pleaseinputthenameyouwanttodelete:
not_find_msgdb"
indexnotfound!
file_emptydb"
fileempty!
output_namedb"
name:
output_teldb"
tel:
datareaends
codesegment
assumeds:
datarea,cs:
code,es:
datarea
start:
主函数
mainprocfar
pushds
subax,ax
movax,datarea
movds,ax
moves,ax
cld
callopen_file;
打开文件
cmpflag,1
jzcreate;
若文件不存在,则创建一个
jmpnext1
create:
callcreate_file
jzexit
next1:
callget_index_num;
获得文件中的记录数
callshow_menu;
显示操作菜单
callchoose_opr;
选择操作
ret
mainendp
=========================================
open_fileprocnear
movax,3d02h
movflag,0
leadx,filepath
jcopen_failure
movhandle,ax
open_failure:
打开文件失败,重新创建一个
movflag,1
ret
open_fileendp
新建文件,再打开
create_fileprocnear
movax,3c02h
jccreate_error
create_error:
displaycreate_error_msg
create_fileendp
=======================================
输出操作菜单
show_menuprocnear
clrf
displaysearch
displayinsert
displayupdate
displaydelete
displayquit
show_menuendp
选择功能
choose_oprprocnear
displayinput_msg
movah,1
cmpal,'
1'
jecall_search
2'
jecall_insert
3'
jecall_update
4'
jecall_delete
5'
jecall_quit
input_error:
displayinput_error_msg
callchoose_opr
jmpendnext
call_search:
displaysearch_input
callsearch_proc
call_insert:
callinsert_proc
jnznext_input
next_input:
jmpcall_insert
call_update:
displayupdate_input
callupdate_proc
call_delete:
displaydelete_input
calldelete_proc
call_quit:
movah,4ch
endnext:
choose_oprendp
模糊查找
search_procprocnear
movmmflag,0
file_index00h,00h;
将文件指针移到文件开头
callfile_read;
读文件
cmpflag,2;
第一次读文件时,就到了文件末尾,说明文件为空文件
jzempty1
leadx,namepart;
不为空,则输入需要查找的姓名
movah,0ah
setspace_name,ntruelen,nmaxlen
search_loop:
jzsearch_exit;
如果读文件不成功,则退出查找
callmatch;
如果读文件成功,则将读出的内容与输入的内容进行比较
cmpmflag,1;
如果匹配
jzmatched;
则转到match输出相应信息
读取下一条记录
直到读到文件末尾
jzsearch_exit
jmpsearch_loop
matched:
如果匹配,输出
movmmflag,1
displaynametemp
empty1:
displayfile_empty
jmpsearch_exit
search_exit:
cmpmmflag,1
jnznot_find
not_find:
displaynot_find_msg
search_procendp
==============================
插入
insert_procprocnear
callinput_proc
jzinsert_exit
file_index00h,00h
movwordptrid,ax
file_index02h,00h
subax,id
movdl,al
adddl,30h
int21h
callfile_write
insert_exit:
insert_procendp
================================
==================================
修改
update_procprocnear
callsearch1_proc
jneupdate_exit
file_index01,-33
callfile_write
update_exit:
ret
update_procendp
删除
delete_procprocnear
delete_loop:
callfile_read
jzdelete_error
cmpflag,2
jzdelete_exit
leadi,_name
leasi,nametemp
movcx,20
repmovsb
leadi,_tel
movcx,13
file_index01,-33*2
file_index01,33
jmpdelete_loop
delete_error:
displaydelete_error_msg
delete_exit:
movntruelen,1
movttruelen,1
displaydeleted_msg
delete_procendp
输入记录
input_procprocnear
displayoutput_name
leadx,namepart
moval,ntruelen
cmpal,1
jlinput_exit
displayoutput_tel
leadx,telpart
setspace_tel,ttruelen,tmaxlen
input_exit:
input_procendp
写文件
file_writeprocnear
callbin_dec
leasi,_name
leadi,nametemp
leasi,_tel
leadi,teltemp
movcx,12
movah,40h
movcx,33
leadx,nametemp
jncwrite_msg
displaywrite_error_msg
write_msg:
file_writeendp
file_readprocnear
movah,3fh
movcx,33
jcread_error1
cmpax,0;
警告信息:
如AX=0,表明试图从文件尾开始读
jeend_file_warning
jmpread_end
read_error1:
displayread_error1_msg
end_file_warning:
movflag,2
read_end:
file_readendp
matchprocnear
movmflag,0
movch,0
movcl,ntruelen
repecmpsb
jnzmatch_exit
movmflag,1
match_exit:
matchendp
验证名字是否匹配
match1procnear
movcl,nmaxlen
jnzmatch1_exit
match1_exit:
match1endp
===================================================
search1_procprocnear
jzempty
search1_loop:
jzsearch1_exit;
callmatch1;
jzmatched1;
jzsearch1_exit
jmpsearch1_loop
matched1:
jmpsearch1_exit
empty:
search1_exit:
cmpmflag,1
jnznot_find1
not_find1:
search1_procendp
codeends
endstart
4.运行结果:
1)录入记录:
2)查找记录:
3)删除:
4)更新记录:
5.遇到问题及解决方法:
1)各种指令不能弄错了,在开始有些用错了,导致程序无法运行,后来修改之后,才可以正常运行。
2)函数调用很重要,而且在编写子程序时,一定要在结尾加上ret,然后加上结束标志endp.
3)汇编语言里只能以英文字母和一些符号的形式出现,不能有汉字。
4)在程序运行的时候,开始忘了怎么去运行,以前上机的一些知识都差不多忘了,然后再找来上机指导书,再按那上面的操作,最后得到了界面。
6.心得体会:
这次微机原理课程设计,要用汇编语言编写一个程序,实现电话本的功能,跟以前的C语言编写的程序完全不一样,汇编语言要复杂些。
但整体思路结构差不多,首先要明确实现哪些功能,然后运用所学的知识,编写出程序,在在电脑上运行调试,这时候以前上机的实际操作知识就要派上用场了。
因为程序代码很多,所以在最开始编写的时候,就要特别小心仔细,尽量减少错误,然后有不懂的地方要问同学。
因为平时学的不是蛮好,所以这次课程设计做起来花了一些时间,但是在同学的帮助和自己的努力下,还是完成了,也填补了自己以前所学的不足,进一步掌握了微机原理这门课程的知识。
评阅意见:
年月日
课程设计成绩:
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 微机 原理 课程设计