《微机原理与接口技术实验指导(2014)》由会员分享,可在线阅读,更多相关《微机原理与接口技术实验指导(2014)(108页珍藏版)》请在金锄头文库上搜索。
1、微型计算机原理与接口技术实验教程微机应用实验室2014年9月前言本课程是为了配合微机原理与接口技术的学习开设的实验课程,目的在于通过实践加深同学们对理论知识的认知和理解,熟悉汇编语言程序的编制和调试,熟悉通用的微机接口电路,为今后的学习和工作打下基础。由于课程时间安排比较紧,有一些程序设计的基础知识需要同学们自行预习并掌握,主要内容都在本讲义的附录中,这里简单的列举一下,便于大家查找:1、 DOS的使用初步(这一部分由实验辅导教师讲授)2、 Turbo Assembler 的使用(详见附录一)3、 Turbo Debugger 的使用(详见附录一)4、 接口实验所采用的实验平台TPC-H的基本
2、构成(详见附录二)5、 基于TPC-H系统的汇编语言程序设计(详见附录二)实验要求及实验报告书写规范实验要求:1、 实验前有预习并写有预习报告(程序框图和源程序)2、 熟悉实验仪器,操作规范、安全3、 能独立完成实验4、 能独立分析并解决实验中出现的问题5、 能独立回答指导教师实验中提出的问题实验报告书写规范:实验报告应包括下面内容,可以打印,每次实验上交上次实验的实验报告1、 实验内容2、 实验目的3、 实验原理4、 实验采用的电路图(部分实验没有)5、 程序的流程图6、 源程序7、 实验结果及分析8、 思考题(未布置的省略)目录实验要求及实验报告书写规范4第一部分 汇编语言程序设计 5实验
3、一 汇编语言程序的编辑与调试 6实验二 顺序程序设计 8实验三 循环程序的设计 11实验四 分支程序的设计 19实验五 子程序结构的设计方法 25实验六 图形方式程序设计基础 30第二部分 接口技术实验 49实验七 可编程定时器/计数器(8253)52实验八 中断 54实验九 可编程并行接口(8255) 59实验十 数/模转换器 64实验十一 模/数转换器 66实验十二 串行通信69附录一 71附录二 91第一部分 汇编语言程序设计 这一部分含六个实验,目的是熟练掌握汇编语言程序设计的方法,掌握使用TD进行程序调试的方法,相关内容见附录一。实验一 汇编语言程序的编辑与调试【预习准备】预习附录一
4、的内容,特别是TD的使用部分。【实验目的】学习汇编源程序的编辑、编译、链接、执行全过程。学习编辑文件、TASM、TLINK的使用方法以及汇编语言的语法规则。学习使用TD对程序进行调试的方法。【程序1】显示5行HELLO。DATASEGMENT MESGDBHELLODB0 , 0 , 0; DATAENDSCODESEGMENTUSE16ASSUMECS: CODE , DS: DATABEG:MOVAX , DATAMOVDS , AXMOVES , AX; MOVCX , 5LL1:MOVMESG+5 , 0DH; MOVMESG+6 , 0AH; MOVMESG+7 , $ ; CALL
5、DISPMOVMESG+5 , 0; MOVMESG+6 , 0; MOVMESG+7 , 0; LOOPLL1MOVAH , 4CHINT21HDISPPROCMOVAH , 9MOVDX , OFFSET MESGINT21HRETDISPENDPCODEENDSENDBEG【实验步骤】1、将程序1输入并存储为hello.asm文件2、编译与链接首先对源代码进行编译,指令为:C:TASM HELLO / zi 生成HELLO.OBJ编译如果报错,需要回到编辑窗口修改源代码,存盘后重新编译编译成功后,链接生成可执行文件C:TLINK HELLO / v / 3 生成HELLO.EXE3、 启
6、动调试工具TD (Turbo Debugger)键入:C:TD HELLO成功启动TD之后,TD进入MODULE显示模式,屏幕上显示HELLO-ASM源程序,一个三角形符号指示出了标号为BEG的那条指令是启动指令。4、 动态调试(按照以下的步骤学习掌握TD的用法)(1) 连续执行程序按F9键(即Run | Run),即可从BEG开始连续执行程序。(2) 查看执行结果按Alt+F5键(即Window | User screen),临时切换到DOS屏幕,可查看程序的执行结果,即5行HELLO。注意:Alt键要多按一会儿,直到快捷键提示区更换提示内容之后再按F5键。按任意键可以恢复MODULE窗口内
7、容。(3) 使光标重新指向启动指令当程序运行结束(三角形光标消失),按Ctr1+F2(Run|Program rest)可以重新装入程序并使光标指向启动指令。(4) 程序的单步执行单步操作一次仅执行了一条指令,有3个单步操作命令,它们的区别仅在于跟踪的情况不同。 F8 (Run | Step over) 单步操作。执行CALL和INT n指令的时候,不跟踪相关的子程序。不眼踪的含义是指在进入相关子程序后,自动地连续执行子程序指令直到返回。所以,宏观上看不到跟踪的效果。 F7 (Run | Trace into) 单步操作。执行CALL指令能够跟踪子程序,随即暂停,等待用户的下一步操作。但是在遇
8、到INT n指令时与F8一样,进入服务程序后立即自动地连续执行服务程序直到返回。 Alt+F7 (Run | Instruction trace)单步操作。真正意义上的单步操作,执行CALL和INT n指令进入相关子程序之后立即停止,等待用户的下一步操作。实践证明:用Alt+F7跟进服务程序以后,如果再执行单步操作,很容易使系统瘫痪。因此,请读者慎用。编者认为:Alt+F7的用途在于跟进中断服务程序以后,可以了解服务程序的结构,如果服务程序是系统设计的 (如INT 21H,INT 10H等),应当用F8操作。(5) 断点的设置和取消按、键,使光标指向欲设置断点的指令,再按F2键 (Breakp
9、oints | Toggle),则红色光条覆盖光标处的指令,表示断点设置成功,重复上述操作,可以设置多个断点。将光标移到红色光条覆盖的指令,再次按下F2键,红色光条消失,表明此处断点撤销。设置断点的目的是使程序执行到断点指令时暂停,以便检查执行结果。(6) 检查单步执行结果指令执行后一定会使目标寄存器和状态标志发生变化,欲查看执行效果,怎么办? 在CPU窗口调试时因为窗口中有寄存器、标志寄存器显示窗口,所以,当前指令执行后,可以从相关的显示窗口中看到结果。 在MODULE窗口调试时选中View |Registers可弹出寄存器和标志寄存器显示窗口,就可以查看执行结果。(7) 检查内存数据区的内
10、容如果被调试程序要对数据段或附加段进行操作,怎样检查结果?关键问题是要找出用户程序的数据段或附加段。以例题1为例,说明这一操作的实现过程。 如果调试是在MODULE窗口进行首先选择View | Dump ,弹出内存数据显示窗口,接着再按Ctrl+S弹出一个对话框,用户键入HELLO-用单引号括起来的这一字符串是例1用户数据段中设置的内容,TD根据用户的提示立即找出并显示用户程序数据区。做好以上准备工作之后,按F8键单步执行指令,就可以看到用户数据段内容的变化。例1中的语句 就是为此项调试而设置的。 如果调试是在CPU窗口进行首先按Tab键,使内存数据显示区成为活动区,接下来的工作则与在MODU
11、LE窗口的调试是相同的。5、程序修改下面的程序采用比较法,将一个8位二进制数转换成十进制数显示,其设计方法拙劣,语法错误很多,希望以它为蓝本,练习源程序的编辑、编译、链接和调试。同学应照原样编辑源程序,汇编之后,必定给出若干错误信息,再根据错误提示,修改源程序,直到汇编后没有错误时为止,然后进行链接、执行。正确的执行结果是在屏幕上显示:100 + 9 = 109程序清单:;FILENAME:EXA111.ASMDATASEGMENT N1DW0809H , ABN2DB100SUNDB?MESGDB100+9=DB30H , 30H , 30H; 3个0的ASCII码DATAENDSCODES
12、EGMENT ASSUMECS: CODE , DS: DATABEG:MOVDS , DATA; 段基址DSMOVBX , OFFSETSUMMOVAH , N1; 9AHMOVAL , N2; 100ALADDAH , ALMOVBX , AH; 和数SUM单元CALLN2_10MOVAH , 9MOVDX , OFFSET MESGINT21HMOVAH , 4CHINT21HN2_10PROC; 二进制数十进制数 ASCII码LAST:CMPBX , 100; 和数与100比较JCNEXT1; 小于100转SUBBX , 100; 否则,和数减10O INCBX+7; 百位数加1JMP LASTJMPLAST NEXT1:CMPBX , 10; 余数与10比较JCNEXT2; 小于10转SUBBX , 10; 否则,余数减10INCBX+8; 十位数加1JMPNEXT1NEXT2:ADDBX+9 , SUM; 生成个位数RETN2_10:ENDPCODEENDSENDBEG【课堂考核】随机抽查实验步骤4的掌握情况【实验报告】1、附上实验步骤5中的错误源代码2、回答错误原因及给出修改好的代码实验二 顺序程序设计【实验目的】学习汇编语言基本操作指令和伪指令的