武汉科技大学微机理课程设计.docx

上传人:聆听****声音 文档编号:1961569 上传时间:2023-05-02 格式:DOCX 页数:12 大小:136.67KB
下载 相关 举报
武汉科技大学微机理课程设计.docx_第1页
第1页 / 共12页
武汉科技大学微机理课程设计.docx_第2页
第2页 / 共12页
武汉科技大学微机理课程设计.docx_第3页
第3页 / 共12页
武汉科技大学微机理课程设计.docx_第4页
第4页 / 共12页
武汉科技大学微机理课程设计.docx_第5页
第5页 / 共12页
武汉科技大学微机理课程设计.docx_第6页
第6页 / 共12页
武汉科技大学微机理课程设计.docx_第7页
第7页 / 共12页
武汉科技大学微机理课程设计.docx_第8页
第8页 / 共12页
武汉科技大学微机理课程设计.docx_第9页
第9页 / 共12页
武汉科技大学微机理课程设计.docx_第10页
第10页 / 共12页
武汉科技大学微机理课程设计.docx_第11页
第11页 / 共12页
武汉科技大学微机理课程设计.docx_第12页
第12页 / 共12页
亲,该文档总共12页,全部预览完了,如果喜欢就下载吧!
下载资源
资源描述

武汉科技大学微机理课程设计.docx

《武汉科技大学微机理课程设计.docx》由会员分享,可在线阅读,更多相关《武汉科技大学微机理课程设计.docx(12页珍藏版)》请在冰点文库上搜索。

武汉科技大学微机理课程设计.docx

微机原理与应用

课 程 设 计 报 告

学号:

姓名:

学院:

信息科学与工程学院专业:

电子信息工程 班级:

电信班 指导教师:

熊庆国

用汇编语言实现电话本功能

一、目的:

运用所学汇编语言知识,编写一个具有电话本功能的程序,达到提高动手能力以及检验对微机原理课程学习和掌握的程度。

二、内容及要求:

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 ;主程序结束

课程设计成绩:

指导教师:

评阅意见:

展开阅读全文
相关资源
猜你喜欢
相关搜索
资源标签

当前位置:首页 > IT计算机 > 电脑基础知识

copyright@ 2008-2023 冰点文库 网站版权所有

经营许可证编号:鄂ICP备19020893号-2