江苏大学
微机原理课程设计报告
学院: 电气学院
班级:
姓名:
学号:
指导老师:
时间: 20##年1月15日
一.课程设计目的:
1.结合微型计算机原理课程的学习,进一步巩固已学的知识,同时针对计算机原理知识的具体应用,学会对系统中DOS和BIOS的使用。学会使用屏幕编辑程序——EDIT,弄懂汇编程序的上级过程以及如何运用DEBUG软件进行汇编程序的调试。
2. 学会将课本上的理论知识和实际有机的结合起来,锻炼自己分析解决实际问题的能力。提高适应实际,实践编程的能力。
3. 为了进一步巩固学习的理论知识,增强学生对所学知识的实际应用能力和运用所学的知识解决实际问题的能力,开始为期两周的课程设计。通过设计使学生在巩固所学知识的基础之上具有初步的单片机系统设计与应用能力。
二.课程设计内容:
1.接受年、月、日信息并显示的设计
为掌握响铃使用方法,并掌握年、月、日输入方法。编写程序,先显示“WHAT IS THE DATA (MM/DD/YY)?”并响铃一次,然后接受键盘输入的月/日/年信息,并显示。
2. 字符串匹配设计
为掌握提示信息的设置方法及读取键入信息的方法,编写程序实现两个字符串比较,如相同则显示“MATCH”,否则显示“NO MATCH”。
3.从键盘输入数据并显示的设计
为掌握键盘接受数据的方法,并了解将键盘数据显示时必须转换为ASCII码的原理,编写程序,将键盘接受到的四位十六进制数据转换为等值的二进制数显示。
4.字符和数据的显示设计
为掌握字符和和数据的显示方法。编写程序,先显示信息:INPUT STRING,THE END FLAG IS$,再接受字符。如为0-9,则计数器加1,并显示数据;如为非数字,则直接显示,但不计数。
三.典型题目举例:
1.接收年月日信息并显示的设计
为掌握响铃使用方法,并掌握年、月、日输入方法。编写程序,先显示“WHAT IS THE DATA (MM/DD/YY)?”并响铃一次,然后接受键盘输入的月/日/年信息,并显示。
流程图:
程序代码及注释:
DATA SEGMENT
S1 DB 'WHAT IS THE DATA (MM/DD/YY)? ',0DH,0AH,'$' ;显示字符串
S2 DB 'MONTH',0DH,0AH,'$' ;月字符串
S3 DB 'DAY',0DH,0AH,'$' ;日字符串
S4 DB 'YEAR',0DH,0AH,'$' ;年字符串
S5 DB 4 ;存放接受的月
DB ?
DB 4 DUP(‘$’)
S6 DB 4 ;存放接受的日
DB ?
DB 4 DUP(‘$’)
S7 DB 6 ;存放接受的年
DB ?
DB 6 DUP(‘$’)
DATA ENDS
CODE SEGMENT
ASSUME CS:CODE,DS:DATA ;段寄存器初始化
START:MOV AX,DATA
MOV DS,AX
MOV DX,OFFSET S1 ;显示提示信息
MOV AH,9
INT 21H
MOV DL,07H ;响铃一次
MOV AH,2
INT 21H
MOV CX,0FFFH ;延迟,用内外双重循环实现
L1:PUSH CX
MOV CX,0FFFFH
L2: LOOP L2
POP CX
LOOP L1
MOV DX,OFFSET S5 ;接受月数据,放入变量
MOV AH,0AH
INT 21H
MOV DX,OFFSET S6 ;接受日数据,放入变量
MOV AH,0AH
INT 21H
MOV DX,OFFSET S7 ;接受年数据,放入变量
MOV AH,0AH
INT 21H
MOV DL,0DH ;显示回车
MOV AH,2
INT 21H
MOV DL,0AH ;显示换行
MOV AH,2
INT 21H
MOV DX,OFFSET S5 ;显示月数据
ADD DX,2
MOV AH,9
INT 21H
MOV DX,OFFSET S2 ;显示‘月’字符
MOV AH,9
INT 21H
MOV DX,OFFSET S6 ;显示日数据
ADD DX,2
MOV AH,9
INT 21H
MOV DX,OFFSET S3 ;显示‘日’字符
MOV AH,9
INT 21H
MOV DX,OFFSET S7 ;显示年数据
ADD DX,2
MOV AH,9
INT 21H
MOV DX,OFFSET S4 ;显示‘年’字符
MOV AH,9
INT 21H
MOV AH,4CH ;返回DOS
INT 21H
CODE ENDS
END START
结果截图:
2.字符串的匹配设计
为掌握提示信息的设置方法及读取键入信息的方法。编写程序实现两个字符串比较。如相同,则显示“MATCH”,否则,显示“NO MATCH”。
程序清单:
CRLF MACRO ;显示回车
MOV DL,0DH
MOV AH,02H
INT 21H
MOV AH,02H
MOV DL,0AH
INT 21H
ENDM
DATA SEGMENT
MESS1 DB 'MATCH',0DH,0AH,'$'
MESS2 DB 'NO MATCH',0DH,0AH,'$'
MESS3 DB 'INPUT STRING1!',0DH,0AH,'$'
MESS4 DB 'INPUT STRING2!',0DH,0AH,'$'
MAXLEN1 DB 100
STRING1 DB 100 DUP(?)
MAXLEN2 DB 100
STRING2 DB 100 DUP(?)
DATA ENDS
CODE SEGMENT
ASSUME CS:CODE,DS:DATA,ES:DATA
START: MOV AX,DATA
MOV DS,AX
MOV ES,AX
MOV AH,09H
MOV DX,OFFSET MESS3
INT 21H ;显示提示信息1
MOV AL,MAXLEN1
MOV BX,OFFSET STRING1
MOV [BX],AL ;最大字符缓冲
MOV AH,0AH
MOV DX,OFFSET STRING1
INT 21H ;接收键入的字符串1
CRLF
MOV AH,09H
MOV DX,OFFSET MESS4
INT 21H ;显示提示信息2
MOV AL,MAXLEN2
MOV BX,OFFSET STRING2
MOV [BX],AL ;最大字符缓冲设置
MOV AH,0AH
MOV DX,OFFSET STRING2
INT 21H ;接收键入的字符串2
CRLF
CLD
LEA SI,STRING1 ;字符串1的地址送给SI
MOV CL,[SI+1] ;字符串1的字符数送给CX
MOV CH,0
BEING: LEA DI,STRING2 ;字符串2的地址送给DI
MOV DL,[DI+1] ;字符串2的字符数送给DX
MOV DH,0
J1: MOV AL,[SI+2] ;字符串1的第一个字符在字符串2中匹配
CMP [DI+2],AL
JE J3 ;匹配成功则跳转
J2: INC DI ;指向字符串2下一个字符
DEC DX
JZ NOMAT ;字符串2完,不匹配
JMP J1 ;字符串2没完,重新匹配
J3: DEC CX
JZ MATCH ;字符串1完,匹配
DEC DX
JZ NOMAT ;字符串2完,不匹配
INC SI ;指向串1下一个字符
INC DI ;指向串2下一个字符
MOV AL,[SI+2]
CMP [DI+2],AL
JE J3 ;匹配,跳转
DEC DX
JZ NOMAT ;字符串2完,不匹配
LEA SI,STRING1 ;重新从串1的第一个字符匹配
MOV CL,[SI+1]
MOV CH,0
JMP J1
MATCH: MOV AH,09H ;输出匹配信息
MOV DX,OFFSET MESS1
INT 21H
JMP NEXT
NOMAT: MOV AH,09H ;输出不匹配信息
MOV DX,OFFSET MESS2
INT 21H
NEXT: MOV AH,4CH ;程序终止
INT 21H
CODE ENDS
END START
3.从键盘输入数据并显示的数据
为掌握接收键盘数据的方法,并了解将键盘数据显示时须转换为ASCII码的原理。编写程序,将键盘接收到的四位十六进制数据转换为等值的二进制数,再显示在终端上。
程序清单:
DATA SEGMENT
MSG1 DB 'Hex:', '$'
MSG2 DB 0DH, 0AH, 'Binary:', '$'
COUNT EQU 4
BUF DB 4 DUP(?)
DATA ENDS
CODE SEGMENT
ASSUME CS:CODE,DS:DATA
START: MOV AX, DATA
MOV DS, AX
LEA DX, MSG1
MOV AH, 9
INT 21H
MOV CX, COUNT
MOV SI, 0
INPUT:
MOV AH, 1 ;通过四次循环从键盘读入四位十六进制数
INT 21H
MOV BUF[SI], AL
DEC CX
INC SI
CMP CX, 0
JNZ INPUT
NEXT3: LEA DX, MSG2
MOV AH, 9
INT 21H
MOV CX, COUNT
MOV SI, 0
NEXT2: MOV BL, BUF[SI]
CMP BL , '9'
JBE OK ;读入的字符<=9 转向 OK
SUB BL, 7 ;读入字符>= 9 减7
OK: PUSH CX
MOV CL ,4
SHL BL, CL ; 逻辑左移4位,低4位à高4位
MOV CX, 4 ; 4次循环将当前处理字符的4位二进制输出
NEXT1: MOV DL, '0'
SHL BL, 1
JNC SKIP
INC DL
SKIP: MOV AH, 2
INT 21H
LOOP NEXT1
POP CX ;
INC SI
LOOP NEXT2 ; 4次循环将4位十六进制数每位转换为对应的4位二进制
EXIT: MOV AH, 4CH
INT 21H
CODE ENDS
END START
4.字符和数据的显示程序
为掌握字符和数据的显示方法。编写程序,先显示信息:INPUT STRING,THE END FLAG IS$,再接收字符。如为0-9,则计数器加1,并显示数据;如为非数字,则直接显示,但不技计数。
程序清单:
CRLF MACRO
MOV AH,02H
MOV DL,0DH
INT 21H
MOV AH,02H
MOV DL,0AH
INT 21H
ENDM
DATA SEGMENT
MESS1 DB 'INPUT$'
MESS2 DB 'zifu zongshu= $'
MESS3 DB 'no zifu zongshu= $'
MESS4 DB 'shuzi zifu zongshu= $'
TOTAL DW ?
DATA ENDS
STACK SEGMENT
STA DW 32 DUP (?)
TOP DW ?
STACK ENDS
CODE SEGMENT
ASSUME CS:CODE,DS:DATA,ES:DATA,SS:STACK
START: MOV AX,DATA
MOV DS,AX
MOV ES,AX
MOV SP,TOP ;初始化
MOV BX,0000H ;计数值清0
MOV AH,09H
MOV DX,OFFSET MESS1
INT 21H
CRLF
XXX: MOV AH,01H
INT 21H ;接收键入字符
CMP AL,20H
JZ UUU ;是空格键则转UUU
CMP AL,0DH
JNZ III
CRLF ;是回车键则转UUU
JMP UUU
III: CMP AL,30H
JB YYY
CMP AL,39H
JBE VVV ;`0-9`转VVV
YYY: INC BX ;计数值加1
VVV: INC TOTAL
JMP XXX
UUU: CRLF
MOV AH,09H
LEA DX,MESS2 ;显示字符总数
INT 21H
MOV AX,TOTAL
CALL DISP
MOV AH,02H
MOV DL,'H'
INT 21H
CRLF ;回车换行
MOV AH,09H
MOV DX,OFFSET MESS3
INT 21H ;显示非数字字符总数
MOV AX,BX
CALL DISP
MOV AH,02H
MOV DL,'H'
INT 21H ;十六进制数标志
CRLF
MOV AH,09H
LEA DX,MESS4 ;显示数字字符总数
INT 21H
MOV AX,BX
SUB TOTAL,AX
MOV AX,TOTAL
CALL DISP
MOV AH,02H
MOV DL,'H'
INT 21H
MOV AX,4C00H
INT 21H
DISPP PROC NEAR ;显示子程序,显示AL中的数按十六进制数方式
MOV BL,AL ;AL中数送BL
KKK: MOV DL,BL
MOV CL,04
ROL DL,CL
AND DL,0FH
CALL DISPL ;显示字节高位
MOV DL,BL
AND DL,0FH
CALL DISPL ;显示字节低位
RET
DISPP ENDP
DISPL PROC NEAR
ADD DL,30H ;由数值转为参应字符的ASCII码
CMP DL,3AH
JB DDD ;是0-9转DDD
ADD DL,27H ;是A-F
DDD: MOV AH,02H
INT 21H ;显示DL中字符
RET ;返回
DISPL ENDP ;显示子程序,显示AX中的数按十六进制数方式
DISP PROC NEAR
PUSH BX
PUSH CX
PUSH DX
PUSH AX ;入栈保存
MOV AL,AH
CALL DISPP ;显示高字节
POP AX
CALL DISPP
POP DX
POP CX
POP BX
RET ;出栈
DISP ENDP
CODE ENDS
END START
四.心得体会:
经过这次课程设计,跟加深了对汇编语言的理解和认识,尤其是DOS系统的功能调用。这次一共做了4道题目,每一道题都有其难点之处。在做第二道题字符串匹配时就遇到了一些问题。字符串的比较命令需用到DS与ES两个段,而DOS的0A功能只能给DS段,所以还需用到字符串的传送指令,这一点一开始确实忽略了,所以花了不少时间。在做第三个键盘输入数据的设计时,总的思路是不断的比较,一致时再跳入显示环节。遇到的难题是由于JZ指令的跳转范围是-128~127B,而对于输入的数比较的次数较多,导致超出了范围,于是用JMP作为中转,才能实现功能。对于第三道题字符和数据的显示设计,要注意的是由于从键盘上接受的数据是以字符串形式的,所以对于数字的统计需用其对应的ASCII码。对于第一个接受年月日并显示的设计,对年月日的接受还是以字符串的形式。
总的来说,这次课程设计让我复习了平时忽略的问题,更进一步掌握了DOS以及其他指令的功能调用。编程之前用框图有利于理清思路。对于编程思路,我还是坚持自顶向下的编程方法。这样可以思路清晰,知道已经做到了哪里。还有就是编程需要细心、耐心,或许编程的时候可能比较快,但调试的可能需要更多的时间、和耐心。对于调试的技巧我觉得对于找不出的问题,可以试着将程序分割成几个模块,单独编程进行调试。或许就能找出其中的问题。这次课程设计既动脑又动手,收获很多。
五.参考文献:
1.张荣标,机械工业出版社,《微型计算机原理与接口技术 第二版》
2.张荣标,《微型计算机原理课程设计指导书》
微机原理课程设计设计报告姓名朱文斋班级学号30905020xx教师张荣标20xx年1月5日微机原理课程设计一目的结合微型计算机原理…
河北科技大学课程设计报告学生姓名学号专业班级课程名称学年学期指导教师年月课程设计成绩评定表目录一课程设计的目的1二设计题目1三设计…
接口技术基础实验报告学院计算机科学与技术学院班级计091学号09130220xx姓名曹恒楼指导老师顾晖时间20xx616接口技术课…
微机原理课程设计报告设计名称:LED七段数码管数字钟学院:电子信息学院班级:电科091提交时间:20##年6月15日一:设计内容设…
南京航空航天大学微机原理课程设计数据采集系统中断法微机原理课程设计数据采集系统中断法南京航空航天大学微机原理课程设计数据采集系统中…
微机原理课程设计总结以前从没有学过关于汇编语言的知识,起初学起来感觉很有难度。当知道要做课程设计的时候心里面感觉有些害怕和担心,担…
微机原理与接口技术及其课程设计心得体会本学期的微机原理和接口技术及其课程设计都已经结束。在这个过程中,我们有所付出,也有所回报,让…
微机原理课程设计总结以前从没有学过关于汇编语言的知识,起初学起来感觉很有难度。当知道要做课程设计的时候心里面感觉有些害怕和担心,担…
南京航空航天大学微机原理课程设计数据采集系统中断法微机原理课程设计数据采集系统中断法南京航空航天大学微机原理课程设计数据采集系统中…
《微机原理与接口技术》课程设计报告交通灯控制系统班级:学号:姓名:指导教师:成绩:xxxx年x月x日目录1、课程设计的目的和要求3…
微机原理课程设计设计报告姓名朱文斋班级学号30905020xx教师张荣标20xx年1月5日微机原理课程设计一目的结合微型计算机原理…