微机原理实验教程Word格式.docx
《微机原理实验教程Word格式.docx》由会员分享,可在线阅读,更多相关《微机原理实验教程Word格式.docx(67页珍藏版)》请在冰豆网上搜索。
2.2分支程序设计9
实验1分类统计字符个数9
实验2显示英文月份9
2.3子程序设计11
第二部分I/O接口实验12
第3章微机原理与接口实验仪简介12
第4章硬件安装与硬件实验操作步骤14
第5章I/O接口实验16
实验1简单I/O接口实验16
实验28255可编程并行接口实验18
实验38253定时器实验21
实验4模/数转换实验22
附录23
附录1常用DOS命令23
附录2DEBUG主要命令25
附录3汇编程序出错信息28
附录4常用字符ASCII码值32
附录58088/8086指令系统33
附录6IBMPC/AT中断功能表36
附录7常用DOS功能调用(INT21H)37
附录8BIOS功能调用40
第一部分汇编程序设计
第1章汇编程序设计初步
1.1实验目的与要求
一、实验目的
学习程序设计的基本方法和技能,进一步加深对微机接口芯片原理及工作过程的理解,熟练掌握用汇编语言设计、编写、调试和运行程序的方法。
为后继课程打下坚实的基础。
二、实验要求
1.上机前要做好充分的准备,包括程序框图、源程序清单、调试步骤、测试方法、对运行结果的分析等。
2.上机时要遵守实验室的规章制度,爱护实验设备。
要熟悉与实验有关的系统软件(如编辑程序、汇编程序、连接程序和调试程序等)的使用方法及实验仪器。
在程序的调试过程中,有意识地学习及掌握debug程序的各种操作命令,以便掌握程序的调试方法及技巧。
为了更好地进行上机管理,要求用硬盘储存程序,并建立和使用子目录,以避免文件被别人删除。
有关目录及文件操作的DOS命令见附录1。
此外,为了便于统一管理硬盘中的文件,要求实验者按以下形式命名实验文件:
字母学号.asm
其中字母取a~z中的一个字母,按实验顺序从a至z排列。
如学号为850431学生的第二个实验程序所对应的文件名应为b850431.asm。
3.程序调试完后,须由实验指导教师在机器上检查运行结果。
每个实验完成后,应写出实验报告。
实验报告的要求如下:
1设计说明:
用来说明设计的内容、硬件原理图。
它包括:
程序名、功能、原理及算法说明、程序及数据结构、主要符号名的说明等。
2调试说明:
便于学生总结经验提高编程及调试能力。
调试情况,如上机时遇到的问题及解决办法,观察到的现象及其分析,对程序设计技巧的总结及分析等;
程序的输出结果及对结果的分析;
实验的心得体会等。
3程序框图。
4程序清单。
1.2实验方法(汇编工具的使用)
一、用编辑程序建立asm文件
用文字处理软件编辑源程序。
常用编辑软件有:
EDIT.EXE、记事本、WORD等。
无论采用何种编辑工具,生成的文件必须是纯文本文件,且文件扩展名为asm。
下列程序完成两个字节数相加,并将和存于SUM变量中。
用编辑软件建立以abc.asm为文件名的源程序文件。
DATASEGMENT
BUFDB47H,6AH
SUMDB?
DATAENDS
CODESEGMENT
ASSUMECS:
CODE,DS:
DATA
START:
MOVAX,DATA
MOVDS,AX
MOVAL,BUF
ADDAL,BUF+1
MOVSUM,AL
MOVAH,4CH
INT21H
CODEENDS
ENDSTART
二、用汇编程序对源文件汇编产生目标文件obj
当源程序建立以后,用汇编程序masm对abc.asm源程序文件进行汇编,操作步骤如下:
(以下划线部分为用户键盘输入,“↙”代表回车,未划线部分为屏幕显示,小字部分为说明)。
C:
\MASM>
masmabc↙
Microsoft(R)MacroAssemblerVersion5.00
Copyright(C)MicrosoftCrop1981-1985,1987,Allrightsreserved
Objectfilename[abc.obj]输入目标文件名,若采用括号[]中的名字,按↙
Sourcelisting[NUL.LST]若需要列表文件,输入文件名,按↙;
如果不需要,直接按↙
Cross-reference[NUL.CRF]若需要交叉索引文件,输入文件名;
如不需要,直接按↙
49758+451602Bytessymbolspacefree
0WarningErrors
0SevereErrors
回答上述问题后,汇编程序就对源程序进行汇编。
若汇编中发现源程序有语法错误,则列出错误语句所在行、错误代码及错误性质说明。
错误分警告错误(WarningErrors)和严重错误(SevereErrors)。
警告错误指汇编程序认为的一般性错误;
严重错误指汇编程序认为无法进行正确汇编的错误,给出其错误个数,错误性质。
这时,就要对错误进行分析,找出问题和原因,然后再调用编辑程序对源程序进行修改。
修改后重新汇编,直到无错误为止。
除了用上述方法分步回答问题外,还可以用命令行的形式按顺序对相应提示予以回答,其格式是:
masm源文件名,目标文件名,列表文件名,交叉引用文件名;
其中文件名都不必给出扩展名,汇编程序会按照缺省情况使用或产生。
若只想对部分提示给出回答,则在相应位置用逗号隔开,若不想对剩余部分作答,则用分号结束。
例如以下命令经汇编后在当前目录下产生abc.obj文件,不产生lst文件和crf文件。
masmabc;
↙
三、用连接程序link产生执行文件exe
linkabc↙
Microsoft(R)8086ObjectLinkerVersion5.00
RunFile[abc.exe]输入可执行文件名,若采用括号[]中的名字,按↙
ListFile[NUL.MAP]若需要映象文件,输入文件名,按↙;
如果不需要,按↙
Libraries[NUL.LIB]若需要库文件,输入文件名,按↙;
如果不需要库文件,按↙
Warning:
nostacksegment
上述给出的警告信息,表示用户程序没有定义堆栈段。
该警告不影响可执行程序的生成和正常运行,因为运行时会自动使用系统提供的缺省堆栈。
回答上述问题后,连接程序开始连接,若连接过程中有错,则显示错误信息。
此时,按错误提示,修改源程序,然后,回到第二步。
直至汇编无错误,连接无错误(错误NoStackSegment除外),在当前目录下产生可执行文件(exe),进入第四步。
同样也可以用命令行的形式按顺序对相应提示予以回答,其格式是:
link目标文件名,可执行文件名,内存映象文件名,库文件名;
其中不必给出扩展名,连接程序会按照缺省情况使用。
例如以下命令行对abc.obj文件连接后在当前目录下产生abc.exe文件,其余文件均不需要。
linkabc;
从6.0版以后,Microsoft公司把MASM和LINK的功能由一个ML.EXE程序完成,只需一个命令就可以把源程序汇编并连接生成.EXE文件。
而不再需要分两步操作。
ML.EXE常用格式为:
ML[/F1][/Fm][/Fr][/c]源文件
其中,源文件名的扩展名(.asm)不能省,[]中的F必须大写,l,m,r,c必须小写,各可选项含义如下:
/F1:
产生.lst列表文件,缺省时不产生。
/Fm:
产生.map内存映象文件,缺省时不产生。
/Fr:
产生.sbr交叉参考文件,缺省时不产生。
/c:
只产生,obj目标文件,不产生.exe可执行文件。
缺省时只产生.exe文件。
例:
ML/Flabc.asm
以上命令会对已存在的abc.asm文件汇编且连接,并在当前目录下生成一个列表文件abc.lst和一个可执行文件abc.exe.
四、运行程序
设连接生成的执行文件为abc.exe,运行程序只需在DOS提示符下键入文件名即可,如:
abc↙
若程序能够运行但不能得到预期结果,则需要静态或动态查错。
静态查错即检查源程序,并对源程序进行修改,然后再汇编、连接、运行。
如果静态检查无法发现错误,则需动态查错。
五、程序调试及结果查看
这里使用DEBUG程序进行调试,DEBUG是一种使用广泛的强有力的汇编语言程序或二进制文件的调试工具。
设abc.asm经汇编及连接后,产生abc.exe文件,对它的调试操作如下:
1.把程序装入内存,并显示程序清单
debugabc.exe↙
-
此时,debug已将执行程序装入内存,可键入debug的有关命令调试程序。
-U↙用反汇编命令U列出程序清单
13E3:
0000B8E213MOVAX,13E2
00038ED8MOVDS,AX
0005A00000MOVAL,[0000]
000802060100ADDAL,[0001]
000CA20200MOV[0002],AL
000FB44CMOVAH,4CH
0011CD21INT21
……
2.查看数据段内容或查看寄存器内容
-DDS:
0000↙查看数据段内容
13E2:
0000476A000000000000-0000000000000000Gj..............
可见0000、0001单元内容为数据段定义的内容,分别为47H、6AH。
DEBUG状态下,缺省数制为十六进制数。
-R↙查看寄存器内容
AX=13E2BX=0000CX=0023DX=0000SP=0000BP=0000SI=0000DI=0000
DS=13D2ES=13D2SS=13E2CS=13E3IP=0003NVUPEIPLNZNAPONC
若查看指定寄存器内容,在R命令后跟上寄存器名,例:
-RAX↙查看寄存器AX的内容
AX13E2
:
↙
若需修改AX的值,则键入新值;
若无需更改,按回车。
3.连续运行程序,查看结果
-G↙或-G=00013↙运行程序,0为运行起始地址,0013为断点地址
0000↙查看内存结果
0000476AB100000000000000000000000000Gj..............
可见0002单元中内容已变为0000和0001两单元内容之和。
4.如果连续得不到正确结果,需分步跟踪运行
-T=0000↙0000这所需要运行指令的地址
显示单步执行后寄存器和标志状态之后,停在下一条指令开始处。
-T↙顺序运行下一条指令
5.退出DEBUG
-Q↙
第2章程序的基本结构实验
2.1循环程序设计
实验1用表格形式显示字符
一、实验目的与要求
1.熟悉汇编语言运行、调试环境及方法。
2.掌握循环程序的设计方法。
3.掌握显示输出DOS功能调用的使用方法。
4.熟悉调试工具DEBUG,并运用DEBUG工具调试程序。
二、实验内容
按15行×
16列的表格形式显示ASCII码为10H~FFH的所有字符。
每16个字符为一行,每行中的相邻两个字符之间用空白符(ASCII码为0)分隔。
三、分析与提示
1.显示字符可使用DOS功能调用的2号功能,使用方法如下:
MOVAH,02H
MOVDL,需显示字符的ASCII码值
本实验中可把BL寄存器初始化为10H,显示完当前字符后使其加1以取得下一个字符的ASCII码。
若需显示的字符在BL寄存器中,则上述第二条指令为:
MOVDL,BL
2.显示空白符时,用其ASCII码值0置入DL寄存器。
每行结束时,用显示回车符(ASSII码值为0DH)和换行符(ASSII码值为0AH)来结束本行并开始下一行。
3.本程序为两重循环,需设置两个循环计数器,可用CL寄存器作为行计数器,初始值为15,CH寄存器作为列计数器,初始值为16。
实验2查找匹配字符串
1.进一步熟悉汇编语言运行、调试环境及方法。
2.进一步掌握循环程序的设计方法。
3.掌握显示输出、键盘输入DOS功能调用的使用方法。
程序接收用户键入的一个关键字以及一个句子,如果句子中不包含关键字则显示“NoMatch!
”;
如果句子中包含关键字则显示“Match”,且把该字在句子中的位置用十六进制数显示出来。
要求程序的执行过程如下:
Enterkeyword:
abc
Entersentence:
Wearestudyingabc.
Matchatlocation:
11Hofthesentence.
xyz
Entersentense:
Wearestudyingabc
Nomatch!
^C
程序可由三部分组成:
1.输入关键字和一个句子,分别存入相应的缓冲区中。
可用DOS功能调用0AH,使用方法如下:
字符缓冲区定义格式如下:
maxlendb32
actlendb?
stringdb32dup(?
)
缓冲区的第一个字节定义字符的最大个数;
第二个字节为实际输入的字符个数,该数据由OAH功能根据用户实际输入自动计算并填入。
在这两个字节后,存放输入的字符串,字符串以回车(0DH)结束,但回车符不作实际输入字符的个数。
输入字符串程序段如下:
LEADX,MAXLEN
MOVAH,0AH
2.在句子中查找关键字
关键字和句子中相应字段的比较可使用串比较指令。
为此必须定义附加段,但附加段和数据段可定义为同一段,以便于串指令的使用。
这样,相应的寄存器就有明确的定义:
SI寄存器为关键字的指针;
DI寄存器为句子中正相比较的字段的指针;
CX寄存器存放关键字的长度。
整个句子和关键字的比较过程可以用一个循环结构来完成。
循环次数为:
句子长度-关键字长度+1
在计算循环次数时,如遇到句子长度小于关键字长度,则显示“Nomatch!
”。
循环中还需用到BX寄存器,用来保存句子中当前正在比较字段的首地址。
BX、SI、DI寄存器的作用如图2.1所示:
图2.1在查找匹配字符串中使用的指针
3.输出信息可使用DOS功能调用的09H功能,09H功能为显示字符串,该字符串定义时必须以“$”结束。
显示字符串程序段如下:
LEADX,字符串首地址
MOVAH,09H
INT21H
4.将BX寄存器内的二进制数用十六进制数形式显示,需将BX的内容从左到右每四位为一组,采用循环移位的方法把所要显示的4位二进制数移到最右面。
若4位所表示的二进制数在0~9之间,则加上30H转换为相应ASCII码;
若4位所表示的二进制数在A~F之间,则加上37H转换为相应ASCII码。
最后调用DOS功能调用的02H功能显示字符。
2.2分支程序设计
实验1分类统计字符个数
1.掌握分支程序的设计方法。
2.掌握二进制转换为十进制的方法
程序接收用户键入的一行字符(个数≤80,字符串以回车结束),按字母、数字及其它字符分类统计,并以十进制数形式显示统计结果。
1.程序可使用DOS功能调用的0AH功能接收用户键入的字符,然后再逐个取出分类统计,大、小写字母均作为字母统计。
2.将统计结果以十进制数形式显示方法有两种,一是将统计结果除以10,商转换为ASCII码并显示,余数转换为ASCII码并显示(因字符总个数≤80);
二是在统计过程中,某类字符个数加1后,用DAA指令调整为十进制数,然后将统计结果从左到右每四位为一组,转换为ASCII码并显示。
3.程序的执行过程如下:
Pleaseinputstring:
a6bc&
*23g
Letter:
04
Digit:
03
Other:
02
实验2显示英文月份
1.进一步掌握分支程序的设计方法。
2.掌握汇编语言中查找表格的方法。
程序接收用户键入的月份数,在终端上显示该月的英文缩写名。
1.根据要求,需建立一个英文缩写的月份表,该月份表可定义如下:
MONTABDB‘JAN’,‘FEB’,‘MAR’,…
2.根据用户输入的月份数可以计算出与其对应的表格地址,计算方法是:
MONTAB+(月份数-1)×
3
3.键入月份可用DOS功能调用的0AH功能,但接收的月份数是ASCII码,必须转换为数字才能用上面公式。
4.程序的执行过程如下:
month?
5
MAY
9
SEP
2.3子程序设计
1.掌握子程序的设计方法。
2.掌握十六进制转换二进制、二进制转换为十进制的方法
从键盘键入0~FFFFH之间的十六进制数,并转换成十进制在屏幕上显示出来。
1.采用子程序结构将据要求分成几个子程序实现。
子程序HEXIBIN实现从键盘取得十六进制数并转换为二进制数;
子程序BINIDEC实现把此二进制数转换为十进制数并显示;
另外用CRLF子程序显示回车和换行。
2.假设接收的十六进制数为a1a2a3a4,转换为二进制数的方法为:
(((0×
16+a1)×
16+a2)×
16)+a3)×
16+a4
可用BX存放部分和,初始化为0;
每输入一位数,完成(BX)×
16+该位数
3.二进制数转换为十进制数的方法是用该二进制数除以10000,商转换为ASCII码并用DOS功能调用的02H功能显示;
再将余数除以1000,以次类推。
第二部分I/O接口实验
第3章微机原理与接口实验仪简介
超想微机原理与接口实验系统(超想—3000TC),如图1所示,是由武汉恒科电子教学仪器有限公司研制的产品,采用了超大规模定制芯片的通用仿真器,USB通讯模式,具有硬件自动检测功能、万用硬件扩展功能。
主实验箱电路板为国标2.0mm,结构设计合理。
图1超想-3000TC综合实验仪
实验仪提供的主要资源,如图2所示,有模拟量、开关量、LED彩灯、LED点阵区、LED八段数码管区、脉冲源、AD/DA实验区、I/O口扩展实验、8155、8255、8279、8253、8251串行通讯、8237DMA、8259中断、键盘显示、红外线、语音功放区、压力传感区、直流/步进电机区、按键开关区、万用实验扩展区等。
实验仪提供的万用扩展模块有CPLD/USB2.0扩展模块,可做CPLD、USB2.0扩展实验;
IC卡、语音、温度扩展模块,可做IC卡、语音录放、数字温度实验。
图2超想-3000TC型实验仪结构分配图
第4章硬件安装与硬件实验操作步骤
一、微机原理与接口工作模式选择
做8086微机接口实验时,要将八段数码管右上角的三个小拨动开关同时拨向左边(即拨向88),将8279芯片左上方的小拨动开关拨向上边(即拨向88),将8279芯片右下方的红色拨动开关中,1、2、4拨向下边,3拨向上边。
二、实验箱与计算机的连接
实验箱与计算机用USB线直接相连即可。
连接后,右键单击“我的电脑”,打开“属性”窗口,选择“硬件”标签,单击“设备管理器”,查看实验箱连接到哪一个串口,并记录备用。
要求只能使用COM1至COM4;
若是COM5或COM6,重新连接USB线。
三、硬件实验操作步骤
1、按上述要求安装好实验箱;
2、根据不同的实验要求,设计好实验电路,用导线进行连线;
3、打开实验箱电源;
4、启动HK88TE调试软件;
5、设置通讯口:
在HK88TE软件下,单击“设置”菜单,选择“通讯口”,打开如图3的对话框。
如在“设备管理器”中查看到实验箱连接到COM1,则在对话框中选择COM1;
波特率选择9600,将延时因子调节到比较大的位置,点击“测