微机原理课程设计报告liWord格式.docx
- 文档编号:16629507
- 上传时间:2022-11-24
- 格式:DOCX
- 页数:14
- 大小:36.98KB
微机原理课程设计报告liWord格式.docx
《微机原理课程设计报告liWord格式.docx》由会员分享,可在线阅读,更多相关《微机原理课程设计报告liWord格式.docx(14页珍藏版)》请在冰豆网上搜索。
入口
流程图:
分3次输入月、日、年
分3次显示月、日、年
程序代码及注释:
DATASEGMENT
S1DB'
WHATISTHEDATA(MM/DD/YY)?
'
0DH,0AH,'
$'
;
显示字符串
S2DB'
MONTH'
月字符串
S3DB'
DAY'
日字符串
S4DB'
YEAR'
年字符串
S5DB4;
存放接受的月
DB?
DB4DUP(‘$’)
S6DB4;
存放接受的日
S7DB6;
存放接受的年
DB6DUP(‘$’)
DATAENDS
CODESEGMENT
ASSUMECS:
CODE,DS:
DATA;
段寄存器初始化
START:
MOVAX,DATA
MOVDS,AX
MOVDX,OFFSETS1;
显示提示信息
MOVAH,9
INT21H
MOVDL,07H;
响铃一次
MOVAH,2
MOVCX,0FFFH;
延迟,用内外双重循环实现
L1:
PUSHCX
MOVCX,0FFFFH
L2:
LOOPL2
POPCX
LOOPL1
MOVDX,OFFSETS5;
接受月数据,放入变量
MOVAH,0AH
MOVDX,OFFSETS6;
接受日数据,放入变量
MOVDX,OFFSETS7;
接受年数据,放入变量
MOVDL,0DH;
显示回车
MOVDL,0AH;
显示换行
显示月数据
ADDDX,2
MOVDX,OFFSETS2;
显示‘月’字符
显示日数据
MOVDX,OFFSETS3;
显示‘日’字符
INT21H
显示年数据
MOVDX,OFFSETS4;
显示‘年’字符
MOVAH,4CH;
CODEENDS
ENDSTART
结果截图:
2.字符串的匹配设计
为掌握提示信息的设置方法及读取键入信息的方法。
编写程序实现两个字符串比较。
如相同,则显示“MATCH”,否则,显示“NOMATCH”。
程序清单:
CRLFMACRO;
MOVDL,0DH
MOVAH,02H
INT21H
MOVDL,0AH
INT21H
ENDM
DATASEGMENT
MESS1DB'
MATCH'
MESS2DB'
NOMATCH'
MESS3DB'
INPUTSTRING1!
'
MESS4DB'
INPUTSTRING2!
MAXLEN1DB100
STRING1DB100DUP(?
)
MAXLEN2DB100
STRING2DB100DUP(?
DATA,ES:
DATA
MOVAX,DATA
MOVDS,AX
MOVES,AX
MOVAH,09H
MOVDX,OFFSETMESS3
INT21H;
显示提示信息1
MOVAL,MAXLEN1
MOVBX,OFFSETSTRING1
MOV[BX],AL;
最大字符缓冲
MOVDX,OFFSETSTRING1
接收键入的字符串1
CRLF
MOVDX,OFFSETMESS4
显示提示信息2
MOVAL,MAXLEN2
MOVBX,OFFSETSTRING2
最大字符缓冲设置
MOVDX,OFFSETSTRING2
INT21H;
接收键入的字符串2
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完,匹配
INCSI;
指向串1下一个字符
INCDI;
指向串2下一个字符
MOVAL,[SI+2]
JEJ3;
匹配,跳转
LEASI,STRING1;
重新从串1的第一个字符匹配
MOVCL,[SI+1]
JMPJ1
MATCH:
MOVAH,09H;
输出匹配信息
MOVDX,OFFSETMESS1
JMPNEXT
NOMAT:
输出不匹配信息
MOVDX,OFFSETMESS2
NEXT:
MOVAH,4CH;
程序终止
CODEENDS
ENDSTART
3.从键盘输入数据并显示的数据
为掌握接收键盘数据的方法,并了解将键盘数据显示时须转换为ASCII码的原理。
编写程序,将键盘接收到的四位十六进制数据转换为等值的二进制数,再显示在终端上。
DATASEGMENT
MSG1DB'
Hex:
'
MSG2DB0DH,0AH,'
Binary:
COUNTEQU4
BUFDB4DUP(?
MOVAX,DATA
MOVDS,AX
LEADX,MSG1
MOVAH,9
INT21H
MOVCX,COUNT
MOVSI,0
INPUT:
MOVAH,1;
通过四次循环从键盘读入四位十六进制数
MOVBUF[SI],AL
DECCX
INCSI
CMPCX,0
JNZINPUT
NEXT3:
LEADX,MSG2
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
LOOPNEXT1
POPCX;
LOOPNEXT2;
4次循环将4位十六进制数每位转换为对应的4位二进制
EXIT:
MOVAH,4CH
ENDSTART
4.字符和数据的显示程序
为掌握字符和数据的显示方法。
编写程序,先显示信息:
INPUTSTRING,THEENDFLAGIS$,再接收字符。
如为0-9,则计数器加1,并显示数据;
如为非数字,则直接显示,但不技计数。
CRLFMACRO
MOVAH,02H
MOVDL,0DH
MOVDL,0AH
ENDM
MESS1DB'
INPUT$'
MESS2DB'
zifuzongshu=$'
MESS3DB'
nozifuzongshu=$'
shuzizifuzongshu=$'
TOTALDW?
STACKSEGMENT
STADW32DUP(?
TOPDW?
STACKENDS
DATA,SS:
STACK
MOVSP,TOP;
初始化
MOVBX,0000H;
计数值清0
MOVAH,09H
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:
LEADX,MESS2;
显示字符总数
MOVAX,TOTAL
CALLDISP
MOVDL,'
H'
回车换行
MOVAH,09H
INT21H;
显示非数字字符总数
MOVAX,BX
CALLDISP
十六进制数标志
LEADX,MESS4;
显示数字字符总数
SUBTOTAL,AX
MOVAX,4C00H
DISPPPROCNEAR;
显示子程序,显示AL中的数按十六进制数方式
MOVBL,AL;
AL中数送BL
KKK:
MOVDL,BL
MOVCL,04
ROLDL,CL
ANDDL,0FH
CALLDISPL;
显示字节高位
显示字节低位
RET
DISPPENDP
DISPLPROCNEAR
ADDDL,30H;
由数值转为参应字符的ASCII码
CMPDL,3AH
JBDDD;
是0-9转DDD
ADDDL,27H;
是A-F
DDD:
显示DL中字符
RET;
返回
DISPLENDP;
显示子程序,显示AX中的数按十六进制数方式
DISPPROCNEAR
PUSHBX
PUSHCX
PUSHDX
PUSHAX;
入栈保存
MOVAL,AH
CALLDISPP;
显示高字节
POPAX
CALLDISPP
POPDX
POPBX
出栈
DISPENDP
ENDSTART
四.心得体会:
经过这次课程设计,跟加深了对汇编语言的理解和认识,尤其是DOS系统的功能调用。
这次一共做了4道题目,每一道题都有其难点之处。
在做第二道题字符串匹配时就遇到了一些问题。
字符串的比较命令需用到DS与ES两个段,而DOS的0A功能只能给DS段,所以还需用到字符串的传送指令,这一点一开始确实忽略了,所以花了不少时间。
在做第三个键盘输入数据的设计时,总的思路是不断的比较,一致时再跳入显示环节。
遇到的难题是由于JZ指令的跳转范围是-128~127B,而对于输入的数比较的次数较多,导致超出了范围,于是用JMP作为中转,才能实现功能。
对于第三道题字符和数据的显示设计,要注意的是由于从键盘上接受的数据是以字符串形式的,所以对于数字的统计需用其对应的ASCII码。
对于第一个接受年月日并显示的设计,对年月日的接受还是以字符串的形式。
总的来说,这次课程设计让我复习了平时忽略的问题,更进一步掌握了DOS以及其他指令的功能调用。
编程之前用框图有利于理清思路。
对于编程思路,我还是坚持自顶向下的编程方法。
这样可以思路清晰,知道已经做到了哪里。
还有就是编程需要细心、耐心,或许编程的时候可能比较快,但调试的可能需要更多的时间、和耐心。
对于调试的技巧我觉得对于找不出的问题,可以试着将程序分割成几个模块,单独编程进行调试。
或许就能找出其中的问题。
这次课程设计既动脑又动手,收获很多。
五.参考文献:
1.张荣标,机械工业出版社,《微型计算机原理与接口技术第二版》
2.张荣标,《微型计算机原理课程设计指导书》
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 微机 原理 课程设计 报告 li
![提示](https://static.bdocx.com/images/bang_tan.gif)