杨海军微机原理实验指导书.docx
《杨海军微机原理实验指导书.docx》由会员分享,可在线阅读,更多相关《杨海军微机原理实验指导书.docx(30页珍藏版)》请在冰豆网上搜索。
杨海军微机原理实验指导书
微机原理及其接口技术
实验指导书
杨海军
(洛阳理工学院机械设计制造及其自动化专业适用)
目录
第一章汇编语言程序上机实验基础1
1.1汇编语言程序上机应具备的工具软件1
1.2调试程序(DEBUG)功能简介2
1.3实验报告格式5
第二章软件实验6
实验一Debug程序的使用6
实验二.汇编语言上机环境及基本步骤15
实验三两个多位十进制数相加的实验21
实验四循环结构程序设计27
实验五子程序设计30
第三章硬件实验34
实验一 8255A并行口实验34
实验二 定时器/计数器38
第一章汇编语言程序上机实验基础
1.1汇编语言程序上机应具备的工具软件
汇编语言程序上机操作,必须经过文件的“建立-汇编-连接-执行”四个阶段。
因此系统磁盘上还应具备下列工具软件。
1.全屏幕编辑程序。
用以将程序键入内容,经编辑后生成源文件(.ASM)存盘。
常用的编辑程序有EDIT.EXE,SK.EXE,WORD97。
2.宏汇编程序,如MS的MASM.EXE,用以将源文件(.ASM)汇编生成二进制代码的目标文件(.OBJ)、列表文件(.LST)、及符号交叉引用表文件(.CRF)。
3.连接程序LINK.EXE。
用以将目标文件(.OBJ)与欲使用的库文件(.LIB)及其它目标模块,连接装配生成一个可执行文件(.EXE)、及各段空间分配的列表文件(.MAP)。
4.调试程序DEBUG.COM。
用以对.EXE或.COM文件进行调试,排错。
值得提出的是,人工输入的现成程序,或自编程序,难免不出现键入错误、疏漏错误、语法错误及逻辑错误。
虽然在静态自查及汇编阶段均可被查出,但程序内在的逻辑功能性错误,还必须借助调试工具,在监测环境下动态运行程序时才能表露出来。
因此程序调试这一环节必不可少。
1.2调试程序(DEBUG)功能简介
<1>.A----行汇编
命令格式:
A[起始地址]
(起始地址缺省时:
前面未用过汇编命令,则从CS:
100单元开始;前面已用过汇编命令,则仅紧接上述汇编的最后一个单元开始。
)退出A命令:
+
如:
-A0100↙
则可从CS:
0100单元开始输入指令。
<2>.U----反汇编
命令格式:
U[地址范围]
(如仅指定起始地址:
则从指定的地址开始,反汇编32个字节;如未指定地址范围:
则将上一个U命令的最后一个单元地址加1作为起始地址。
)
如:
-U0030↙
则反汇编CS:
0030单元开始的指令。
<3>.D----显示内存单元内容
(内容可为十六进制数或相应的ASCII码字符)
命令格式:
D[地址范围]
(显示指定内存单元中的十六进制数或相应的ASCII码字符)。
如:
-D0010↙
则显示DS:
0010单元的内容。
<4>.E----修改内存单元内容
命令格式:
E始地址[字符串]
如:
-EDS:
100AABB↙
则将AA、BB存入DS:
0100――DS:
0101单元。
<5>.R----检查修改寄存器内容
命令格式:
R[寄存器名]
如:
-R↙
则显示所有寄存器内容、标志位状态及下一条指令。
如:
-RAX↙
则显示AX寄存器内容。
如需修改,则输入1-4个十六进制数,再按回车。
如不需修改,直接按回车。
如:
-RF↙
则显示八个标志位状态,如需修改,则输入此标志位的相应值,再按回车。
如不需修改,直接按回车。
<6>.G----运行――连续运行或设断点运行
命令格式:
G[=起始地址][断点地址](断点地址必需是有效指令的第一个字节)
若缺省“=起始地址”,则以CS:
IP(现行地址)为起始地址,程序执行到断点处,显示断点处所有寄存器内容和八个标志位状态,以及下一条指令。
如:
-G9↙
(断点地址为0009)若缺省“断定地址”,程序顺序执行完毕,显示:
Programterminatednormally(程序执行完毕)。
如:
-G↙
若前面已设过断点,然后程序再顺序执行完毕。
<7>.T----跟踪――单步运行
命令格式:
T[=起始地址][N](指令条数)若缺省“=起始地址”,则以CS:
IP(现行地址)为起始地址,程序执行N条指令后,显示断点处所有寄存器内容和八个标志位状态,及下一条指令。
如:
-T5↙
则执行5条指令。
如:
-T↙
则只执行一条指令。
注意:
若调试程序中有过程调用(包括软中断调用INTN指令),则需使用P命令。
(如用T命令,程序进入调用子程序内。
如:
-P↙
则执行一条指令或一个子程序。
<8>.Q----退出
如:
-Q↙
退出DEBUG返回DOS状态。
1.3实验报告格式
1.实验目的
2.实验内容
3.实验仪器
4.实验原理(软件实验画流程图,硬件实验画电路图)
5.实验步骤
6.实验源程序
7.实验现象或结果记录
8.实验总结(实验现象或实验结果分析;实验过程遇到的问题如何解决?
实验体会,思考题解答等)
第二章软件实验
实验一Debug程序的使用
一、实验目的
1.学习使用DEBUG调试命令。
2.学习用DEBUG调试简单程序。
3.通过程序验证码制及其对标志位的影响。
4.通过调试熟悉和掌握个寄存器的作用与特点。
二、实验内容
1、自己在E:
上新建一个文件夹,以自己的名字的首字母加学号命名。
2、用DIR命令查看E盘上文件。
在操作时要注意提示信息,并按提示操作。
3、用DEBUG调试简单程序。
三、实验仪器
微机一台
四、实验步骤
1.由DOS进入DEBUG调试环境。
(1)C:
>DEBUG将调试程序装入内存
注意:
当机器控制权由DOS成功地转移给调试程序后,将显示“-”号,它是DEBUG的状态提示符,表示可以接受调试子命令了。
(2)-R显示CPU中各寄存器当前初始内容,请记录下列各项:
AX=
BX=
CX=
DX=
BP=
SI=
DI=
DS=
ES=
SS=
SP=
CS=
IP=
FLAG寄存器中的8个标志位状态值是:
OF
DF
IF
SF
ZF
AF
PF
CF
说明:
1)此时,调试工作区的四个段值相同,指向同一起点,表明公用一个64KB空间;
2)SS:
SP指向堆栈顶单元,SP为FFFE或FFEE,正好是本段的最高可用地址,表明堆栈自动使用最高地址,栈区由底向上生长;
3)CS:
IP为约定的调试工作区地点(IP=0100),可由此装入待调试程序代码,或汇编键入的程序小段,工作区由低址往下使用;
4)DEBUG用符号给出标志寄存器中8个标志位的当前状态,其含义如下表所示。
标志位含义
‘1’的对应符号
‘0’的对应符号
OF溢出
OV有
NV无
DF方向
DN递减
UP递增
IF中断
EI允许
DI禁止
SF符号
NG负
PL正
ZF全零
ZR零
NZ非零
AF辅助进位
AC有
NA无
PF奇偶性
PE偶
PO奇
CF进位
CY有
NC无
(3)结束程序,返回DOS。
-Q
2.用DEBUG调试简单程序
例1-ACS:
0106
MOVAX,1234
MOVBX,2345
MOVCX,0
ADDAX,BX
MOVCX,AX
INT20
运行程序
(注:
执行程序时IP应指向要执行的指令,需要修改时
-RIP
当前值
输入需要值该处为0106
当然也可以在T或G命令中指出程序起始地址)
-R显示各寄存器当前内容及首条指令
-T3跟踪执行三条赋值传送指令,记录寄存器及标志位变化
-T2跟踪执行相加及送和数指令,记录寄存器及标志位变化
-G执行软件中断指令INT20,机器将显示“程序正常终止”的信息,并显示“-”,表明仍处在DEBUG的调试控制状态下,注意未用T命令,因为我们不想进入到20H中断处理程序中去,P命令也可实现相同操作
实验现象记录:
记录每条指令执行后各相关寄存器值及标志位状态
例2-ACS:
116
MOVAX,[0124]
MOVBX,[0126]
ADDAX,BX
MOV[0128],AX
INT20
DW2222
DW8888
DW0
设置断点分段运行程序
-G=CS:
11611D从指定入口运行程序,至断点11D停,可见两个数已取至AX,BX,但还没有求和
-G122从上一断点运行至新断点停,已完成求和并存入指定结果单元
-G完成程序
观看内存内容
-DCS:
11612A显示本程序小段目标代码和数据单元内容
-UCS:
11612A反汇编指定范围的内存内容-
实验现象记录:
通过反汇编,记录程序执行前指定范围的内存内容,并记录每条指令执行后各相关寄存器值及指定范围的内存内容)
例3-ACS:
0192
MOVDX,19B
MOVAH,9
INT21
INT20
DB‘HELLO,WORLD!
$’
-P命令单步执行
实验现象记录:
观察每条指令执行后各寄存器的变化,记录DX,AX的变化。
思考:
根据程序输入情况,考虑‘HELLO,WORLD!
$’在内存中的ASCⅡ码和地址范围
-D
ASCⅡ码为:
;
例4自己设计一段小程序验证补码的加法、进位、溢出的概念;
参考程序(可对数据进行修改):
-ACS:
0100
MOVAL,74
ADDAL,70
MOVAL,7A
ADDAL,94
MOVAL,43
ADCAL,65
INT20
-P命令单步执行
实验现象记录:
记录每条指令执行后AX及标志位变化
例5
1.使用R命令,实现AX=0108,BX=F1AA
-R-R
2.编辑下列程序
-ACS:
0100
XCHGAL,BH
SUBAX,BX
AAS
INT20
-P命令执行单步执行
实验现象记录:
记录每条指令执行后,AX、BX以及标志位的变化。
例6执行下列程序,用P命令或T命令跟踪
-ACS:
0100
MOVAX,0200
MOVDX,1E4F
CALLAX;调用子程序
MOVDX,167C
ADDDH,DL
MOV[0300],DX
INT20
;********下面是子程序段********
-ACS:
0200
PUSHAX
MOVAX,010B
POPAX
RET
实验现象记录:
1)跟踪执行程序,观察在子程序调用前及调用过程中
IPSP堆栈区域内容
2)程序运行完毕后DS:
[0300]中的内容为
3)如果去掉POPAX,程序执行后DS:
[0300]中内容为
实验二.汇编语言上机环境及基本步骤
一、实验目的:
1.掌握编写汇编源程序的基本格式。
2.熟悉汇编语言上机环境。
3.掌握汇编源程序的编辑和修改,熟悉EDIT或记事本的使用方法。
4.掌握汇编源程序编译、连接成可执行文件的过程,熟悉MASM,LINK的使用方法。
二、实验内容:
在屏幕上显示并打印字符串“Thisisasampleprogram.”
三、实验仪器
微机一台
四、实验步骤:
1.在E盘以自己的名字的汉语拼音建立一个工作目录(文件夹,名称不要太长,不超过8个字符比如zhangsan),将文件MASM.EXE,LINK.EXE复制到该目录下,编辑的源文件也保存到该目录下。
从WINDOWS进入DOS环境:
C:
\>
2.用EDIT编辑SW1.ASM源文件。
(1).从当前目录进入自己的目录下,
C:
\>E:
回车
E:
\>CDzhangsan↙回车
键入EDIT并回车:
E:
\zhangsan>EDIT
根据菜单提示进行各种操作。
(2)进入EDIT编辑------EDIT是一种全屏幕编辑软件,可输入、编辑、修改、保存、另存源程序非常方便。
说明:
也可在WIDNDOWS环境下用记事本编辑源文件,在保存时,保存类型应选择所有文件,不能选择文本文件(*.txt),否则在编译时会找不到源文件的。
(3).编辑新文件:
a、在EDIT编辑器中输入汇编源程序。
b、检查输入有无错误。
c、打开文件菜单FILE选择另存为SAVEAS┅输入文件名为:
SW1.ASM保存。
注意:
保存到你自己的文件夹中
d、若需要修改此文件,用FILE菜单选择打开OPEN输入文件名SW1.ASM,即可修改。
修改后注意重新再存盘。
(4).编辑汇编源程序
a、在EDIT(或记事本)中输入源程序。
b、检查。
c、存盘。
可保存为SW1.ASM
3.用汇编程序MASM将SW1.ASM文件汇编,生成SW1.OBJ目标文件。
(1).一般简单程序只需生成.OBJ文件,可键入简化命令:
E:
\zhangsan>MASMSW1;↙
若有错误,则显示错误行号及错误性质,如:
SW1.ASM(5):
errorA2006:
undefinedsymbor:
xxxx
(2).若有错重新进入EDIT进行修改。
修改后并再存盘,退出编辑,回到DOS,再汇编。
E:
\zhangsan>MASMSW1;↙
(3).没有任何错误时,显示:
Assembling:
SW1.asm
表示汇编成功,生成SW1.OBJ文件。
(4).用DIR命令查看应有SW1.OBJ:
E:
\zhangsan>DIRSW1.*
4.用连接程序LINK将SW1.OBJ文件连接,生成SW1.EXE可执行文件。
(1).一般仅生成SW1.EXE文件,可键入简化命令:
E:
\zhangsan>LINKSW1;↙
若有错误,则显示错误信息,则应返回编辑、修改、存盘,再汇编、连接直到连接成功,生成SW1.EXE可执行文件。
(2).用DIR命令查看应有SW1.EXE:
E:
\zhangsan>DIRSW1.*↙
5.运行SW1.EXE文件
E:
\zhangsan>SW1↙
执行SW1.EXE文件,屏幕应显示:
“Thisisasampleprogram.”。
由连接程序生成的.EXE,在DOS下,直接键入文件名(不要扩展名.EXE)就可以把文件装入内存,并立即执行。
但有的程序没有直接显示结果;对于较复杂程序难免会出现错误,直接观察很难找到错误所在,这样就要借用调试程序进行调试。
实验现象记录:
记录调试过程中出现的问题及修改措施,并记录程序执行结果。
五、实验源程序
;********定义数据段*********
DATASEGMENT
DA1DB‘Thisisasampleprogram.’
DB0DH,0AH,’$’
DATAENDS
;********定义堆栈段*********
STACKSEGMENT
ST1DB100DUP(?
)
STACKENDS
;********定义代码段*********
CODESEGMENT
MAINPROCFAR
ASSUMECS:
CODE,DS:
DATA,SS:
STACK
START:
MOVAX,STACK;送堆栈段地址
MOVSS,AX
PUSHDS;返回DOS作准备
MOVAX,0
PUSHAX
MOVAX,DATA;送数据段段地址
MOVDS,AX
MOVAH,9;DOS9号功能调用,显示字符串
MOVDX,OFFSETDA1
INT21H
RET
MAINENDP
CODEENDS
ENDSTART
六、思考题
1试用另外一种方式返回DOS操作系统。
2在屏幕上显示并打印字符串“MynameisXXX!
”XXX为自己姓名汉语拼音。
实验三两个多位十进制数相加的实验
一、实验目的
1.学习数据传送和算术运算指令的用法。
2.熟悉在PC机上建立、汇编、链接、调试和运行8086汇编语言程序的过程。
二、实验内容
将两个多位十进制数相加,要求被加数均以ASCⅡ码形式各自顺序存放在以DATA1和DATA2为首的5个内存单元中(低位在前),结果送回DATA1处。
三、实验仪器
微机一台
四、实验原理
程序流程图:
五、实验步骤
1.编辑、汇编、连接生成可执行文件LW.EXE;
2.在DOS状态下启动该程序;
3.在DEBUG状态下调试研究程序工作过程.
六、实验源程序(LW.ASM)
CRLFMACRO
MOVDL,0DH
MOVAH,02H
INT21H
MOVDL,0AH
MOVAH,02H
INT21H
ENDM
DATASEGMENT
DATA1DB33H,39H,31H,37H,34H
DATA2DB36H,35H,30H,38H,32H
DATAENDS
STACKSEGMENT
STADB20DUP(?
)
TOPEQULENGTHSTA
STACKENDS
CODESEGMENT
ASSUMECS:
CODE,DS:
DATA,SS:
STACK,ES:
DATA
START:
MOVAX,DATA
MOVDS,AX
MOVAX,STACK
MOVSS,AX
MOVAX,TOP
MOVSP,AX
MOVSI,OFFSETDATA2
MOVBX,05
CALLDISPL
CRLF
MOVSI,OFFSETDATA1
MOVBX,05
CALLDISPL
CRLF
MOVDI,OFFSETDATA2
CALLADDA
MOVSI,OFFSETDATA1
MOVBX,05
CALLDISPL
CRLF
MOVAX,4C00H
INT21H
DISPLPROCNEAR
DS1:
MOVAH,02
MOVDL,[SI+BX-1]
INT21H
DECBX
JNZDS1
RET
DISPLENDP
ADDAPROCNEAR
MOVDX,SI
MOVBP,DI
MOVBX,05
AD1:
SUBBYTEPTR[SI+BX-1],30H
SUBBYTEPTR[DI+BX-1],30H
DECBX
JNZAD1
MOVSI,DX
MOVDI,BP
MOVCX,05
CLC
AD2:
MOVAL,[SI]
MOVBL,[DI]
ADCAL,BL
AAA
MOV[SI],AL
INCSI
INCDI
LOOPAD2
MOVSI,DX
MOVDI,BP
MOVBX,05
AD3:
ADDBYTEPTR[SI+BX-1],30H
ADDBYTEPTR[DI+BX-1],30H
DECBX
JNZAD3
RET
ADDAENDP
CODEENDS
ENDSTART
实验四循环结构程序设计
一、实验目的
1.掌握循环程序的结构及执行过程;
2.掌握循环控制指令的功能;
3.掌握循环程序设计方法与调试方法。
二、实验内容
1.单重循环程序设计。
已知当前数据段中DATA1和DATA2开始分别存放若干字节数据,数据个数相同,编制程序检查数据块中的数据是否相同,若相同,则在屏幕上显示1;否则显示0。
2.双重循环程序设计。
存储器数据段BUF开始存放了一个字数组:
N,15,37,8600,A768H,3412H,1256H,76H。
数组中第一个字中存放了该数组的长度N,编制程序使此数组中的数据按照从小到大的次序排列。
三、实验仪器
微机一台
四、实验原理
五、实验步骤
1.编辑、汇编、连接生成可执行文件;
2.在DOS状态下启动该程序;
3.在DEBUG状态下调试研究程序工作过程.
六、实验源程序
参考程序
6.1单重循环程序设计
;************EXAM.ASM*****************
DSEGSEGMENT
DATA1DB‘ABCDEFG3’
DATA2DB‘ABCDEF4G’
CNTDW8
DSEGENDS
CSEGSEGMENT
ASSUMECS:
CSEG,DS:
DSEG
START:
MOVAX,DSEG
MOVDS,AX
MOVDL,31H;1的ASCII码送DL
LEASI,DATA1
LEADI,DATA2
MOVCX,CNT
DECSI
DECDI
AGAIN:
INCSI
INCDI
MOVAL,[SI]
CMPAL,[DI]
LOOPZAGAIN
JZDISP
DECDL
DISP:
MOVAH,2
INT21H
MOVAH,4CH;返回DOS
INT21H
CSEGENDS
ENDSTART
6.2.双重循环程序设计
参考教材P110例题4-8
实验五子程序设计
一、实验目的
1.掌握子程序的结构和设计方法;
2.掌握子程序的调用和返回指令的用法及执行情况;
3.掌握在子程序调用时堆栈的变化情况;
4.掌握主程序与子程序间参数传递的方法;
5.掌握现场的保护与恢复方法。
二、实验内容
已知当前数据段中BUF开始分别存放若干二进制字节数据,编制程序将这些数据分别转换为十六进制数据在屏幕上显示出来,要求十六进制转换ASCII码用子程序实现。
三、实验仪器
微机一台
四、实验原理
五、实验步骤
1.编辑、汇编、连接生成可执行文件;
2.在DOS状态下启动该程序;
3.在DEBUG状态下调试研究程序工作过程.
六、实验源程序
;CONV.ASM
DATASEGMENT
BUFDB0ABH,0CDH,0DEH,01H,02H,03H
DB3AH,4BH,5CH,6FH
DATAENDS
;*****************************
CODESEGMENT
ASSUMECS:
CODE,DS:
DATA
START:
MOVAX,DATA
MOVDS,AX
MOVCX,10
LEABX,BUF
AGAIN:
MOVAL,[BX]
CALLHEX2ASC;调用十六进制转换ASCII码子程序
;******显示ASCII码*******
PUSHCX
MOVCX,DX
MOVDL,CH;显示高位
MOVAH,2
INT21H
MOVDL,CL;显示低位
MOVAH,2
INT21H
MOVDL,'';显示空格
MOVAH,2
INT21H