微机原理及应用实验指导.docx
《微机原理及应用实验指导.docx》由会员分享,可在线阅读,更多相关《微机原理及应用实验指导.docx(38页珍藏版)》请在冰豆网上搜索。
微机原理及应用实验指导
《微机原理及应用》实验指导书
(电气、热动专业)
邢化玲编写
西北农林科技大学水利与建筑工程学院
2011年12月
第一章汇编语言程序设计实验
1.1汇编语言程序设计的实验环境及上机步骤
1.1.1实验环境
汇编语言程序设计的实验环境如下:
(1)硬件环境
微型计算机(Intelx86系列CPU)一台
(2)软件环境
Windows98/2000/XP操作系统
任意一种文本编辑器(EDIT、NOTEPAD(记事本)等)
汇编程序(MASM.EXE)
连接程序(LINK.EXE)
调试程序(TD.EXE)
1.1.2上机实验步骤
下面介绍的上机实验步骤适用于实验3和实验4,实验1和实验2仅使用TD.EXE。
(1)确定源程序的存放目录
在D盘的根目录下创建存放源程序的目录,如目录名为ASM,并把EDIT.COM、MASM.EXE、LINK.EXE、TD.EXE都拷贝到此目录中。
(2)建立ASM源程序
建立ASM源程序可以使用EDIT或记事本文本编辑器。
下面的例子说明了用EDIT文本编辑器来建立ASM源程序的步骤(假定要建立的源程序名为HELLO.ASM)。
在Windows中点击桌面左下角的“开始”按钮→选择“运行”→在弹出的窗口中输入“EDIT.COMD:
\ASM\HELLO.ASM”,屏幕上出现EDIT的编辑窗口。
窗口标题行显示了EDIT程序的完整路径名。
紧接着标题行下面的是菜单行,窗口最下面一行是提示行。
菜单可以用Alt键激活,然后用方向键选择菜单项,也可以直接用Alt-F打开File文件菜单,用Alt-E打开Edit编辑菜单,等等。
编辑窗口用于输入源程序,源程序输入完毕后,用Alt-F打开File菜单,用其中的Save功能将文件存盘。
如果在键入EDIT命令时未给出源程序文件名,则这时会弹出一个“Saveas”窗口,在这个窗口中输入你想要保存的源程序路径和文件名(本例中为D:
\ASM\HELLO.ASM)。
(3)用MASM.EXE汇编源程序产生OBJ目标文件
源文件HELLO.ASM建立后,要使用汇编程序对源程序文件汇编,汇编后产生二进制的目标文件(.OBJ文件)。
在DOS命令提示符窗口中的具体操作方法如下:
选择“开始”→“程序”→“附件”→“命令提示符”,打开DOS命令提示符窗口,然后用CD命令转到源程序目录下,接着输入MASM命令:
D:
\ASM>MASMHELLO.ASM<回车>
操作时的屏幕显示如图1-1所示。
如果没有错误,MASM就会在当前目录下建立一个HELLO.OBJ文件。
如果源文件有错误,MASM会指出错误的行号和错误的原因。
图1-2是在汇编过程中检查出两个错误的例子。
在这个例子中,可以看到源程序的错误类型有两类:
警告错误(WarningErrors)。
警告错误不影响程序的运行,但可能会得出错误的结果。
此例中无警告错误。
严重错误(SevereErrors)。
对于严重错误,MASM将无法生成OBJ文件。
此例中有一个严重错误。
在错误信息中,圆括号里的数字为有错误的行号(第2行),后面给出了错误类型及具体错误原因。
如果出现了严重错误,你必须重新进入EDIT编辑器,根据错误的行号和错误原因来改正源程序中的错误,直到汇编没有错为止。
(4)用LINK.EXE产生EXE可执行文件
在上一步骤中,汇编程序产生的是二进制目标文件(OBJ文件),并不是可执行文件,要想使我们编制的程序能够运行,还必须用连接程序(LINK.EXE)把OBJ文件转换为可执行的EXE文件。
具体操作如下:
D:
\ASM>LINKHELLO.OBJ<回车>
操作时的屏幕显示如图1-3所示。
如果没有错误,LINK就会建立一个HELLO.EXE文件。
如果OBJ文件有错误,LINK会指出错误的原因。
对于无堆栈警告(Warning:
NOSTACKsegment)信息,可以不予理睬,它不影响程序的执行。
如链接时有其它错误。
须检查修改源程序,重新汇编、连接,直到正确。
(5)执行程序
建立了HELLO.EXE文件后,就可以直接在DOS下运行此程序,如下所示:
D:
\ASM>HELLO.EXE<回车>
程序运行结束后,返回DOS。
如果运行结果正确,那么程序运行结束时结果会直接显示在屏幕上。
如果程序不显示结果,我们如何知道程序是否正确呢?
例如,这里的HELLO.EXE程序并未显示出结果,所以我们不知道程序执行的结果是否正确。
这时,我们就要使用TD.EXE调试工具来查看运行结果。
此外,大部分程序必须经过调试阶段才能纠正程序执行中的错误,调试程序时也要使用TD.EXE。
下面简单介绍一下TD.EXE程序的使用说明。
1.1.3TD.EXE程序的使用说明
(1).如何载入被调试程序
转到TD.EXE所在目录,在DOS提示符下键入以下命令(假定要调试的程序名为HELLO.EXE):
D:
\ASM>TDHELLO.EXE↙
(2)如何输入(修改)汇编指令
(a)用Tab键选择代码区为当前区域;
(b)用方向键把光标移到期望的地址处,如果是输入一个新的程序段,建议把光标
移到CS:
0100H处;
(c)打开指令编辑窗口:
在光标处直接键入汇编指令,在输入汇编指令的同时屏幕上就会自动弹出指令的临时编辑窗口。
(d)在临时编辑窗口中输入/编辑指令,每输入一条指令,按回车,输入的指令即可出现在光标处(替换掉原来的指令),同时光标自动下移一行,以便让你输入下一条指令。
(3)如何查看/修改数据段的数据
(a)用Tab键选择数据区为当前区域;
(b)使用局部菜单中的“Goto”命令并结合使用方向键把光标移到期望的地址单元处(注意数据区的光标是一个下划线),数据区就从该地址处显示内存单元的内容。
(c)若要修改该地址处的内容,则需打开数据编辑窗口。
在光标处直接键输入数据,在输入数据的同时屏幕上就会自动弹出数据编辑窗口。
(d)在数据编辑窗口中输入所需的数据,输入完后,按回车,输入的数据就会替代光标处的原始数据。
(4)如何修改寄存器内容
(a)用Tab键选择寄存器区为当前区域;
(b)用方向键把光标移到要修改的寄存器上;
(c)打开编辑输入窗口:
在光标处直接键入所需的值,在键入的同时屏幕上就会自动弹出编辑输入窗口。
(d)在编辑输入框中键入所需的值,然后回车,这个新的值就会取代原来该寄存器的内容。
(5)如何修改标志位内容
(a)用Tab键选择标志区为当前区域;
(b)用方向键把光标移到要修改的标志位上;
(c)按回车键或空格键即可使标志位的值在0、1之间变化。
(6)如何指定程序的起始执行地址
方法1:
(a)用Tab键选择代码区为当前区域;
(b)用Alt-F10键激活代码区局部菜单,选择局部菜单中的“NewCS:
IP”命令。
方法2:
(a)用Tab键选择寄存器区为当前区域;
(b)用方向键把光标移到CS寄存器上,输入程序起始地址的段地址;
(c)用方向键把光标移到IP寄存器上,输入程序起始地址的偏移量。
(7)如何单步跟踪程序的执行
(a)用上述第6条中的方法首先指定程序的起始执行地址;
(b)按F7或F8键,每次将只执行一条指令。
注:
若当前执行的指令是CALL指令,则F7将跟踪进入被调用的子程序,而F8则把CALL指令及其调用的子程序当作一条完整的指令,要执行完子程序才停在CALL指令的下一条指令上。
(8)如何只执行程序的某一部分指令
方法1:
用设置断点的方法。
(a)用上述第6条中的方法首先指定程序的起始执行地址;
(b)用方向键把光标移到要执行的程序段的最后一条指令的下一条指令上(注意,不能移到最后一条指令上,否则最后一条指令将不会被执行),按F2设置断点。
也可按Alt-F2键,然后在弹出的输入窗口中输入断点地址。
(c)按F9键执行,程序将会停在所设置的断点处。
方法2:
用“运行程序到光标处”的方法。
(a)用上述第6条中的方法首先指定程序的起始执行地址;
(b)用方向键把光标移到要执行的程序段的最后一条指令的下一条指令上(注意,不能移到最后一条指令上,否则最后一条指令将不会被执行)。
(c)按F4键执行程序,程序将会执行到光标处停下。
方法3:
用“执行到指定位置”的方法。
(a)用上述第6条中的方法首先指定程序的起始执行地址;
(b)按Alt-F9,在弹出的输入窗口中输入要停止的地址(即要停在哪条指令上,就输入哪条指令的地址),按回车,程序将会执行到指定位置处停下。
(9)如何查看被调试程序的显示输出
按Alt-F5键。
(10)如何在Windows2000中把TD的窗口设置的大一些
按Alt-O键,在下拉菜单中选择Displayoptions项,在弹出的对话框中,用Tab键选Screenlines选项,用←、→键选中“43/50”,按回车。
然后按F5键,使CPU窗口充满TD窗口。
1.2实验一:
8088数据传送指令及移位指令的练习
1.2.1实验目的
(1)熟悉8088指令系统的数据传送指令及移位指令。
(2)利用TD调试工具来调试汇编语言程序。
1.2.2实验内容
按照题目要求预先编写好实验中的程序,完成以下任务。
(1)通过下述程序段的输入和执行来熟悉TD的使用,并通过显示器屏幕观察程序的执行情况。
练习程序段如下:
MOVBL,08H
MOVCL,BL
MOVAX,03FFH
MOVBX,AX
MOVDS:
[0020H],BX
(2)用以下程序段将一组数据压入(PUSH)堆栈区,然后通过不同的出栈顺序出栈,观察出栈后数据的变化情况。
压栈程序段如下:
MOVAX,0102H
MOVBX,0304H
MOVCX,0506H
MOVDX,0708H
PUSHAX
PUSHBX
PUSHCX
PUSHDX
POPAX
POPBX
POPCX
POPDX
(3)将DS:
1000H字节存储单元中的内容送到DS:
2020H单元中存放。
试分别用8088的直接寻址、寄存器间接寻址、变址寻址、寄存器相对寻址传送指令编写程序段,并上机验证结果
(4)输入并运行下表中的程序段,把结果填入表右边的空格中,并分析结果,说明本程序段的功能是什么。
程序段
字单元(1A00H)=
字单元(1A02H)=
MOV[1A00H],0AA55H
MOV[1A02H],2AD5H
SHLWORDPTR[1A02H],1
CMP[1A00H],8000H
CMC
RCLWORDPTR[1A02H],1
RCLWORDPTR[1A00H],1
(5)在al中存放了一个压缩bcd码,输入并运行下面的程序段,并分析结果。
4001和4002单元的内容是什么,说明本程序段的功能是什么。
movbx,4000h
moval,68h
mov[bx],al
movah,al
andal,0fh
oral,30h
mov[bx+1],al
movcl,4
shrah,cl
orah,30h
mov[bx+2],ah
1.2.3实验报告要求
整理出运行正确的各题源程序和运行结果,并回答题目中的问题。
1.3实验二:
算术逻辑运算及串指令的练习
1.3.1实验目的
(1)熟悉算术逻辑运算指令和串操作指令的功能。
(2)了解标志寄存器各标志位的意义和指令执行对它的影响。
(3)利用TD调试工具来调试汇编语言程序。
1.3.2实验任务
(1)实验程序段及结果表格
标志位
CF
ZF
SF
OF
PF
AF
程序段:
MOVAX,0A0AH
ADDAX,0FFFFH
MOVCX,0FF00H
ADCAX,CX
SUBAX,AX
INCAX
ORCX,0FFH
ANDCX,0F0FH
SHLCX,1
RCLCX,1
MOVBX,4000H
MOV[BX],CX
0
0
0
0
0
0
(2)用BX寄存器作为地址指针,从BX所指的内存单元(0010H)开始连续存入三个无符号数(10H、04H、30H),接着计算内存单元中的这三个数之和,和放在0013H单元中,再求出这三个数之积,积放0014单元中。
写出完成此功能的程序。
(3)输入以下程序段并运行之,回答后面的问题。
CLD
MOVDI,1000H
MOVAX,55AAH
MOVCX,10H
REPSTOSW
上述程序段执行后:
从DS:
1000H开始的16个字单元的内容是什么?
(4)在上题的基础上,再输入以下程序段并运行之,回答后面的问题。
MOVSI,1000H
MOVDI,2000H
MOVCX,20H
REPMOVSB
程序段执行后:
(a)从DS:
2000H开始的16个字单元的内容是什么?
(b)(SI)=?
(DI)=?
(CX)=?
,并分析之
(5)在以上两题的基础上,再输入以下三个程序段并依次运行之。
程序段1:
MOVSI,1000H
MOVDI,2000H
MOVCX,10H
REPZCMPSW
程序段1执行后:
(a)ZF=?
根据ZF的状态,两个串是否比较完了?
(b)(SI)=?
(DI)=?
(CX)=?
,并分析之。
程序段2:
MOV[2008H],4455H
MOVSI,1000H
MOVDI,2000H
MOVCX,10H
REPZCMPSW
程序段2执行后:
(a)ZF=?
根据ZF的状态,你认为两个串是否比较完了?
(b)(SI)=?
(DI)=?
(CX)=?
,并分析之。
1.3.3实验报告要求
(1)整理出完整的实验程序段和运行结果。
(2)回答题目中的问题。
1.4实验三:
数据的输入及显示程序设计
1.4.1实验目的
(1)学习如何从键盘读取数据以及如何将数据予以显示。
(2)掌握简单的DOS系统功能调用。
(3)学习8088汇编语言程序的基本结构和程序设计的基本方法。
(4)熟悉在PC机上建立、汇编、链接、调试和运行8088汇编语言程序的全过程。
1.4.2实验任务
(1)要在屏幕上显示一个字符串‘Hello,world’,试编写程序段并上机进行验证。
(2)从str1开始存放有一个字符串‘Thisisastring’,要求把这个字符串从后往前传送到str2开始的内存区域中(即传送结束后,从str2开始的内存单元的内容为‘gnirtsasisihT’),试编写程序段并上机进行验证。
(3)设a、b、c、d四个数分别以压缩的BCD码形式存放在内存NUM开始的四个单元,计算(a+b)-(c+d),并把结果显示在屏幕上。
改变a,b,c,d内容,然后重新汇编、连接并运行程序,检查其结果与手工计算是否相符。
下面是几组实验用的数据:
(a)a=09,b=16,c=04,d=17
(b)a=38,b=41,c=29,d=34
(c)a=70,b=23,c=42,d=41
(d)a=63,b=73,c=62,d=50
1.4.3实验报告要求
整理出完整的实验程序和使用不同实验数据时的运行结果,对结果进行解释。
1.5实验四:
分支及循环程序设计
1.5.1实验目的
掌握分支程序和循环程序的设计方法。
1.5.2实验任务
(1)从键盘输入4个十进制数字,依次保存在以DATA1为首的连续5字节内存单元的前4个单元中(先输入的在前,为高位),作为一个四位的十进制数乘以9后,结果保存在以DATA1为首的连续5字节内存单元中,然后在屏幕上以十进制方式显示出该运算结果。
(2)从num单元开始存放了10个数(数的范围在0~99之间),对这10个数从大到小进行排序,并统计0~59、60~79、80~99的数各有多少。
最后在屏幕上显示统计的结果。
显示格式如下:
80-99:
xx
60-79:
xx
0-59:
xx
1.5.3实验报告要求
整理出完整的实验程序和使用不同实验数据时的运行结果,总结一下编制分支程序和循环程序的要点。
第二章硬件接口电路实验
2.1微机接口实验台使用说明
本课程实验使用的是清华同方教学仪器设备公司生产的TPC-2003A通用32位微机接口试验台,通过一条50线扁平电缆将实验台和总线接口卡相连。
2.1.1TPC-2003A通用微机接口实验台简介
(1)实验系统组成
该系统由一块PCI总线扩展卡和一个扩展实验台组成,集成电路芯片(8251、74LS273、74LS244、6116)共4片。
PCI总线卡插在机箱内任一PCI插槽上,提供PCI-ISA总线的转换与驱动,PCI卡与实验台之间由一条50芯扁平电缆连接。
实验台采用开放式结构,模块化设计支持开放实验。
实验台上除固定电路外还设有用户扩展实验区。
有四个通用集成电路插座,每个插座引脚都有对应的“自锁紧”插孔,利用这些插孔可以搭试更多的自己设计的实验。
实验台自带+5V电源保护电路。
一旦接线发生错误,造成+5V电源短路,立即报警并切断电源。
实验输出信号都带有保护电阻,保护试验电路的安全。
(2)试验台上的自锁紧插孔的使用
本实验台采用了“自锁紧”插座及连接线,能够解决连线接触不良的现象。
自锁紧插座插入连线时,应把插头稍微用力沿顺时针方向旋转一下,才能保证接触良好。
拔出时,应先逆时针方向旋转待插头完全松开后,再向上拔出。
2.1.2实验台结构
本实验台结构如图2-1所示。
现将其主要部件的功能和结构简介如下:
图2-1实验台结构图
(1)I/O地址译码电路
I/O地址译码电路如图2-2所示,这里选用PC机未用的地址空间:
280H~2BFH,共分8条译码输出线:
Y0~Y7,其地址分别是280H~287H;288H~28FH;290H~297H;298H~29FH;2A0H~2A7H;2A8H~2AFH;2B0H~2B7H;2B8H~2BFH,8根译码输出线在实验台“I/O地址”处分别由“自锁紧”插孔引出,供实验选用。
图2-2实验台的I/O地址译码电路
(2)总线插孔
采用“自锁紧”插座在标有“总线”区引出数据总线D7~D0;地址总线A9~A0;读、写信号
、
;中断请求信号IRQ;DMA请求信号DRQ1;DMA响应信号、
;及AEN信号,供学生搭试各种接口实验电路使用。
(3)时钟电路
时钟电路如图2-3所示,可以输出1MHZ、2MHZ两种信号,供A/D转换器、定时器/计数器、串行接口实验使用。
图2-3时钟电路
(4)逻辑电平开关电路
逻辑电平开关电路如图2-4所示,实验台右下方设有8个开关K7~K0,开关拨到“1”位置时开关断开,输出高电平,向下打到“0”位置时开关接通输出低电平,电路中串接了保护电阻,使接口电路不直接同+5V、GND相连,可有效地防止学生因误操作、误编程损坏集成电路现象。
图2-4逻辑电平开关电路图2-5LED显示电路
(5)LED显示电路
LED显示电路如图2-5所示,实验台上设有8个发光二极管及相关驱动电路(输入端L7~L0),当输入信号为“1”时发光,为“0”时灭。
(6)七段数码管显示电路
如图2-6所示,实验台上设有两个共阴极七段数码管及驱动电路,段码为同相驱动器,位码为反相驱动器,从段码与位码的驱动器输入端(段码输入端:
a、b、c、d、e、f、g、dp,位码输入端:
s1、s2)输入不同的代码即可显示不同数字或符号。
图2-6七段数码管显示电路
(7)单脉冲电路
如图2-7所示,采用RS触发器产生,实验者每按一次开关即可以从两个插座上分别输出一个正脉冲及负脉冲,供“中断”、“DMA”、“定时器/计数器”等实验使用。
实验台上有相同的电路两套。
图2-7单脉冲电路
(8)逻辑笔
图2-8为逻辑笔电路,图中JP4是一个三端的选择端子,当1-2短接时测量CMOS电平,2-3短接时测TTL电平。
图2-8逻辑笔电路
(a)当输入端Ui接高电平时L12(红灯)亮。
(b)当输入端Ui接低电平时L13(绿灯)亮。
(c)当输入端Ui接中间态时(CMOS1.35V-3.5V;TTL0.7V-2.5V)L12(红灯)和L13(绿灯)都灭。
(d)当输入端Ui接单个正脉冲时,L13(绿灯)亮,同时在接收到单脉冲的瞬间L14(黄灯)闪烁一次。
L11(红灯)亮。
(e)当输入端Ui接单个负脉冲时,L12(红灯)亮,同时在接收到单脉冲的瞬间L14(黄灯)闪烁一次。
L11(红灯)亮。
(f)当输入端Ui接连续正脉冲且动态频率小于5MHZ时,L13(绿灯)亮,L14(黄灯)亮。
L11(红灯)亮。
(g)当输入端Ui接连续负脉冲且动态频率小于5MHZ时,L12(红灯)亮,L14(黄灯)亮。
L11(红灯)亮。
(h)当测过单脉冲或连续脉冲后,L11会一直亮,在下一次测量脉冲以前须按一次复位按钮KL1,L(红灯)11灭。
(9)继电器及驱动电路
如图2-9所示,实验台上设有一个+5V直流继电器及相应的驱动电路,当其开关量输入端输入数字量“1”时,继电器动作:
常开触点闭合、常闭触点断开。
通过相应的实验使学生了解开关量控制的一般原理。
图2-9继电器及驱动电路图2-10复位电路
(10)复位电路
如图2-10所示,能在上电时,或按下复位开关S2后产生一个高电平的复位信号供8255、8251等接口芯片使用。
(11)接口集成电路
实验台上有微机原理硬件实验最常用接口电路芯片,包括:
可编程定时器/计数器(8253)、可编程并行接口(8255)、数/模转换器(DAC0832)、模/数转换器(ADC0809),这里芯片与CPU相连的引线除片选信号
外都已连好,与外界连接的关键引脚在芯片周围用“自锁紧”插座引出,供学生实验时使用。
其中数/模转换器附有双极性输出,模/数转换器附有双极性输入插座。
具体电路可见下面实验说明。
(12)跳线开关(JP)
为了方便实验,实验台上设有跳线开关,分以下几种:
(a)USB模块电源跳线开关JA:
这个跳线开关在实验台的左上角。
当实验台50线总线插座与USB模块相连接时用短路片将JA短接,为USB模块提供+5V电源。
当实验台50线总线插座与PCI卡连接时,JA短路片要拔掉。
(b)模拟量输入选择开关JP2、JP3:
在实验台的左下角,分别用于模/数转换模拟量的输
入极性选择,JP2的1、2两点短路时ADC0832的IN2可输入双极性电压(-5V~+5V),2、3两点短路时输入单极性电压(0~+5V)。
JP3用于选择IN1的输入极性,选择方法与JP2相同。
(13)+5V电源插针
为了减少主机+5V电源的负担和各主要芯片的安全,在主要接口芯片的左上角都有相应的电源连接插针(标记为+5V),当实验需要该芯片时,用短路块短接插针即可接通+5V电源。
对用不到的芯片可将短