武汉科技大学微机理课程设计.docx
- 文档编号:1961569
- 上传时间:2023-05-02
- 格式:DOCX
- 页数:12
- 大小:136.67KB
武汉科技大学微机理课程设计.docx
《武汉科技大学微机理课程设计.docx》由会员分享,可在线阅读,更多相关《武汉科技大学微机理课程设计.docx(12页珍藏版)》请在冰点文库上搜索。
微机原理与应用
课 程 设 计 报 告
学号:
姓名:
学院:
信息科学与工程学院专业:
电子信息工程 班级:
电信班 指导教师:
熊庆国
用汇编语言实现电话本功能
一、目的:
运用所学汇编语言知识,编写一个具有电话本功能的程序,达到提高动手能力以及检验对微机原理课程学习和掌握的程度。
二、内容及要求:
1)能够储存50个电话号码,其中包括人名(20个字符),电话号码(11个字符)。
2)系统可以随时接收新的人名及电话号码。
3)系统具有随时查询号码的功能,输入人名后,在屏幕上显示其相应的电话号码。
4)运行此系统后,显示菜单选项进行功能选择。
三、数据存储方案:
对于电话薄的每一位联系人,姓名占20个字符,加上结束标志$共21字符;电话占11个字符,加上结束标志$共12个字符。
所以每一位联系人共占据33个单元,这样我们可以在存储区开辟33*50=1650字节的地址空间。
四、流程图:
(1)程序框图:
11
正确?
结束
Debug调试
在主菜单界面下有三大模块,分别是:
添加联系人信息,搜索联系人信息,退出系统。
开始
正确?
有错误
有错误
正确?
有错误
链接、生成exe可执行文件
汇编生成obj文件
建立、修改asm文件
(2)汇编流程图:
五、汇编运行效果:
(1)在win7命令窗口下使用MASM对源程序进行编译,生成目标文件weiji.obj;
(2)对生成的weiji.obj文件使用link命令进行链接生成weiji.exe可执行文件;
(3)在win7继续执行debug weiji.exe,会出现如下结果,这是由于版本不兼容造成的。
我之后的实验步骤均是在DOSBox软件下完成的。
(4)打开DOSBox,找到汇编路径。
执行命令debug.exe,然后使用U命令进行反汇编。
(5)继续使用G命令运行程序,得到如下界面菜单显示。
按“1”键后显示添加联系人信息,添加完毕后显示菜单。
(6)按“2”键后显示搜索联系人姓名,回车后显示对应联系人电话号码,同时显示菜单界。
(7)按“3”键后显示程序终止正常,退出系统。
此时进入汇编命令界面,输入-Q(或-q)退出汇编。
六、问题及解决方法:
在做这个课程设计过程中,第一个问题便是电话薄中联系人信息的存储地址如何进行比较好的分配,同时尽量兼顾存储空间利用的最大化。
其中还有一些小的细节问题,比如说在姓名和电话号码后分别需要加上结束标志字符“$”,这样的话每个联系人的存储单元就要在原来的基础上增加2个单元。
其次的问题就是在各个模块子程序的最后结尾处如何正确使用好条件转移指令,如JMP、JE、JL和JNE等,刚开始的时候总是被这些东西搞得很迷糊,后来认真地复习了微机课本中这部分知识的内容,再加上同学的帮助,终于解决了。
除此之外,还有关于9号和10号功能调用的问题。
9号功能调用执行后,显示器将显示待显示的字符串。
执行前要在DS数据段定义一串字符,同时该字符必须以“$”结尾,这也就是上面所说的需要在姓名和电话号码后加上“$”标志的原因;10号功能调用,当需要输入字符串时,应当在DS数据段中事先定义一个变量数据区IBUF,需要注意的是,汇编语言是将Enter键仅定义为回车,即光标移至本行的行首,10号功能调用每次都要从键盘接收1个Enter键,当然就需要执行1个回车操作,将显示器光标移到本行的行首。
七、总结与心得体会:
在决定做这个课程设计时,首先的问题是在自己的个人电脑上无法实现程序的运行,在win7系统的cmd.exe命令窗口下不能执行相应的程序,因为64位的win7没有Debug.exe调试程序,于是出现了以上所提及的问题,如果不能执行程序,也就意味着无法验证程序的正确与否,本来准备放弃的,但是后来我在网上搜索相关资料,发现可以通过
DOSBox软件实现程序的执行与汇编,于是喜出望外!
在程序编写工程中,我又认真学习了关于汇编语言的相关知识;在程序基本编好之后,我还需要重新复习上学期做过的《微机原理应用与汇编》实验,进一步熟悉Debug的各种常用命令和汇编程序编译的步骤,然后在编译过程中不断调试改正程序以达到预期目的。
温故而知新,现在我对这些知识又有了新的更进一步的理解。
通过这一次微机课程设计,我对汇编程序流程图和编程模块化思想有了更深的认识,在程序设计过程中,首先要明白其算法和大致的流程,做到有一个宏观的认识,而流程框图刚好起到了这样的一个作用,让我们对每一步要完成的任务要有一个很清晰的思路。
同时当要写一个功能很复杂的程序时可以分几个小的模块,每个模块实现后再进行整体的设计编写,这样不仅可以使编程变得更简单,而且便于发现和检查错误。
最后,在做课程设计过程中,通过查阅资料我学到了不少的新知识,拓宽了自己的知识面,开阔了视野。
与此同时,我也体会到了和同学探讨的好处,当遇到了看书查资料仍然不能解决的问题时,可以尝试和同学讨论一下,在讨论中可以解决很多问题,而且还能加深自己的印象,从中获益匪浅。
八、附录:
程序清单
STACK SEGMENT STACK ;堆栈段DW 64DUP(?
)
STACK ENDS
DATA SEGMENT ;数据段
DISP DB '%%%%%%% Menu%%%%%%%%%%',0DH,0AH,
'Enteryourchoice',0DH,0AH,
'1.Addcontactsinformation',0DH,0AH,'2.Searchcontacts',0DH,0AH,
'3.Quit!
',0DH,0AH,'%%%%%%%%%%%%%%%%',0DH,0AH,24H
ERROR
DB
'Error!
Pleaseinputtherightchoice!
$'
DISP1
DB
'Inputthename:
$'
DISP2
DB
'Inputphonenumber:
$'
DISP3
DB
'Inputthenameyouwantsearch:
$'
DISP4
DB
'NOinformationexist!
$'
DISP5
DB
0DH,0AH,'$'
DISP6
DB
'%%%PhoneBook%%%',0DH,0AH,24H
DISP7
DB
'Theinformationissuccessfullystored!
$'
DISP8
DB
'%%%%$'
CHOICE
DB
2,0,2DUP(0) ;选择功能
NAMEBUF
DB
21,0,21DUP(0) ;姓名21单元
NUMBERBUF
DB
12,0,12DUP(0)
;电话12单元
SERCHNAME
DB
21,0,21DUP(0)
;搜索姓名
DB
'$'
INFO
DB
1650DUP(0)
DATA ENDS
CODE SEGMENT ;代码段
SUB
AX,AX
;AX清零
PUSH
AX
;压栈
MOV
BX,OFFSETINFO
MOV
AX,DATA
MOV
DS,AX
A0:
MOV
DX,OFFSETDISP
;显示菜单选择界面
MOV
AH,9
INT
21H
MOV
DX,OFFSETDISP5
MOV
AH,9
INT
21H
MOV
DX,OFFSETCHOICE
;用户输入选择功能
MOV
AH,10
INT
21H
MOV
DX,OFFSETDISP5
MOV
AH,9
INT
21H
MOV
SI,OFFSETCHOICE
;判断用户输入
INC
SI
INC
SI
MOV
AL,[SI]
SUB
AL,31H
JE
A1
;选择功能1执行A1
MOV
AL,[SI]
SUB
AL,32H
JE
A2
;选择功能2执行A2
MOV
AL,[SI]
SUB
AL,33H
JE
A3
;选择功能3执行A3
MOV
DX,OFFSETERROR
;选择错误,显示error!
MOV
AH,9
INT
21H
MOV
DX,OFFSETDISP5
MOV
AH,9
INT
21H
MOV
DX,OFFSETDISP6
MOV
AH,9
INT
21H
JMP
A0 ;显示出错后返回主菜单界
A1:
CALL
ENTER
JMP
A0 ;返回主菜单界面
A2:
CALL
SERCH
ASSUME CS:
CODE,DS:
DATA,SS:
STACKSTART:
PUSH DS
面
JMP
A0
;返回主菜单界面
A3:
MOV
AH,4CH
INT
21H
;退出程序
ENTER PROCNEAR ;进入添加联系人模块SUB CX,CX
MOV
DX,OFFSETDISP1 ;界面显示输入联系人姓名
MOV
AH,9
INT
21H
MOV
DX,OFFSETNAMEBUF ;用户输入联系人姓名
MOV
AH,10
INT
21H
MOV
SI,DX ;将缓冲区中名字复制到预定义存储区INFO中
MOV
CL,[SI+1]
N:
MOV
AL,[SI+2]
MOV
[BX],AL
INC
BX
INC
SI
LOOP
N
MOV
BYTEPTR[BX],'$'
MOV
DX,OFFSETDISP5 ;界面显示输入号码
MOV
AH,9
INT
21H
MOV
DX,OFFSETDISP2 ;用户输入对应号码
MOV
AH,9
INT
21H
MOV
DX,OFFSETNUMBERBUF
MOV
AH,10
INT
21H
MOV
SI,DX ;将缓冲区中号码复制到预定义存储区INFO中
MOV
CL,[SI+1]
INC
BX
P:
MOV
AL,[SI+2]
MOV
[BX],AL
INC
BX
INC
SI
LOOP
P ;循环操作
MOV
BYTEPTR[BX],'$'
INC
BX
MOV
DX,OFFSETDISP5
MOV
AH,9
INT
21H
MOV
DX,OFFSETDISP7 ;界面显示信息存储成功
MOV
AH,9
INT
21H
MOV
DX,OFFSETDISP5
MOV
AH,9
INT
21H
MOV
DX,OFFSETDISP6
MOV
AH,9
INT
RETENTER
21H
ENDP
SERCH
PROC
NEAR ;查询联系人模块
MOV
DX,OFFSETDISP3 ;界面显示用户输入查询的姓名
MOV
AH,9
INT
21H
MOV
DX,OFFSETSERCHNAME ;用户输入要查询的名字
MOV
AH,10
INT
21H
MOV
DX,OFFSETDISP5
MOV
AH,9
INT
21H
MOV
SI,OFFSETINFO ;执行查询操作
DEC
SI
B00:
MOV
DX,OFFSETSERCHNAME
MOV
DI,DX
INC
DI
B0:
INC
DI
INC
SI
CMP
BYTEPTR[SI],'$' ;比较
JE
B1 ;若SI指向内容为'$',找到信息,跳转到B1输出信
息
MOV
AL,[DI]
CMP
AL,[SI]
JE
B0 ;逐个字符比较,相同跳回B0继续比较判断
CMP
SI,BX ;若不同则与BX(INFO区已存信息末地址)比
较
JL
B2 ;SI小于BX,则跳转至B2
JMP
B3 ;反之,未查找到,跳转至B3
B2:
MOV
CX,2
DEC
SI
B20:
INC
SI
CMP
BYTEPTR[SI],'$' ;比较
JNE
B20
LOOP B20
JMP B00 ;返回B00继续查找,进行比较判断
B1:
MOV
DX,OFFSETDISP8
;查找到信息,输出信息
MOV
AH,9
INT
21H
MOV
DX,SI
INC
DX
MOV
AH,9
INT
21H
MOV
DX,OFFSETDISP8
MOV
AH,9
INT
21H
MOV
DX,OFFSETDISP5
MOV
AH,9
INT
21H
MOV
DX,OFFSETDISP6
MOV
AH,9
INT
21H
JMP
EXIT ;信息输出完毕,跳至EXIT结束子程序
B3:
MOV
DX,OFFSETDISP4 ;未找到所需信息,提示输出并结束子程序
MOV
AH,9
INT
21H
MOV
DX,OFFSETDISP5
MOV
AH,9
INT
21H
MOV
DX,OFFSETDISP6
MOV
AH,9
INT
21H
EXIT:
RET
SERCH
ENDP
CODE
ENDS
END
START ;主程序结束
课程设计成绩:
日
月
年
指导教师:
评阅意见:
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 武汉 科技大学 微机 课程设计