微机原理课程设计报告li.docx

上传人:b****7 文档编号:16337375 上传时间:2023-07-12 格式:DOCX 页数:17 大小:46.94KB
下载 相关 举报
微机原理课程设计报告li.docx_第1页
第1页 / 共17页
微机原理课程设计报告li.docx_第2页
第2页 / 共17页
微机原理课程设计报告li.docx_第3页
第3页 / 共17页
微机原理课程设计报告li.docx_第4页
第4页 / 共17页
微机原理课程设计报告li.docx_第5页
第5页 / 共17页
微机原理课程设计报告li.docx_第6页
第6页 / 共17页
微机原理课程设计报告li.docx_第7页
第7页 / 共17页
微机原理课程设计报告li.docx_第8页
第8页 / 共17页
微机原理课程设计报告li.docx_第9页
第9页 / 共17页
微机原理课程设计报告li.docx_第10页
第10页 / 共17页
微机原理课程设计报告li.docx_第11页
第11页 / 共17页
微机原理课程设计报告li.docx_第12页
第12页 / 共17页
微机原理课程设计报告li.docx_第13页
第13页 / 共17页
微机原理课程设计报告li.docx_第14页
第14页 / 共17页
微机原理课程设计报告li.docx_第15页
第15页 / 共17页
微机原理课程设计报告li.docx_第16页
第16页 / 共17页
微机原理课程设计报告li.docx_第17页
第17页 / 共17页
亲,该文档总共17页,全部预览完了,如果喜欢就下载吧!
下载资源
资源描述

微机原理课程设计报告li.docx

《微机原理课程设计报告li.docx》由会员分享,可在线阅读,更多相关《微机原理课程设计报告li.docx(17页珍藏版)》请在冰点文库上搜索。

微机原理课程设计报告li.docx

微机原理课程设计报告li

大学

 

微机原理课程设计报告

 

学院:

电气学院

班级:

学号:

指导老师:

时间:

2014年1月15日

 

一.课程设计目的:

1.结合微型计算机原理课程的学习,进一步巩固已学的知识,同时针对计算机原理知识的具体应用,学会对系统中DOS和BIOS的使用。

学会使用屏幕编辑程序——EDIT,弄懂汇编程序的上级过程以及如何运用DEBUG软件进行汇编程序的调试。

2.学会将课本上的理论知识和实际有机的结合起来,锻炼自己分析解决实际问题的能力。

提高适应实际,实践编程的能力。

3.为了进一步巩固学习的理论知识,增强学生对所学知识的实际应用能力和运用所学的知识解决实际问题的能力,开始为期两周的课程设计。

通过设计使学生在巩固所学知识的基础之上具有初步的单片机系统设计与应用能力。

二.课程设计容:

1.接受年、月、日信息并显示的设计

为掌握响铃使用方法,并掌握年、月、日输入方法。

编写程序,先显示“WHATISTHEDATA(MM/DD/YY)?

”并响铃一次,然后接受键盘输入的月/日/年信息,并显示。

2.字符串匹配设计

为掌握提示信息的设置方法及读取键入信息的方法,编写程序实现两个字符串比较,如相同则显示“MATCH”,否则显示“NOMATCH”。

3.从键盘输入数据并显示的设计

为掌握键盘接受数据的方法,并了解将键盘数据显示时必须转换为ASCII码的原理,编写程序,将键盘接受到的四位十六进制数据转换为等值的二进制数显示。

4.字符和数据的显示设计

为掌握字符和和数据的显示方法。

编写程序,先显示信息:

INPUTSTRING,THEENDFLAGIS$,再接受字符。

如为0-9,则计数器加1,并显示数据;如为非数字,则直接显示,但不计数。

三.典型题目举例:

1.接收年月日信息并显示的设计

为掌握响铃使用方法,并掌握年、月、日输入方法。

编写程序,先显示“WHATISTHEDATA(MM/DD/YY)?

”并响铃一次,然后接受键盘输入的月/日/年信息,并显示。

流程图:

 

 

分3次输入月、日、年

分3次显示月、日、年

 

程序代码及注释:

DATASEGMENT

S1DB'WHATISTHEDATA(MM/DD/YY)?

',0DH,0AH,'$';显示字符串

S2DB'MONTH',0DH,0AH,'$';月字符串

S3DB'DAY',0DH,0AH,'$';日字符串

S4DB'YEAR',0DH,0AH,'$';年字符串

S5DB4;存放接受的月

DB?

DB4DUP(‘$’)

S6DB4;存放接受的日

DB?

DB4DUP(‘$’)

S7DB6;存放接受的年

DB?

DB6DUP(‘$’)

DATAENDS

CODESEGMENT

ASSUMECS:

CODE,DS:

DATA;段寄存器初始化

START:

MOVAX,DATA

MOVDS,AX

MOVDX,OFFSETS1;显示提示信息

MOVAH,9

INT21H

MOVDL,07H;响铃一次

MOVAH,2

INT21H

MOVCX,0FFFH;延迟,用外双重循环实现

L1:

PUSHCX

MOVCX,0FFFFH

L2:

LOOPL2

POPCX

LOOPL1

MOVDX,OFFSETS5;接受月数据,放入变量

MOVAH,0AH

INT21H

MOVDX,OFFSETS6;接受日数据,放入变量

MOVAH,0AH

INT21H

MOVDX,OFFSETS7;接受年数据,放入变量

MOVAH,0AH

INT21H

MOVDL,0DH;显示回车

MOVAH,2

INT21H

MOVDL,0AH;显示换行

MOVAH,2

INT21H

MOVDX,OFFSETS5;显示月数据

ADDDX,2

MOVAH,9

INT21H

MOVDX,OFFSETS2;显示‘月’字符

MOVAH,9

INT21H

MOVDX,OFFSETS6;显示日数据

ADDDX,2

MOVAH,9

INT21H

MOVDX,OFFSETS3;显示‘日’字符

MOVAH,9

INT21H

MOVDX,OFFSETS7;显示年数据

ADDDX,2

MOVAH,9

INT21H

MOVDX,OFFSETS4;显示‘年’字符

MOVAH,9

INT21H

MOVAH,4CH;返回DOS

INT21H

CODEENDS

ENDSTART

结果截图:

2.字符串的匹配设计

为掌握提示信息的设置方法及读取键入信息的方法。

编写程序实现两个字符串比较。

如相同,则显示“MATCH”,否则,显示“NOMATCH”。

程序清单:

CRLFMACRO;显示回车

MOVDL,0DH

MOVAH,02H

INT21H

MOVAH,02H

MOVDL,0AH

INT21H

ENDM

DATASEGMENT

MESS1DB'MATCH',0DH,0AH,'$'

MESS2DB'NOMATCH',0DH,0AH,'$'

MESS3DB'INPUTSTRING1!

',0DH,0AH,'$'

MESS4DB'INPUTSTRING2!

',0DH,0AH,'$'

MAXLEN1DB100

STRING1DB100DUP(?

MAXLEN2DB100

STRING2DB100DUP(?

DATAENDS

CODESEGMENT

ASSUMECS:

CODE,DS:

DATA,ES:

DATA

START:

MOVAX,DATA

MOVDS,AX

MOVES,AX

MOVAH,09H

MOVDX,OFFSETMESS3

INT21H;显示提示信息1

MOVAL,MAXLEN1

MOVBX,OFFSETSTRING1

MOV[BX],AL;最大字符缓冲

MOVAH,0AH

MOVDX,OFFSETSTRING1

INT21H;接收键入的字符串1

CRLF

MOVAH,09H

MOVDX,OFFSETMESS4

INT21H;显示提示信息2

MOVAL,MAXLEN2

MOVBX,OFFSETSTRING2

MOV[BX],AL;最大字符缓冲设置

MOVAH,0AH

MOVDX,OFFSETSTRING2

INT21H;接收键入的字符串2

CRLF

CLD

LEASI,STRING1;字符串1的地址送给SI

MOVCL,[SI+1];字符串1的字符数送给CX

MOVCH,0

BEING:

LEADI,STRING2;字符串2的地址送给DI

MOVDL,[DI+1];字符串2的字符数送给DX

MOVDH,0

J1:

MOVAL,[SI+2];字符串1的第一个字符在字符串2中匹配

CMP[DI+2],AL

JEJ3;匹配成功则跳转

J2:

INCDI;指向字符串2下一个字符

DECDX

JZNOMAT;字符串2完,不匹配

JMPJ1;字符串2没完,重新匹配

J3:

DECCX

JZMATCH;字符串1完,匹配

DECDX

JZNOMAT;字符串2完,不匹配

INCSI;指向串1下一个字符

INCDI;指向串2下一个字符

MOVAL,[SI+2]

CMP[DI+2],AL

JEJ3;匹配,跳转

DECDX

JZNOMAT;字符串2完,不匹配

LEASI,STRING1;重新从串1的第一个字符匹配

MOVCL,[SI+1]

MOVCH,0

JMPJ1

MATCH:

MOVAH,09H;输出匹配信息

MOVDX,OFFSETMESS1

INT21H

JMPNEXT

NOMAT:

MOVAH,09H;输出不匹配信息

MOVDX,OFFSETMESS2

INT21H

NEXT:

MOVAH,4CH;程序终止

INT21H

CODEENDS

ENDSTART

 

3.从键盘输入数据并显示的数据

为掌握接收键盘数据的方法,并了解将键盘数据显示时须转换为ASCII码的原理。

编写程序,将键盘接收到的四位十六进制数据转换为等值的二进制数,再显示在终端上。

程序清单:

DATASEGMENT

MSG1DB'Hex:

','$'

MSG2DB0DH,0AH,'Binary:

','$'

COUNTEQU4

BUFDB4DUP(?

DATAENDS

CODESEGMENT

ASSUMECS:

CODE,DS:

DATA

START:

MOVAX,DATA

MOVDS,AX

LEADX,MSG1

MOVAH,9

INT21H

MOVCX,COUNT

MOVSI,0

INPUT:

MOVAH,1;通过四次循环从键盘读入四位十六进制数

INT21H

MOVBUF[SI],AL

DECCX

INCSI

CMPCX,0

JNZINPUT

NEXT3:

LEADX,MSG2

MOVAH,9

INT21H

MOVCX,COUNT

MOVSI,0

NEXT2:

MOVBL,BUF[SI]

CMPBL,'9'

JBEOK;读入的字符<=9转向OK

SUBBL,7;读入字符>=9减7

OK:

PUSHCX

MOVCL,4

SHLBL,CL;逻辑左移4位,低4位à高4位

MOVCX,4;4次循环将当前处理字符的4位二进制输出

NEXT1:

MOVDL,'0'

SHLBL,1

JNCSKIP

INCDL

SKIP:

MOVAH,2

INT21H

LOOPNEXT1

POPCX;

INCSI

LOOPNEXT2;4次循环将4位十六进制数每位转换为对应的4位二进制

EXIT:

MOVAH,4CH

INT21H

CODEENDS

ENDSTART

4.字符和数据的显示程序

为掌握字符和数据的显示方法。

编写程序,先显示信息:

INPUTSTRING,THEENDFLAGIS$,再接收字符。

如为0-9,则计数器加1,并显示数据;如为非数字,则直接显示,但不技计数。

程序清单:

CRLFMACRO

MOVAH,02H

MOVDL,0DH

INT21H

MOVAH,02H

MOVDL,0AH

INT21H

ENDM

DATASEGMENT

MESS1DB'INPUT$'

MESS2DB'zifuzongshu=$'

MESS3DB'nozifuzongshu=$'

MESS4DB'shuzizifuzongshu=$'

TOTALDW?

DATAENDS

STACKSEGMENT

STADW32DUP(?

TOPDW?

STACKENDS

CODESEGMENT

ASSUMECS:

CODE,DS:

DATA,ES:

DATA,SS:

STACK

START:

MOVAX,DATA

MOVDS,AX

MOVES,AX

MOVSP,TOP;初始化

MOVBX,0000H;计数值清0

MOVAH,09H

MOVDX,OFFSETMESS1

INT21H

CRLF

XXX:

MOVAH,01H

INT21H;接收键入字符

CMPAL,20H

JZUUU;是空格键则转UUU

CMPAL,0DH

JNZIII

CRLF;是回车键则转UUU

JMPUUU

III:

CMPAL,30H

JBYYY

CMPAL,39H

JBEVVV;`0-9`转VVV

YYY:

INCBX;计数值加1

VVV:

INCTOTAL

JMPXXX

UUU:

CRLF

MOVAH,09H

LEADX,MESS2;显示字符总数

INT21H

MOVAX,TOTAL

CALLDISP

MOVAH,02H

MOVDL,'H'

INT21H

CRLF;回车换行

MOVAH,09H

MOVDX,OFFSETMESS3

INT21H;显示非数字字符总数

MOVAX,BX

CALLDISP

MOVAH,02H

MOVDL,'H'

INT21H;十六进制数标志

CRLF

MOVAH,09H

LEADX,MESS4;显示数字字符总数

INT21H

MOVAX,BX

SUBTOTAL,AX

MOVAX,TOTAL

CALLDISP

MOVAH,02H

MOVDL,'H'

INT21H

MOVAX,4C00H

INT21H

DISPPPROCNEAR;显示子程序,显示AL中的数按十六进制数方式

MOVBL,AL;AL中数送BL

KKK:

MOVDL,BL

MOVCL,04

ROLDL,CL

ANDDL,0FH

CALLDISPL;显示字节高位

MOVDL,BL

ANDDL,0FH

CALLDISPL;显示字节低位

RET

DISPPENDP

DISPLPROCNEAR

ADDDL,30H;由数值转为参应字符的ASCII码

CMPDL,3AH

JBDDD;是0-9转DDD

ADDDL,27H;是A-F

DDD:

MOVAH,02H

INT21H;显示DL中字符

RET;返回

DISPLENDP;显示子程序,显示AX中的数按十六进制数方式

DISPPROCNEAR

PUSHBX

PUSHCX

PUSHDX

PUSHAX;入栈保存

MOVAL,AH

CALLDISPP;显示高字节

POPAX

CALLDISPP

POPDX

POPCX

POPBX

RET;出栈

DISPENDP

CODEENDS

ENDSTART

四.心得体会:

经过这次课程设计,跟加深了对汇编语言的理解和认识,尤其是DOS系统的功能调用。

这次一共做了4道题目,每一道题都有其难点之处。

在做第二道题字符串匹配时就遇到了一些问题。

字符串的比较命令需用到DS与ES两个段,而DOS的0A功能只能给DS段,所以还需用到字符串的传送指令,这一点一开始确实忽略了,所以花了不少时间。

在做第三个键盘输入数据的设计时,总的思路是不断的比较,一致时再跳入显示环节。

遇到的难题是由于JZ指令的跳转围是-128~127B,而对于输入的数比较的次数较多,导致超出了围,于是用JMP作为中转,才能实现功能。

对于第三道题字符和数据的显示设计,要注意的是由于从键盘上接受的数据是以字符串形式的,所以对于数字的统计需用其对应的ASCII码。

对于第一个接受年月日并显示的设计,对年月日的接受还是以字符串的形式。

总的来说,这次课程设计让我复习了平时忽略的问题,更进一步掌握了DOS以及其他指令的功能调用。

编程之前用框图有利于理清思路。

对于编程思路,我还是坚持自顶向下的编程方法。

这样可以思路清晰,知道已经做到了哪里。

还有就是编程需要细心、耐心,或许编程的时候可能比较快,但调试的可能需要更多的时间、和耐心。

对于调试的技巧我觉得对于找不出的问题,可以试着将程序分割成几个模块,单独编程进行调试。

或许就能找出其中的问题。

这次课程设计既动脑又动手,收获很多。

五.参考文献:

1.荣标,机械工业,《微型计算机原理与接口技术第二版》

2.荣标,《微型计算机原理课程设计指导书》

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

当前位置:首页 > 解决方案 > 学习计划

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

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