微机原理与接口技术实验指导.docx
《微机原理与接口技术实验指导.docx》由会员分享,可在线阅读,更多相关《微机原理与接口技术实验指导.docx(78页珍藏版)》请在冰豆网上搜索。
微机原理与接口技术实验指导
第一部分微机原理实验系统使用介绍
微机原理与接口技术(以下简称微机原理)实验系统是以8088微处理器为核心,支持本课程中学习过的主要接口芯片,以及在微机系统中常用的外围电路实验。
微机原理作为系统级设计的重要基础课程,在实验过程中,应本着以课堂学习的理论知识为指导,以实验验证基本原理为目标,提高学生分析能力和动手能力,通过与课堂内容相结合的实验项目的选择,加深学生对课堂学习的理论知识的巩固,加强学生对理论应用于实践的概念性认识,建立微机系统的整机概念。
微机系统是一个包括软/硬件设计的完整系统,因此实验分为两大部分,首先为汇编编程实验部分,第二部分是软/硬件结合的接口实验。
汇编编程部分不需要特定的实验系统,在PC机上使用MASM进行编程,而第二部分需要以微机原理实验系统作为实验平台。
一、微机原理实验系统组成
微机原理实验系统使用8088作为实验用CPU,从实验使用的角度上,包括以下模块:
1.实验模块电路
(1)简单I/O扩展并行输入输出电路
(2)A/D转换电路
(3)D/A转换电路
(4)8253定时/计数器
(5)8255并行I/O口扩展电路
(6)键盘扫描/显示电路
(7)8251A串行通信电路
(8)8259中断控制器
(9)8237ADMA控制器
2.通用外围电路
(10)串/并转换电路
(11)逻辑电平开关电路
(12)发光二极管显示电路
(13)脉冲发生器电路
(14)单脉冲电路
(15)继电器及驱动电路
(16)直流电机及驱动电路
(17)步进电机及驱动电路
(18)电子音响及驱动电路
(19)模拟信号、基准电压产生电路
(20)译码电路
实验台以上模块提供开放的接口,在进行各模块实验中,需要提前进行预习,根据实验电路的需要,进行合理的电路连接。
各模块的基本实验已提供电路连接方法,要求能够对提供的电路分析,理解,在此基础上,可根据提示进行扩展实验,以提高电路分析和设计能力。
(插图)
二、微机原理实验台的使用方法
1.实验台上电
(1)实验台上有一个选择开关,该开关的作用是设置实验台与PC通信时采用的波特率,波特率可以选择9600bps或者57600bps。
注意,在启动DAIS集成开发环境时,需要设置相同的波特率,才能实现实验台与PC的连接。
在上电后,更改选择开关的位置,需要按红色的RESET键方能生效。
(2)正常启动后,实验台中央的6个数码管,第一个应显示P.提示符,其它的不亮;数码管上方有三个彩色的LED,正常上电/复位后,桔红色(RST)和绿色(86)两只应亮,否则,可重新按RESET健,使系统进入正常复位状态。
2.使用实验台调试方法
实验程序的调试有两种方法
(1)借助PC机,使用COM口与实验台连接,打开PC上的DAIS集成开发环境,设置与实验台相同的波特率,就可以与实验台进行通信。
这样,可以利用集成开发环境,将程序编译,连接通过后,下载到实验台上,利用集成开发环境中的断点、单步,存储空间,寄存器状态观察等功能,边观察实验台运行情况是否正常,变进行程序的调试修改。
使用PC进行调试的方法,与高级语言编程接近,比较容易掌握,本课程一般采用该方法。
(2)实验台同时提供板上实验调试方法。
实验台通过内部采用了一块89C52芯片作为监控,支持板上直接调试,利用实验台上提供的32键键盘进行程序的调试。
(i)正常启动,显示P.提示符
(ii)键入四位数字后
按EXEC键,从该地址运行程序;
按STEP键,从该地址单步运行;
按ME键,察看该存储器单元内容,由数码管最后两位显示,光标闪烁,可修改;
继续按LS键,察看上一个存储器单元内容,可修改;
继续按NX键,察看下一个存储器单元内容,可修改
如果键入的是1个字母,A,B,C,D,按RG键,则可察看相应寄存器内容,并修改;
(插入寄存器与输入字母的对照表)
(iii)除EXEC,连续运行,只能按RESET按键,返回P.外,其它的情况下,按MON键,返回初始状态P.,以下图中未标出。
图2实验台小键盘调试使用流程示意图
板上调试方法适用于实验台提供的各模块实验的验证调试,但不适于自行设计,进行程序编程编写的方法,所以经常使用PC与实验台联调的方法。
第二部分汇编编程实验
汇编编程是微机原理课程内容的主要组成部分,也是后续接口部分实验的重要基础,对于初次接触低级编程语言汇编的学生,应该结合学过的高级语言编程,理解汇编编程的结构和方法,理解高级语言是怎样在机器上实现的。
这一部分根据汇编程序结构提供了五个实验。
实验预备知识汇编程序的建立与调试
一、汇编程序的建立
1.使用工具
(1)EDIT,记事本等文本编辑软件,编辑源程序,保存为.asm文件;
(2)ASM,MASM汇编程序,对源程序进行汇编,生成.obj文件-目标文件,以及调试用.LST-列表文件和.CRF-交叉引用表;
(3)Link连接程序,对使用的目标文件和库文件进行连接,生成.exe文件,同时调试用.map-地址映像文件;
如果源程序无语法错误,上述三步将生成可运行的.exe文件,如果运行结果无误,则完成对汇编程序的编程,如果运行后结果存在错误,需要进行调试。
(4)Debug调试程序,对.exe文件进行调试,修改,直到程序正确。
2.编程过程图3目标程序生成步骤图
(1)用文本编辑软件,编写扩展名为.asm的源文程序文件。
(2)用汇编程序对编好的源文件进行汇编。
命令行:
masm[*.asm]↙
如果源文件中存在语法错误,则汇编程序将指出错误类型及位置,可根据这些信息重新编辑源文件,直至无语法错误,汇编后,将生成指定名称的目标文件.obj。
使用MASM50汇编程序进行汇编,输入命令行masm或者masm*.asm后,根据提示,输入文件名,在汇编没有错误的情况下,如屏幕所示:
汇编程序可生成三个文件,*.obj,*.lst和*.crf。
*.obj-目标文件,用于连接生成可执行文件;
*.lst-列表文件(可选),汇编语言汇编的机器语言与汇编语言对照表,可用于调试;
*.crf-交叉引用文件(可选),给出了用户定义的所有符号和对每个符号定义、引用的行号。
(3)汇编连接
命令行:
link[*.obj][*.obj][*.lib]↙
连接程序,将多个目标程序及库文件,连接生成可执行的*.exe文件,同时可选择生成*.map文件。
*.map-地址影像文件,给出内存地址分配的有关信息。
下图所示屏幕,为Link连接两个目标文件,没有错误的情况下,生成*.exe文件。
(4)执行程序
执行*.exe文件,观察程序运行结果,如果存在错误,需要进行调试。
调试工具DEBUG是针对汇编语言程序设计的一种调试工具,熟练使用DEBUG有助于汇编语言程序员对于逻辑错误的调试。
二、汇编程序的调试
1.调试方法
DEBUG工具的调试文件为可执行文件*.exe,在命令行窗口或者DOS环境下,执行DEBUG命令:
命令行Debug[*.exe]↙
DEBUG程序如果正常启动,提示符显示为“_”。
出现“_”提示符后,根据调试的需要,输入正确的Debug命令,根据显示内容,修改源文件。
2.常用DEBUG命令
(1)D命令-内存显示命令
命令格式格式1:
D[起始地址]↙
格式2:
D[起始地址][结束地址|L字节数]↙
调试程序的过程中,可利用该命令可以察看指定范围的内存单元的内容,以确定对内存单元的修改是否正确。
可以通过命令指定显示的范围(格式2),在不指定显示长度的情况下(格式1),将显示从起始地址开始128个字节的内容,如果只写D,则将从上一个D命令显示结束的位置开始显示128个字节。
在内存显示过程中,可以通过“Ctrl+S”键暂停,按任意键可继续显示,以防显示过快,来不及察看,另外可以通过“Ctrl+S”中止该命令的执行。
(2)E命令-数据编辑命令
命令格式格式1:
E[起始地址][列表]↙
格式2:
E[起始地址]↙
调试过程中,为了进行程序测试,需要改变内存或者寄存器的数据,此时利用DEBUG的E命令可以非常方便的进行修改。
E命令可以使用一连串的数据对内存连续地址单元进行修改,此时使用格式1,也可以修改某个地址单元的内容后,按“空格”键,继续修改高地址单元内容。
使用E命令时,可以同时配合使用D命令,以确定是否正确的完成了对内存单元的修改。
(3)U命令-反汇编命令
命令格式:
U[起始地址][结束地址]
调试过程中,可以利用U命令将目标程序反汇编为汇编程序,以观察汇编指令的存放位置,汇编指令的正确与否,对于无源码的目标程序,还可以利用反汇编获取目标程序的源码。
(4)G命令-运行程序命令
命令格式:
G[=起始地址][第一断点地址][第二断点地址]….
调试过程中,可以利用G命令运行程序,观察结果的正确性,或者设置断点,利用G命令观察程序运行到某一位置是否正确,G命令最多可以设置10个断点,当程序运行置断点时,停止执行,并显示当前所有寄存器和标志位的内容,以及下一条将要执行的指令。
如果G命令无起始地址,则从当前CS:
IP内容为开始运行。
(5)T命令-单步执行命令
命令格式格式1:
T[=地址]
格式2:
T[=地址][执行指令的条数]
调试过程中,可以利用该指令单步执行,从指定地址开始(如果不指定,则从CS:
IP开始),执行一条指令(格式1)或者执行指定条数的指令(格式2)后,停止执行,并显示当前所有寄存器和标志位的内容。
(6)R命令-寄存器访问命令
命令格式格式1:
R
格式2:
R寄存器名称
一般汇编程序中,会频繁的使用寄存器,使用R命令,可以在调试程序的过程中方便的进行寄存器内容的察看和修改。
如果不指定寄存器名称(格式1),则显示所有寄存器和标志位内容;可以指定需要察看的寄存器的名称(格式2),只显示察看寄存器的内容。
(7)Q命令-Debug退出命令
命令格式Q
Debug程序使用结束后,使用该命令退出Debug。
(补充使用实例,插图)
实验一顺序结构的汇编程序设计
一、实验目的
1.掌握完整的汇编程序结构。
2.熟练汇编程序的建立和调试方法。
3.掌握简单的顺序结构汇编程序设计方法。
二、预习要求
阅读本实验例程部分,根据实验内容要求,画出程序流程,以便能够充分利用实验时间编程调试。
三、实验设备
带有MASM汇编工具的PC机一台
四、实验内容
1.拆字与拼字程序
将地址4000H单元的内容,高4位送入4002H单元,低四位送入4001H单元,即将指定地址单元中存放的一个字节的两位16进制数字进行拆分后,分别存入另外两个单元。
例如:
单元4000H的内容为27H,则程序执行结束后,4001H的内容应为低位07H,4002H的内容应为高位02H。
拆字程序常用于数据的显示,通常如果要显示单元内容,实际上是逐个的显示该单元内容的每个数字,因此首先需要将单元内容拆分为数字,然后PC机上使用数字的ASCII,通过DOS调用进行显示,实验台则是通过LED字形码显示,关于怎样进行显示的问题,将在后续实验中进一步详细说明。
拆字程序用于显示,即用于数据的输出,而拼字程序则相反,用于数据的输入。
从键盘输入的数据时,需要逐个的输入数据的各位数字(十六进制或者BCD十进制),因此需要拼字程序将两位数字拼成一个字节长度的数据存放到内存单元中。
2.码制转换程序
数据的输出或者由按键键入过程中,常使用的是ASCII码形式,因此,在上述拆字/拼字的基础上,还需要将各位数字转换为对应ASCII码,或者将ASCII码转换为数字。
编写码制转换程序时,主要是要考虑两种编码之间的对应关系,找到转换规律,编写相应程序。
考虑到程序的复杂性,这里假设内存单元中存放的为BCD(压缩十进制)编码,只需要考虑数字0~9,对应转换即可。
(码制对应关系可参考实验指导书附表1)
可通过任选以下码制转换程序,通过编程实现。
(1)BCD(压缩十进制)编码转换为ASCII码
(2)ASCII码转换为BCD编码
要求首先编写拆字/拼字程序之一,在此基础上,对拆字程序进行对应扩展,实现BCD编码到ASCII码的转换,对拼字程序进行对应扩展,实现BCD编码转换为十六进制编码。
按照汇编编程的建立方法,建立源文件,解决语法错误,生成EXE文件后,使用DEBUG工具调试查看结果,以确定程序的编写是否正确。
五、例程分析
1.两位BCD编码转换为二进制码
BCD编码,用于表示十进制数,十进制各位上的数字0~9分别用对应的四位二进制数表示,两位BCD编码即8位二进制数,一个字节。
将BCD编码转换为二进制,实际上就是计算其表示的数据大小,而BCD编码为十进制,因此应按照十进制进行计算:
B=D0*100+D1*101+D2*102+…+Dn*10n
由于还没有学习其他程序结构,因此这里假设对两位BCD编码进行转换,即只考虑D0和D1,如果对多位BCD编码进行转换,可以使用后续学到的循环结构。
参考程序:
DATASEGMENT
BCD-DATADB56H
B-DATADB?
DATAENDS
CODESEGMENT
ASSUMECS:
CODE,DS:
DATA
START:
MOVAX,DATA
MOVDS,AX
MOVAL,BCD-DATA
MOVAH,AL
ANDAL,0FH
ANDAH,FOH
MOVCL,4图4两位BCD码转换为二进制数
SHRAH,CL
MOVCL,1
SHLAH,CL
MOVDL,AH
SHLAH,CL
ADDAH,DL
ADDAH,AL
MOVB-DATA,AH
MOVAH,4CH;在DOS环境或者命令行窗口运行汇编程序时,程序的最
INT21H;后需要进行DOS功能调用4CH,以返回操作系统。
CODEENDS
ENDSTART
2.简单的运算程序
以下举例说明如何编程实现简单的算术运算,因为较复杂的算术运算往往需要使用循环和分支程序结构。
编写程序实现((B1+B2-B3)/B4*B5)2—〉W,Bi为字节型变量,W为字变量,不考虑溢出问题。
参考程序如下:
DATASEGMENT
B1DB12H
B2DB0CH
B3DB1FH
B4DB03H
B5DB4AH
WDW?
DATAENDS
CODESEGMENT
ASSUMECS:
CODE,DS:
DATA
START:
MOVAX,DATA
MOVDS,AX
MOVAL,B1
ADDAL,B2
SUBAL,B3
XORAH,AH
DIVB4
MULB5
MULAX
MOVW,AX
MOVW+2,AX
MOVAH,4CH
INT21H
CODEENDS
ENDSTART
提示:
对于初次编写汇编程序的大家,编程时应注意的问题:
(1)语法问题,应注意指令格式对各操作数寻址方式的要求。
(2)语法问题,应注意操作数类型的匹配。
(3)语法问题,伪指令和实指令都必须包含在段定义和段结束之间的段。
(4)逻辑问题,ASSUME不能自动加载数据段段地址,因此代码段部分,首先需要执行数据段段地址加载指令段。
(5)逻辑问题,在编程过程中,有时需要对反复使用的寄存器内容进行转存,否则其内容有可能被破坏,而导致错误的运行结果。
编程过程中,请大家根据自己遇到的问题,不断的总结整理,积累编程经验,这对于提高编程能力有很大的帮助。
六、思考题
1.写出实现将AX的值赋为十进制数56的汇编语句,如果该将AX的值赋为十进制数56的BCD编码,则传送语句是否一样?
2.BCD编码转换为ASCII,与将十六进制数转换为ASCII,有何区别?
3.尝试画出如何将八位二进制编码转换为BCD编码(十进制)的流程。
七、实验报告内容要求
1.画出所编写的汇编程序的流程图。
2.列出所编写的汇编程序代码,对主要语句进行注释。
3.写出调试的过程,调试中遇到的主要问题和解决方法。
4.写出实验收获与不足,以及对实验的相关意见。
实验二常用DOS调用实现输入/显示程序设计
一、实验目的
1.掌握常用的DOS功能调用的使用方法。
2.掌握利用DOS功能调用方法,作为PC机调试的一种方法,用于显示信息。
二、预习要求
阅读本实验例程部分,根据实验内容要求,画出程序流程,以便能够充分利用实验时间编程调试。
三、实验设备
带有MASM汇编工具的PC机一台
四、实验内容
1.字符输入/输出功能调用
由键盘输入一个字母的小写形式,将其变换为大写形式输出。
分析:
通过这个小程序的编写,熟悉01H号功能调用,从键盘输入一个字符,02号功能调用,从显示器上显示一个字符。
应注意DOS调用的使用方法,返回数据所在位置,同时应注意对输入字符合法性的验证,但需要使用分支结构程序设计知识,因此,此处可以不加合法性验证,在学习了分支结构程序设计后,将程序补充完整。
2.字符串输入/输出功能调用
从键盘输入一字符串,然后在下一行,将该字符串输出。
分析:
通过该题目的设计,熟悉DOS功能调用的09号功能-字符串输出和10号功能调用-字符串输入。
五、例程分析
1.DOS功能调用
(1)系统调用的方法
所有系统功能的调用方法都是一致的,包括以下几步:
✓将入口参数传递到指定寄存器中;
✓将系统调用子功能号写入AH寄存器中;
✓使用INT21H指令执行功能调用;
✓通过指定的寄存器获取出口参数,或者无出口参数;
(2)常用的几种DOS功能调用
①01H号功能调用-单字符键盘输入
调用格式:
MOVAH,01H
INT21H
该功能调用执行时,等待从键盘输入的单个字符,当有键按下的时候,将按键的ASCII值送入AL寄存器中,并在屏幕上显示按下的字符,此调用没有入口参数,调用完成后,通过读取AL寄存器的值,获取按键ASCII。
②02H号功能调用-单字符显示
调用格式:
MOVDL,‘字符’
MOVAH,02H
INT21H
该调用在显示屏幕上显示一个字符,调用时,将待显示字符的ASCII值送入DL寄存器后,调用02H号功能调用,进行显示。
③09H号功能调用-显示字符串
调用格式:
MOVDS,字符串段首地址
MOVDX,字符串段内偏移量
MOVAH,09H
INT21H
该调用将在屏幕上显示以DS:
DX作在起始地址,以’$’结束的一串字符串,因此需要在调用前,需要将字符串的起始地址存放在指定的DS:
DX寄存器中。
例:
BUFDB‘Hello!
$’
…
MOVAX,SEGBUF
MOVDS,AX
LEADX,BUF
MOVAH,09H
INT21H
④0AH号功能调用-字符串输入
调用格式:
MOVDS,字符串输入缓冲区段首地址
MOVDX,字符串输入缓冲区段内偏移地址
MOVAH,0AH
INT21H
该功能调用执行过程中,首先需要一块用于存放写入字符的缓冲区,并将缓冲区的起始地址写入DS:
DX起始的位置,在该缓冲区的第一个字节写入缓冲区允许写入的最大字符数,系统调用结束后,将实际输入的字符数写入第二个字节,而将键盘输入,写入指定起始地址开始的缓冲区的第三个单元开始的位置,键盘输入回车键作为字符串输入结束标记。
如果实际输入的字符数多于允许写入的最多字符数,则响铃报警。
⑤4CH号功能调用-返回操作系统
调用格式:
MOVAH,4CH
INT21H
结束当前正在执行的程序,并将控制权交给启动这个程序的上一级,多用于汇编运行结束后,返回DOS操作系统。
2.DOS功能调用例程
从键盘上输入一个字符串,然后将该字符串逆序输出。
参考程序如下:
DATASEGMENT
BUFDB50DUP(?
)
DATAENDS
CODESEGMENT
ASSUMECS:
CODE,DS:
DATA
START:
MOVAX,DATA
MOVDS,AX
MOVBUF,20;输入缓冲区第一个字节存放允许输入的最多字符数
MOVDX,OFFSETBUF;10号功能调用,数据缓冲区起始地址参数存入DX
MOVAH,0AH
INT21H
LEASI,BUF
ADDSI,2
MOVBX,SI
ADDBL,byteptr[BUF+1];10号功能调用,缓冲区的第二个字节存放实际输入的字符数。
ADCBH,0
MOVbyteptr[BX+2],'$';09号输出字符串,字符串要以’$’结束。
MOVDI,BX
L:
MOVAL,[SI]
XCHGAL,[DI]
MOV[SI],AL
INCSI
DECDI
CMPSI,DI
JNGL
MOVAL,0DH
MOVAH,02H
INT21H
LEADX,BUF
ADDDX,2;输出时,应注意,缓冲区的第三个字节开始才是输入的字符。
MOVAH,09H
INT21H
MOVAH,4CH
INT21H
CODEENDS
ENDSTART
六、思考题
例程中加黑的三行代码的功能是什么?
去掉后,程序运行的结果有什么改变?
七、实验报告内容要求
1.画出所编写的汇编程序的流程图。
2.列出所编写的汇编程序代码,对主要语句进行注释。
3.写出调试的过程,调试中遇到的主要问题和解决方法。
4.写出实验收获与不足,以及对实验的相关意见。
实验三分支结构的汇编程序设计
一、实验目的
1.掌握单分支汇编程序的结构、编写和调试方法。
2.理解多分支汇编程序的结构、编写和调试方法。
3.理解高级语言中分支结构是怎样实现的。
二、预习要求
阅读本实验例程部分,根据实验内容要求,画出程序流程,以便能够充分利用实验时间编程调试。
三、实验设备
带有MASM汇编工具的PC机一台
四、实验内容
1.函数赋值
在内存单元BUF中存放着一个8位带符号二进制数X,试根据下列函数关系编写程序求Y的值,并将结果存入RESULT单元。
当X<0,Y=-1;
当X=0,Y=0;
当X>0,Y=1;
该题目是一个简单的分支结构程序,根据X与0的关系判断,进行不同的处理,即转移到不同的指令处执行,从而实现对Y的不同赋值操作。
2.数据区移动
设计程序实现数据块在存储器的移动,其实质是将数据块从内存的一个位置整块复制到内存的另一个区域。
仔细分析,源数据块与目的数据块之间存在以下三种可能。
(1)源数据块与目的数据块之间不存在重叠的单元,即两个数据块为独立的数据块。
此时,两个数据块之间只需要顺序的从源地址传送到目的地址,不论从高地址到低地址进行传送,还是从低地址到高地址进行传送,都不会影响传送的正确性。
(2)源数据块在目的数据块之前,二者之间存在重叠单元。
(3)源数据块在目的数据块之后,二者之间存在重叠单元。