资源描述
微机原理及应用实验指导书
63
2020年4月19日
文档仅供参考
微机原理与接口技术实验讲义
河北师范大学职业技术学院电子系
.11
实验目的与要求
一、实验目的
微机原理实验内容共安排了6个实验,其目的是使读者熟悉8086指令系统和掌握汇编语言程序设计的方法,并能利用DEDUG调试工具来调试汇编程序,为读者从事计算机研究与应用工作打下一个坚实的基础。
汇编语言是唯一能够充分利用计算机硬件特性的面向机器的语言。微机接口技术及应用实验共安排了6个实验,是编制有关控制程序的,使8086CPU内部的中断控制器、定时器、并行接口完成相应的工作,借以熟悉机内各接口芯片的工作和使用方法,了解8086CPU的中断和系统功能调用的使用方法。
二、实验要求
(1) 实验前要做好充分准备,包括了解程序流程图、源程序清单、调试步骤、调试方法及对程序结果的分析等。
(2) 上机时要熟悉教学实验设备的使用方法。在程序的调试过程中,有意识地学习和掌握DEBUG程序的各种操作命令,以便掌握程序的调试方法及技巧。
(3) 程序调试完后,须由实验辅导教师在机器上检查运行结果,经教师认可后才算完成。每个实验完成后,应写出实验报告。实验报告的要求如下:①程序说明。用来说明程序的功能、结构和数据结构等。②调试说明。便于学生总结经验,提高编程及调试能力。它包括:调试情况,如上机时遇到的问题及解决办法,观察到的现象及其分析,对程序设计技巧的总结及分析等;程序的输出结果及对结果的分析。②实验的心得体会。
(4) 上机时要遵守实验室的规章制度,爱护实验设备。
实验一 数据传送
一、实验目的
1.熟悉8086指令系统的数据传送指令,掌握传送指令的寻址方式。
2.利用DEBUG调试工具来调试汇编程序。
二、实验设备
PC机及相应的软件。
三、实验内容
1、 从3500H内存单元开始建立(0~15共16个数据。程序如图1所示。
图1
实验步骤:
(1)打开PC机电源,进入Windows XP
(2)点击开始,指向运行,在打开窗口键入CMD ↙,(划线部分是实际输入的内容),↙ 代表回车键。
(3) 在提示符下,输入 DEBUG ↙,此命令是调用调试程序DEBUG程序,所幕显示“一”提示符,表示进入DEBUG状态。
(4)输入程序 A命令:(在“一”提示符开始输入程序段)
-A ↙
程序流程图
输入程序过程中,若在Enter前发现本行有错误字符,则能够按 ← 键删除重输;当Enter后,系统提示“eeror”的,地址指针仍旧会停留在当前行,等你重新输入。
输入程序后,能够按以下操作进行反汇编,查看程序:
(5)修改程序:当发现源程序有输入错误时,可做相应的修改,例如;修改 语句为
MOV CX,000FH的操作如下:
注意:当输入程序出现多语句或少语句时,DEBUG调试工具没有删除和插入功能,修改输入程序的错误,需从出错的源程序的偏移地址IP开始,顺序输入正确的观程序。
(6)运行程序:程序的运行方式有跟踪与显示、设置断点、连续运行方式。
每次运行一条指令就显示行寄存器和8个标志位的内容以及下一条要执行的指令及地址IP, 重复T ↙ 就可一条一条地运行整个程序,且到程序结束。
连续运行命令G
-G= ↙
用G命令执行程序段,起始地址为 H,终止地址为20llH,并列出执行后CPU各寄存器的内容和最后一条指令。
如果只用G命令不加地址参数,程序运行的起始地址IP为100H。
该命令方式每次显示128个字节的内容。显示的内容为两种方式:左边为十六进制内容,右边为与十六进制相对应的ASCII码字符,对不可见的字符以“.”代替。
②结果存放在寄存器,用显示、修改寄存器命令R
该命令既能显示又能修改寄存器内容,例如:
(8)退出DEBGG返回DOS。
-Q ↙
2、 用数据传送指令编写程序,将内存3500H单元开始的0—15共16个数传送到3600H单元开始的数据区中,参考程序及流程图如图所示。
实验步骤:
(1)输入程序并检查无误。
(2) G=2l00 2111 ↙ ,运行程序。
(3)D3600↙ ,显示结果是:
3、 用PUSH指令将一组数据压入堆栈,经过三种个同的出栈方式出栈,将出栈后数据的变化情况,并将结果填入表中。
(4)当三种出栈方式调试完成后,以第三种出栈程序为准,用单步将堆栈区和SP的内容变化填入表中。
四、预习要求
1.复习8086指令系统中的传送指令,了解传送指令的寻址方式。
2.初步掌握调试程序DEBUG及其使用。
五、实验报告要求
1.写出本实验内容与步骤。
2.整理出运行各程序段运行结果。
3. 小结DEBUG调试工具的使用方法。
实验二 汇编语言上机操作
一、实验目的
掌握汇编语言程序编辑、汇编、连接、运行以及利用DEBUG调试程序的方法。
二、实验设备
PC机及相应的软件。
三、实验内容及步骤
1、编辑一个指定的汇编语言源程序,并对其进行汇编、连接和运行。
2、利用DEBUG进行程序调试,掌握常见命令的使用方法,观察运行结果。
形成目标程序 ABC.OBJ
形成可执行程序
ABC.EXE
装入可执行程序到内存,并执行
D:\>ABC
下一程序
用
DEBUG
调试可执行程序
D:\>
DEBUG
ABC.EXE
找到原因
Y
N
Y
N
N
Y
N
有汇编错误信息?
Y
编辑源文件 EDIT ABC.ASM
汇编源程序 MASM ABC.ASM
连接目标程序 LINK ABC.OBJ
有连接错误信息?
运行结果正确?
用DEBUG调试程序查错?
3、汇编语言上机过程
D:\>EDIT ABC.asm
D:\>MASM ABC;
有语法错,回到EDIT下修改源程序
D:\>LINK ABC;
有错,回到EDIT下修改源程序
D:\>ABC
运行结果错,回到EDIT下修改源程序
或在DEBUG下调试,找原因。
D:\>DEBUG ABC.exe
汇编语言程序举例1
例1 将BL寄存器的内容按二进制形式显示出来
设:(BL)=01010011B
输出显示:01010011
参考程序
code SEGMENT
ASSUME CS: code
start: MOV BL, 53H ;设置一个测试53H
MOV CX , 8 ;显示字符个数为8
next: SHL BL , 1 ;将显示位移至CF中
JC one ;CF=1?
MOV DL , 30H ;CF=0, 将0的ASCII放在DL中
JMP print
one: MOV DL , 31H ;CF=1, 将1的ASCII放在DL中
print: MOV AH , 2
INT 21H ;调用DOS功能显示
DEC CX ;循环次数减1
JNZ next ;判断是否结束
MOV AH, 4CH ;返回DOS
INT 21H
code ENDS
END start
D:\>EDIT ShowBL.ASM 编写源程序
D:\>MASM ShowBL.ASM 汇编成ShowBL.obj
Microsoft (R) Macro Assembler Version 5.10
Copyright (C) Microsoft Corp 1981, 1988. All rights reserved.
48912 + 447243 Bytes symbol space free
0 Warning Errors
0 Severe Errors
D:\>LINK ShowBL; 连接成ShowBL.exe
Microsoft (R) Overlay Linker Version 3.61
Copyright (C) Microsoft Corp 1983-1987. All rights reserved.
LINK : warning L4021: no stack segment
D:\>ShowBL 装载并执行ShowBL.exe
01010011
D:\>
在DEBUG下查看ShowBL.exe的装入情况:
D:\>DEBUG ShowBL.exe
- R ;查看当前寄存器内容
AX=0000 BX=0000 CX=001B DX=0000 SP=0000 BP=0000 SI=0000 DI=0000
DS=0B51 ES=0B51 SS=0B61 CS=0B61 IP=0000 NV UP EI PL NZ NA PO NC
B353 MOV BL,53
- U CS:0 ;查看程序
0B61:0000 B353 MOV BL,53
0B61:0002 B90800 MOV CX,0008
0B61:0005 D0E3 SHL BL,1
0B61:0007 7205 JB 000E
…….
0B61:0017 B44C MOV AH,4C
0B61:0019 CD21 INT 21
…….
-G=0 ;执行程序
01010011 ;屏幕显示
Program terminated normally
-
开始
建立传送方向
DS¬源串首地址
ES←目的串首地址
CX¬串长度
串传送
返回DOS
汇编语言程序举例2
例2 编写完整的汇编语言程序,完成内存数据块传送功能。将某段中的字符串“Hello!”传送到另一段中。
利用变量定义字符串和缓冲区
参考程序
aa SEGMENT ; 数据段1
xx DB 'Hello!’ ; 定义源串
aa ENDS
bb SEGMENT ;数据段2
yy DB 6 dup (?) ; 定义目的缓冲区
bb ENDS
cc SEGMENT ;代码段
ASSUME CS: cc, DS: aa, ES: bb
start : CLD ;设置传送方向
MOV AX , aa ;DS:SI ← 源串首地址
MOV DS , AX
LEA SI , xx
MOV AX , SEG yy ;ES:DI ← 目的首地址
MOV ES , AX
MOV DI , OFFSET yy
MOV CX , 6 ;CX ← 串的长度
REP MOVSB ;串传送
MOV AH , 4CH ;调用4CH系统功能,返回DOS
INT 21H
cc ENDS
END start ;指示程序结束和程序入口
D:\>EDIT hello.asm ;编写源程序
D:\>MASM hello.asm ;汇编源程序
Microsoft (R) Macro Assembler Version 5.10
Copyright (C) Microsoft Corp 1981, 1988. All rights reserved.
49860 + 421241 Bytes symbol space free
0 Warning Errors
0 Severe Errors
D:\>LINK hello ; ;连接程序
Microsoft (R) Overlay Linker Version 3.61
Copyright (C) Microsoft Corp 1983-1987. All rights reserved.
LINK : warning L4021: no stack segment
D:\>hello ; 执行程序
D:\>
D:\>DEBUG hello.exe ;利用DEBUG查看结果
-U ;查看程序代码
CLD
MOV AX , aa
MOV DS , AX
LEA SI , xx
MOV AX , SEG yy
MOV ES , AX
MOV DI , OFFSET yy
MOV CX , 6
REP MOVSB
MOV AH , 4CH
INT 21H
129F:0000 FC CLD
129F:0001 B89D12 MOV AX , 129D
129F:0004 8ED8 MOV DS , AX
129F:0006 8D360000 LEA SI , [ 0000 ]
129F:000A B89E12 MOV AX , 129E
129F:000D 8EC0 MOV ES , AX
129F:000F BF0000 MOV DI , 0000
129F:0012 B90600 MOV CX, 0006
129F:0015 F3 REPZ
129F:0016 A4 MOVSB
129F:0017 B44C MOV AH, 4C
129F:0019 CD21 INT 21
……
-D 129D:0 L20 ;执行程序前,查看源串内容
129D:0000 48 65 6C 6C 6F 21 00 00-00 00 00 00 00 00 00 00 Hello!..........
129D:0010 00 00 00 00 00 00 00 00-00 00 00 00 00 00 00 00 ................
-D 129E:0 L20 ;执行程序前,查看目的串
129E:0000 00 00 00 00 00 00 00 00-00 00 00 00 00 00 00 00 ................
129E:0010 FC B8 9D 12 8E D8 8D 36-00 00 B8 9E 12 8E C0 BF ... ...6........
-
-G ; 执行程序
Program terminated normally
-D ES: 0 1F ; 查看目的串
129E:0000 48 65 6C 6C 6F 21 00 00-00 00 00 00 00 00 00 00 Hello!..........
129E:0010 FC B8 9D 12 8E D8 8D 36-00 00 B8 9E 12 8E C0 BF .......6........
-D 129D : 0 L50 ; 从源串重新查看
129D:0000 48 65 6C 6C 6F 21 00 00-00 00 00 00 00 00 00 00 Hello!..........
129D:0010 48 65 6C 6C 6F 21 00 00-00 00 00 00 00 00 00 00 Hello!..........
129D:0020 FC B8 9D 12 8E D8 8D 36-00 00 B8 9E 12 8E C0 BF .......6........
129D:0030 00 00 B9 06 00 F3 A4 B4-4C CD 21 09 E8 08 00 03 ........L.!.....
129D:0040 F1 E8 03 00 3C 0D C3 AC-E8 EC F8 75 04 3C 3B 75 ....<......u.<;u
aa SEGMENT
xx DB 'Hello!’
aa ENDS
bb SEGMENT
yy DB 6 dup (?)
bb ENDS
cc SEGMENT
ASSUME CS:cc, DS:aa, ES:bb
start : CLD
MOV AX , aa
MOV DS , AX
LEA SI , xx
MOV AX , SEG yy
MOV ES , AX
MOV DI , OFFSET yy
MOV CX , 6
REP MOVSB
MOV AH , 4CH
INT 21H
cc ENDS
END start
-
-U ;查看程序代码
129F:0000 FC CLD
129F:0001 B89D12 MOV AX , 129D
129F:0004 8ED8 MOV DS , AX
129F:0006 8D360000 LEA SI , [ 0000 ]
129F:000A B89E12 MOV AX , 129E
129F:000D 8EC0 MOV ES , AX
129F:000F BF0000 MOV DI , 0000
129F:0012 B90600 MOV CX, 0006
129F:0015 F3 REPZ
129F:0016 A4 MOVSB
129F:0017 B44C MOV AH, 4C
129F:0019 CD21 INT 21
实验三 汇编语言程序上机调试
一、实验目的
掌握循环结构程序设计的方法,熟练汇编语言程序上机调试的方法和过程。
二、实验设备
PC机及相应的软件。
三、实验内容
编写程序
要求比较两个字符串STRING1和STRING2所含字符是否相同,若相同则显示 “MATCH”,若不相同显示“NOMATCH”。
四、实验步骤
编辑源程序,经汇编、链接、执行、调试后,上机完成上述任务,并将程序及运行结果写在报告中。
实验四 JPWJ-1教学系统认识实验
一、实验目的
掌握TDN86/51教学系统的基本操作。
二、实验设备
JPWJ-1教学系统实验箱一台。
PC机1台
三、实验内容
计算X+Y+Z=?(X、Y、Z为16位二制数)
编程指南
由于本实验是三个十六位二制数相加运算,因此,当X+Y时要考虑用ADC指令,把进位C加到结果的高16位中,当(X+Y)+Z时,再把进位C加到结果的高16位中,本实验设定三个加数0FFFFH,计算结果应为2FFFDH。
四、实验步骤
1、系统认识实验
(1)使用串行通讯电缆将实验系统与PC机相连。
(2) 双击PC机桌面上的DJ86PCI快捷方式图标,进入窗口操作界面。选择对应的串行口号。
(3) 鼠标点击文件下拉菜单的新建进入编辑状态。输入并保存源程序,扩展名为L1.ASM。(4)再单击工具栏中编译装载,即可完成源文件自动编译、装载目标代码功能,再单击“调试”中“连续运行”或工具图标运行,即开始运行程序。
(5)运算结果保留在内存4100H~4102H单元中,点击DJ-8086K软件中存贮器RAM窗口,输入RAM的起始地址4100、4101、4102,单元内容应为FD、FF、02。
参考程序
CODE SEGMENT ;S1.ASM-->BIN ADD
ASSUME CS:CODE
ORG 2CA0H ;程序入口地址
START: CLC
MOV SI,4000H ;被加数首址
MOV [SI],0ffffH ;输入被加数
MOV [SI+2],0ffffH ; 输入加数1
MOV [SI+4],0ffffH ; 输入加数2
MOV AX,0000H ;AX清零
MOV [SI+102H],AX ;存结果单元4102清零
MOV AX,[SI] ;取被加数
ADD AX,[SI+2] ;被加数+加数1
ADC [SI+102H],0000 ;带进位加
ADD AX,[SI+4] ;连加加数2
MOV [SI+100H],AX ;存结果低位
ADC [SI+102H],0000 ;存结果高位
JMP $ ;结束
CODE ENDS
END START
2、系统操作练习
将内存3500H单元开始的0-15共16个数传送到3530H单元开始的存储区中。
参考程序
CODE SEGMENT
ASSUME CS:CODE
ORG 1000H
START: MOV AL,0
MOV CX,16
MOV SI,3500H
L1: MOV [SI],AL
INC AL
INC SI
LOOP L1
MOV SI,3500H
MOV DI,3530H
MOV CX,0010H
A1: MOV AX,[SI]
MOV [DI],AX
INC SI
INC SI
INC DI
INC DI
DEC CX
JNZ A1
A2: JMP A2
CODE ENDS
END START
实验步骤:
(1)编辑程序并检查无误后,经编译后装入系统。
(2)运行以上程序,按实验系统的复位键返回监控状态。
(3)查看3500与3530显示结果并记录。
实验五 8253定时/计数器应用实验
一、实验目的
1、熟悉8253在系统中的典型接法。
2、掌握8253的工作方式及应用编程。
二、实验设备
1、 JPWJ-1教学实验系统一台。
2、 PC机1台。
三、实验内容
1、8253计数器应用实验
编写程序
设8253的计数器0、计数器1、计数器2以及控制口地址为40H、41H、42H、43H。如果将计数器0设置成方式3,计数器1设置成方式3,计数器0的输出OUT0作为计数器1时钟输入,CLK0连接T2(1MHz),计数器1的OUT1输出20Hz方波,并将OUT2连接L8。观察LED的变化。
如果将CLK0连接T1(2MHz)计数器1输出20Hz,并OUT2连接L8。比较程序有哪些的变化。
实验线路:自己设计
CODE SEGMENT
ASSUME CS:CODE
ORG 1000H
START:
CODE ENDS
END START
2 、 8253应用于电子发声实验
实验内容:
利用实验系统的1.8432MHZ作为8253的时钟信号,音符表的内容对应8253的时间常数,让8253的计数器1工作于方式3输出相应的音调送扬声器产生音乐。
实验线路:
参考程序:
STACK SEGMENT STACK
DW 64 DUP (?)
STACK ENDS
DATA SEGMENT
TABL DB 33H, 33H, 3DH, 33H, 26H, 26H, 26H, 26H, 2DH, 2DH, 26H, 2DH, 33H
DB 33H, 33H, 33H, 33H, 33H, 4DH, 45H, 3DH, 3DH, 3DH, 45H, 4DH, 45H
DB 45H, 45H, 45H, 45H, 45H, 45H, 45H, 33H, 33H, 3DH, 33H, 26H, 26H
DB 26H, 28H, 2DH, 2DH, 26H, 26H, 33H, 33H, 33H, 33H, 45H, 3DH, 39H
DB 39H, 39H, 52H, 4DH, 4DH, 4DH, 4DH, 4DH, 4DH, 4DH, 4DH, 2DH, 2DH
DB 26H, 26H, 26H, 26H, 26H, 26H, 28H, 28H, 2DH, 28H, 26H, 26H, 26H
DB 26H, 2DH, 28H, 26H, 2DH, 2DH, 33H, 3DH, 4DH, 45H, 45H, 45H, 45H
DB 45H, 45H, 45H, 45H, 33H, 33H, 3DH, 33H, 26H, 26H, 26H, 28H, 2DH
DB 2DH, 26H, 2DH, 33H, 33H, 33H, 33H, 33H, 33H, 45H, 3DH, 39H, 39H
DB 39H, 52H, 4DH, 4DH, 4DH, 4DH, 4DH, 4DH, 4DH, 4DH, 00H
DATA ENDS
CODE SEGMENT
ASSUME CS:CODE,DS:DATA
ORG 1000H
START: MOV AX,DATA
MOV DS,AX
MOV BX,OFFSET TABL
MOV AL,[BX]
MOV AH,00H
A1: MOV DL,25H
MUL DL
PUSH AX
MOV AL,0B7H
OUT 43H,AL
POP AX
OUT 41H,AL
MOV AL,AH
OUT 41H,AL
INC BX
MOV AH,00H
MOV AL,[BX]
TEST AL,0FFH
JZ A3
MOV CX,77FFH
A2: PUSH AX
POP AX
LOOP A2
JMP A1
A3: MOV BX,OFFSET TABL
MOV AL,[BX]
MOV AH,00H
JMP A1
CODE ENDS
END START
实验步骤:
(1)接线:8253的CLK1连接系统的PCLK(1.8432MHZ);OUT1连接扬声器的输入端SPK+;GATE2接高电平。
(2)编辑程序并检查无误后,经汇编、连接后装入系统。
(3)运行程序,即可听到扬声器发出的声音。
实验六 8255并行接口应用实验
一、实验目的
1、掌握8255的各种工作方式及其应用。
2、熟悉在系统的实验单元上连接实验电路。
二、实验设备
1、JPWJ-1教学实验系统一台,PC机1台。
2、连接导线(排线)若干。
三、实验内容
8255的端口地址是:
PA口:0FF28H; PB口:0FF28H; PC口:0FF2AH; 控制口:0FF2BH
1、8255接口应用实验(1)
实验内容:
设8255的端口A工作于方式0,作为输出口,端口B工作于方式0,作为输入口。由8255端口B输入一组开关状态信号, 8255端口A输出开关的状态信号至一组发光二极管显示。
实验线路:
参考程序:
STACK1 SEGMENT STACK
DW 64 DUP(?)
STACK1 ENDS
CODE SEGMENT
ASSUME CS:CODE
ORG 1000H
START: MOV AL,82H
MOV DX,0FF2BH
OUT DX, AL
A1: MOV DX,0FF29H
IN AL,DX
DEC DX
OUT DX,AL
JMP A1
CODE ENDS
END START
四、实验步骤
(1)接线:8255的PA0--PA7连接发光二极管的接线端L1—L8;8255的PB0--PB7连接开关的接线端K1—K8。
(2)编辑程序并检查无误后,经编译后装入系统。
(3)运行程序,拨动开关,观察发光二极管的显示与开关状态的对应情况。
结果:
2、8255接口应用实验(2)
实验内容:
让8255的端口A工作于方式0,作为输出口,端口B工作于方式1,作为输入口,则端口C的PC2为选通信号输入端STBB,PC0为中断请求信号输出端INTRB。由8255端口B输入一组开关状态信号, 8255端口A输出开关的状态信号至一组发光二极管显示。当B口数据就绪后,发STBB信号,采用查询方式,CPU读取端口B的数据并送端口A输出显示。
实验线路:
五、实验步骤
(1)接线:8255的PA0~PA7连接发光二极管的接线端L1~L8;8255的PB0~PB7连接开关的接线端K1~K8; PC2接开关ANO的负脉冲信号输出端。
(2)自己编写程序并检查无误后,经编译后装入系统。
(3)运行程序,拨动开关K1~K8,然后按动开关ANO,观察发光二极管的显示与开关状态的对应情况。
程序是:
结果:
附录一 DEBUG命令及操作
1.A 启动小汇编程序
命令格式:A[段址:][偏移量] ↙。
A 段址:偏移量↙--从段址:偏移量构成的实际地址单元起填充汇编程序的目标码。
A 偏移量↙--从默认的段址:偏移量构成的实际地址单元起填充汇编程序的目标码。
A↙——从默认段址:默认偏移量构成的实际地址单元起填充汇编程序的目标码。
需要说明的是,对汇编语言的输入有如下规定:
(1)数字一律为不带H后缀的十六进制数;
(2)[m]类操作一定留在[ ]之前标注:W(字)或B(字节),如:
MOV D[ ],AL
MOV W[ ],AX
2.B 设置断点
在系统提示符下键入B↙,系统提示[i]:等待用户给出断点地址,回车后,系统继续提示[i+1]:。若直接用回车响应则结束访命令。注意:系统允许设置至多10个断点,而且只能经过按动复位开关或重新上电来实现清除所设断点。
3.D 显示--段地址单元中的数据
命令格式:D [段址:]起始地址,[尾地址] ↙
D [段址]:偏移地址↙。
4.E 编辑指定地址单元中的数据
命令格式:E[段址]:偏移量
该命令每次只能显示或修改一字节数据,进入E命令状态就可经过“空格”键使地址向高地址方向移动,而“—”键使地址向低地址方向移动,同时也可直接填入新数据来修改地址单元中的内容。若直接用回车键响应,则退出E命令。
5.G 连续运行程序
命令格式:G=[[段址:]偏移量↙.
GB:[[段址:]偏移量↙
其中G命令表示无断点连续运行由段址:偏移量指定的入口程序,而GB格式表示带断点连续运行由段址:偏移量指定入口的
展开阅读全文