完整word版青岛科技大学微机原理与应用实验指导书.docx
《完整word版青岛科技大学微机原理与应用实验指导书.docx》由会员分享,可在线阅读,更多相关《完整word版青岛科技大学微机原理与应用实验指导书.docx(52页珍藏版)》请在冰豆网上搜索。
完整word版青岛科技大学微机原理与应用实验指导书
微机原理与应用实验指导书
实验一调试工具debug的使用及基本指令用法
1、实验目的
(1)掌握debug调试工具的使用方法。
(2)测试8086的各种基本指令的用法。
2、实验设备
PC机一台或QTH-2008PC实验设备一套。
3、实验内容
(1)debug的使用
debug的进入和退出
c:
\masm>debug↙
-ß这是debug的提示符,在此可以输入debug的命令
-q↙ß退出debug
②及修改CPU内部的各寄存器
-r↙ß观察各寄存器的内容
AX=0000BX=0000CX=0000DX=0000SP=CFDEBP=0000SI=0000DI=0000
DS=10DDES=10DDSS=10DDCS=10DDIP=0100NVUPDIPLNZNAPONC
10DD:
01007C0AJL010C
-rax↙ß显示并修改AX的内容
AX0000
:
1234↙ß将AX的内容改为1234H
-rf↙ß显示并修改标志寄存器的内容
NVUPDIPLNZNAPONC-ovdn↙ß将标志寄存器的OF置为OV;DF置为DN。
③观察观察和修改内存单元的内容
-d2000↙ß查看从地址DS:
2000H开始的128个单元的内容
10DD:
20000000000000000000-0000000000000000................
10DD:
20100000000000000000-0000000000000000................
10DD:
20200000000000000000-0000000000000000................
10DD:
20300000000000000000-0000000000000000................
10DD:
20400000000000000000-0000000000000000................
10DD:
20500000000000000000-0000000000000000................
-e2000↙ß修改从地址DS:
2000H开始内存单元的内容
10DD:
200000.0100.02↙ß划线数字为键入的内容,连续修改按空格键
④输入程序
-a100↙ß从CS:
100H处开始输入程序(默认的程序起始地址)
10DD:
0100movax,1234↙ß输入汇编指令
10DD:
0103mov[2002],ax↙
10DD:
0106↙ß回车退出程序输入
-a103↙ß修改103处的指令
10DD:
0103mov[2000],ax↙ß输入汇编指令
10DD:
0106↙
-
⑤单步执行程序
-t=100↙ß执行CS:
100H处的一条指令,自动显示寄存器内容及下一条指令。
AX=1234BX=0000CX=0000DX=0000SP=CFDEBP=0000SI=0000DI=0000
DS=10DDES=10DDSS=10DDCS=10DDIP=0103OVDNDIPLNZNAPONC
10DD:
0103A30020MOV[2000],AXDS:
2000=0201
-t↙ß继续执行下一条指令
⑥反汇编程序
-u100↙ß从CS:
100H处开始反汇编
10DD:
0100B83412MOVAX,1234
10DD:
0103A30020MOV[2000],AXß刚才输入的两条指令
10DD:
010636SS:
ß乱码
10DD:
0107A22C41MOV[412C],AL
10DD:
010AEB22JMP012E
10DD:
010C83F906CMPCX,+06
10DD:
010F750DJNZ011E
10DD:
0111807C0A2CCMPBYTEPTR[SI+0A],2C
10DD:
01157505JNZ011C
10DD:
0117FF36A22CPUSH[2CA2]
10DD:
011B41INCCX
10DD:
011CEB10JMP012E
10DD:
011E83F909CMPCX,+09
⑦执行一段程序
-g=100106↙ß从CS:
100H开始,执行到CS:
106处停止。
AX=1234BX=0000CX=0000DX=0000SP=CFDEBP=0000SI=0000DI=0000
DS=10DDES=10DDSS=10DDCS=10DDIP=0106OVDNDIPLNZNAPONC
10DD:
010636SS:
10DD:
0107A22C41MOV[412C],ALSS:
412C=00
……
(2)基本指令的用法
在debug中输入一些基本指令并执行,观察并记录指令的执行情况。
4、实验步骤
(1)启动Debug调试工具,根据实验内容,验证Debug命令及指令执行情况。
(2)观察调试过程中指令执行后各寄存器及数据区的内容。
5、实验问题探讨
(1)如何利用Debug去观察中断向量表?
(2)机器复位后执行的第一条指令在哪儿?
是什么指令?
(3)在debug中输入16进制数时,需要键入H吗?
(4)从当前位置开始执行指令到CS:
0212H处,在Debug中应该使用什么命令?
实验二宏汇编程序的基本语法及运算类程序编制
1、实验目的
(1)学习及掌握汇编语言源程序的书写格式和要求,明确程序中各段的功能和相互之间的关系。
(2)熟练掌握在计算机上建立、汇编、连接、调试及运行程序的方法。
(3)掌握利用汇编实现简单、分支、循环结构设计
2、实验设备
PC机一台或QTH-2008PC实验设备一套。
3、实验内容
(1)编制包含多种数据定义伪指令的完整程序,经汇编、连接后,装入DEBUG,观察数据的存储情况,从而掌握常用伪指令的作用。
举例:
…
X1DB12H,’AB’
X2DW12H,’AB’
NUM=$-X1
X3DD12H;以上数据在内存中如何存放?
…
PUSHDS
XORAX,AX
PUSHAX
MOVAX,DATA
MOVDS,AX
…
MOVAL,X1;翻译成机器指令是什么格式?
MOVAX,X2;?
MOVBL,NUM;?
…
在debug中执行完MOVDS,AX指令后(为什么?
),使用
-d0观察数据段的存储单元的数据存储情况。
(2)在内存BUF开始的单元中,存放着一组无符号字节数据,编程查找其中最大值并存于MAX单元中。
4、编程指导
利用循环程序实现查找最大值,取出第一个数作为最大值初值,以次和后续数据进行比较比次数大则替换,否则保持不变.比较次数为个数减1.注意使用汇编、连接、调试的方法,尤其是DEBUG的使用。
在DEBUG状态下执行程序并设置断点,通过察看内存,看程序是否执行正确。
所编写的汇编程序,要注意结构,只有结构完整,汇编才能通过。
5、实验步骤
方法一、非集成开发环境
(1)使用EDIT或WINDOWS下的记事本或写字板输入你的程序并保存到c:
\masm目录下,命名为t3.asm(后缀必须是asm).
(2)汇编过程:
c:
\masm>masmt3;ß如果没有错误,将生成t3.obj文件
(3)连接过程:
c:
\masm>linkt3;ß如果没有连接错误,将生成t3.exe文件
(4)调试程序:
c:
\masm>debugt3.exeß将该程序装入debug进行调试。
方法二、使用QTHPC2008集成开发环境,建立项目文件、输入源程序、编译、连接、调试。
6、参考程序
图3-1查找最大值程序流程图
DATASEGMENT;数据段定义
BUFDB30,25,56,100,78,97,45,34,44
COUNTEQU$-BUF
MAXDB?
MINDB?
DATAENDS
STACKSEGMENTPARASTACK'STA';堆栈段
DB100DUP(?
)
STACKENDS
CODESEGMENT;代码段定义
ASSUMECS:
CODE,DS:
DATA,SS:
STACK
MAINPROCFAR
START:
PUSHDS;前三句构造返回指针
MOVAX,0
PUSHAX
MOVAX,DATA;对数据段赋值
MOVDS,AX
MOVCX,COUNT;数据个数
MOVSI,OFFSETBUF
MOVAL,[SI]
DECCX;循环次数为个数减1
AGA:
INCSI
CMPAL,[SI]
JANEXT
MOVAL,[SI]
NEXT:
LOOPAGA
MOVMAX,AL;结果处理
EXIT:
RET
MAINENDP
CODEENDS
ENDSTART
7实验问题探讨
(1)伪指令中的表达式是在什么阶段进行运算得出结果的?
(2)如果数据为一组有符号数,如何修改?
(3)如果在查找最大值的同时查找最小值并存于MIN单元中,应如何实现?
实验三系统功能调用
1.实验目的
(1)掌握系统调用的方法,包括入口参数设置,功能号设置,系统调用和出口参数获得。
(2)进一步熟练掌握在计算机上建立、汇编、连接、调试及运行程序的方法,尤其是对带有中断调用的汇编程序的调试。
(3)掌握利用汇编实现键盘输入,屏幕显示的程序设计。
2、实验仪器
PC机一台或QTH-2008PC实验设备一套。
3.实验内容
(1)利用汇编语言实现以下过程:
首先在屏幕显示Whatisyourname:
然后等待用户从键盘输入姓名存入内存指定区间,输出回车换行后,显示ok!
。
(2)从键盘输入一串字符以空格为结束标记,并按逆序显示输出。
4.编程指导
DOS功能调用的一般步骤为:
1如有必要,装入入口参数到规定的寄存器;
2装入功能号到AH中;如有必要,装入子功能号到AL中;
3调用DOS相应功能的中断(这里一般指INT21H);
4如有必要,取出返回结果或出错信息
利用DOS系统功能调用可以实现读键盘、显示,对磁盘、文件的操作、输入输出操作、时间的设置和读取等。
注意对于包含有系统功能调用的汇编程序的调试方法,在单步调试时当遇到INT21H指令时不能用T命令跟踪,因为会进入到中断服务程序内部,这并不是我们所关心的。
结决的方法为:
在单步执行INT21H时,可用G命令代替T命令,G不用接起始地址,断点为INT21H的下一句地址。
或者,有一些DEBUG工具包含V或B命令可以不进入中断服务程序内部,而实现单步运行。
图3-2逆序输出流程图
5.编程参考
(1)程序流程图
(2)实验内容
(1)参考程序
DATASEGMENT;数据段定义
STR1DB'Whatisyouname:
$'
STR2DB'OK!
$'
STR3DB20
DB?
DB20DUP(?
)
DATAENDS
STACKSEGMENTPARASTACK'STA';堆栈段
DB100DUP(?
)
STACKENDS
CODESEGMENT
ASSUMECS:
CODE,DS:
DATA,SS:
STACK
MAINPROCFAR
START:
PUSHDS;前三句构造返回指针
MOVAX,0
PUSHAX
MOVAX,DATA;对数据段赋值
MOVDS,AX
MOVDX,OFFSETSTR1;显示
MOVAH,9
INT21H
MOVDX,OFFSETSTR3;接受输入字符
MOVAH,10
INT21H
MOVDL,0DH;输出回车换行
MOVAH,2
INT21H
MOVDL,0AH
MOVAH,2
INT21H
MOVDX,OFFSETSTR3;显示ok!
MOVAH,9
INT21H
EXIT:
RET
MAINENDP
CODEENDS
ENDSTART
(3)实验内容
(2)参考程序
DATASEGMENT;数据段定义
BUFDB100DUP(?
)
DATAENDS
STACKSEGMENTPARASTACK'STA';堆栈段
DB100DUP(?
)
STACKENDS
CODESEGMENT
ASSUMECS:
CODE,DS:
DATA,SS:
STACK
MAINPROCFAR
START:
PUSHDS;前三句构造返回指针
MOVAX,0
PUSHAX
MOVAX,DATA;对数据段赋值
MOVDS,AX
MOVSI,OFFSETBUF
MOVCX,0
AGA:
MOVAH,1;接受字符
INT21H
CMPAL,'';是否是空格
JZNEXT
MOV[SI],AL;存入字符
INCSI
INCCX
JMPAGA
NEXT:
MOVDL,0DH;输出回车换行
MOVAH,2
INT21H
MOVDL,0AH
MOVAH,2
INT21H
LOP1:
DECSI;逆序输出
MOVDL,[SI]
MOVAH,2
INT21H
LOOPLOP1
EXIT:
RET
MAINENDP
CODEENDS
ENDSTART
6.思考题
(1)利用堆栈实现程序2的要求。
(2)利用9号调用编写DOS界面下的简易菜单项。
实验四汇编语言码制转换程序设计
1.实验目的与要求
(1)掌握码制转换的基本原理及相应的转换程序的编写。
(2)进一步掌握利用DOS系统功能调用实现键盘输入,屏幕显示的功能。
2、实验设备
PC机一台或QTH-2008PC实验设备一套。
3.实验内容
(1)键盘输入一字符,以二进制形式显示其ASCII值。
例如:
输入字符A在屏幕显示01000001。
(2)键盘输入一串数字串,以空格为结束标记,统计其中数字字符的个数存入CX中,求这些数字之和存入BX中。
例如:
输入1234则CX=4BX=0AH.
(3)键盘输入十进制整数(假定范围为0-32767),然后转换成二进制格式存储。
4.编程指导
在程序设计中,经常需要进行代码转换。
常用的代码转换有:
BCD码转二进制码,二进制码转BCD码;ASCII码转BCD码,BCD码转ASCII码;二进制码转ASCII码,ASCII码转二进制码等。
实验
(1)是将二进制表示的数据显示,对应每位二进制数0,1的ASCII分别为30H和31H,将其转换后在用2号系统功能调用在屏幕上显示出来。
要注意2号调用的出口参数为AL,AL为1调用成功,AL为0调用不成功。
实验
(2)实验(3)都要注意从键盘输入的数字实际上是数的ASCII码,必需先将其转换为0-9的数后才能运算,实验
(2)将其相加,实验(3)要分别乘各自得权后累加在一起。
5.流程框图和参考程序
(1)实验内容
(1)参考程序
STACKSEGMENTPARASTACK'STA';堆栈段
DB100DUP(?
)
STACKENDS
CODESEGMENT
ASSUMECS:
CODE,SS:
STACK
START:
MOVAH,1
INT21H
MOVBL,AL
MOVCX,8
AGA:
SHLBL,1
MOVDL,30H
ADCDL,0
MOVAH,2
INT21H
LOOPAGA
EXIT:
MOVAX,4C00H
INT21H
CODEENDS
ENDSTART
(2)实验内容
(2)参考程序
STACKSEGMENTPARASTACK'STA';堆栈段
DB100DUP(?
)
STACKENDS
CODESEGMENT
ASSUMECS:
CODE,SS:
STACK
START:
MOVCX,0
MOVBX,0
INPUT:
MOVAH,1
INT21H
CMPAL,''
JZSTOP
CMPAL,30H
JBINPUT
CMPAL,39H
JAINPUT
INCCX
SUBAL,30H
MOVAH,0
ADDBX,AX
JMPINPUT
EXIT:
MOVAX,4C00H
INT21H
CODEENDS
ENDSTART
(3)实验内容(3)参考程序
图3-4ASCII码转换为二进制数
DATASEGMENT;数据段定义
KEY_BUFDB10
DB?
DB10DUP(?
)
DATA1DW?
DATAENDS
STACKSEGMENTPARASTACK'STA';堆栈段定义
DB100DUP(?
)
STACKENDS
CODESEGMENT
ASSUMECS:
CODE,DS:
DATA,SS:
STACK
MAINPROCFAR
START:
PUSHDS;前三句构造返回指针
MOVAX,0
PUSHAX
MOVAX,DATA;对数据段赋值
MOVDS,AX
MOVDX,OFFSETKEY_BUF;
MOVAH,0AH
INT21H
MOVSI,OFFSETKEY_BUF+1;
MOVBL,[SI]
INCSI
MOVAX,0
TRANS:
MOVDX,10
MULDX
MOVDH,0
MOVDL,[SI]
ANDDL,0FH
ADDAX,DX
INCSI
DECBL
JNZTRANS
MOVDATA1,AX
CALLOUTPUT
RET
MAINENDP
CODEENDS
ENDSTART
6.思考题
(1)将实验一中的最大值结果以十六进制形式显示。
(2)在屏幕上连续输出0-98的十进制数字。
实验五简单I/O接口的操作
1、实验目的
(1)掌握接口操作的基本方法,掌握数据输入输出程序编制的方法。
2、实验设备
QTH-2008PC实验设备一台,键盘、鼠标、显示器各一件。
3、实验内容
(1)利用74LS244作为输入口,读取开关状态,并将此状态通过74LS273驱动发光二极管显示出来。
(2)控制8个LED,实现流水灯的功能。
4、实验说明
(1)74LS244是一种三态输出的8总线缓冲驱动器,无锁存功能,当G为低电平时,Ai信号传送到Yi,当为高电平时,Yi处于禁止高阻状态。
(2)74LS273是一种8位D触发器,当CLR为高电平且CLK端电平正跳变时,D0——D7端数据被锁存到8D触发器中。
(3)端口地址范围:
IOY0:
180H~18FHIOY1:
190H~19FH
IOY2:
1A0H~1AFHIOY3:
1B0H~1BFH。
图4-174LS244与74LS273扩展I/O口原理图
5、实验原理图
6、实验步骤
(1)实验连线:
(确保电源关闭)
Ø244的CS——PC104总线接口模块的IOY0,Y7—Y0——开关K01—K08。
Ø273的CS——PC104总线接口模块的IOY1,Q7—Q0——发光二极管L1—L8。
Ø该模块的WR、RD分别连到PC104总线接口模块的IOWR、IORD。
Ø
图4-2扩展I/O口连线图
该模块的数据(AD0~AD7)连到PC104总线接口模块的数据(D0~D7)。
(2)连线检查无误后,开机上电。
(3)利用debug中的i或o命令,测试一下端口是否好用。
(4)编制程序(略)
(5)拨动开关,观察发光二极管的变化。
7、参考程序
LS244EQU0180H;244片选信号
LS273EQU01a0H;273片选信号
MY_STACKSEGMENTPARA'STACK'
DB100DUP(?
)
MY_STACKENDS
MY_CODESEGMENTPARA'CODE'
MY_PROCPROCFAR
ASSUMECS:
MY_CODE,DS:
MY_DATA
ASSUMESS:
MY_STACK
MAIN:
MOVAX,MY_DATA
MOVDS,AX
READ1:
MOVDX,LS244;读取开关状态
INAL,DX
MOVDX,LS273
OUTDX,AL;送LED显示
CALLBREAK
JMPREAD1
MY_PROCENDp
;
BREAKPROCNEAR;按任意键退出
PUSHF
PUSHAX
PUSHDX
MOVAH,06H
MOVDL,0FFH
INT21H
JERETURN
MOVAX,4C00H
INT21H
RETURN:
POPDX
POPAX
POPF
RET
BREAKENDP
MY_CODEENDS
ENDMAIN
8、思考题
(1)如果IOWR没有连接或线断了,会出现什么现象?
(2)如果指示灯不亮,你如何排查解决此问题?
(3)如果74LS244和74LS273使用同一个端口地址?
能行么?
为什么?
实验一下。
(4)假定244或273的CS接IOY0,用端口地址181H或182H去访问244或273可以么?
为什么?
实验六可编程并行接口芯片8255A的使用
1、实验目的
(1)了解可编程并行接口芯片8255的内部结构、工作方式、初始化编程及应用。
2、实验设备
QTH-2008PC实验设备一台,键盘、鼠标、显示器各一件。
3、实验内容(以下3个实验任选一个)
(1)流水灯实验:
利用8255的A口、B口循环点亮16只发光二极管。
(2)交通灯实验:
利用8255的A口模拟交通信号灯。
(3)I/O输入输出实验:
利用8255的A口读取开关状态,8255的B口把状态送发光二极管显示。
4、