80x86微机原理与接口技术简.docx
《80x86微机原理与接口技术简.docx》由会员分享,可在线阅读,更多相关《80x86微机原理与接口技术简.docx(42页珍藏版)》请在冰点文库上搜索。
80x86微机原理与接口技术简
80x86微机原理与接口技术
实验指导书
长安大学信息学院电子通信实验室
第1章80X86微机原理及其程序设计实验
本章主要介绍汇编语言程序设计,通过实验来学习80X86的指令系统、寻址方式以及程序的设计方法,同时掌握联机软件的使用。
1.1系统认识实验
1.1.1实验目的
掌握TD-PITE80X86微机原理及接口技术教学实验系统的操作,熟悉Wmd86联机集成开发调试软件的操作环境。
1.1.2实验设备
PC机一台,TD-PITE实验装置一套。
1.1.3实验内容
编写实验程序,将00H~0FH共16个数写入内存3000H开始的连续16个存储单元中。
1.1.4实验步骤
1.运行Wmd86软件,进入Wmd86集成开发环境。
2.根据程序设计使用语言的不同,通过在“设置”下拉列表来选择需要使用的语言,如图1-1-1所示。
语言选择后,下次再启动软件,语言环境保持这次的修改不变。
在这里,我们选择汇编语言。
图1-1-1语言环境选择界面
3.语言选择后,点击新建或按Ctrl+N组合键来新建一个文档,如图1-1-2所示。
默认文件名为Wmd861。
图1-1-2新建文件界面
4.编写实验程序,如图1-1-3所示,并保存,此时系统会提示输入新的文件名,输完后点击保存。
图1-1-3程序编辑界面
5.点击
,编译文件,若程序编译无误,则输出如图1-1-4所示的输出信息,然后再点击
进行链接,链接无误输出如图1-1-5所示的输出信息。
图1-1-4编译输出信息界面图1-1-5链接输出信息界面
6.连接PC与实验系统的通讯电缆,打开实验系统电源。
7.编译、链接都正确并且上下位机通讯成功后,就可以下载程序,联机调试了。
可以通过端口列表中的“端口测试”来检查通讯是否正常。
点击
下载程序。
为编译、链接、下载组合按钮,通过该按钮可以将编译、链接、下载一次完成。
下载成功后,在输出区的结果窗中会显示“加载成功!
”,表示程序已正确下载。
起始运行语句下会有一条绿色的背景。
如图1-1-6所示。
图1-1-6加载成功输出显示界面
8.将输出区切换到调试窗口,使用D0000:
3000命令查看内存3000H起始地址的数据,如图1-1-7所示。
存储器在初始状态时,默认数据为CC。
图1-1-7内存地址单元数据显示
9.点击按钮
运行程序,然后再点击
来停止程序运行,接下来观察程序运行结果,仍使用命令D0000:
3000来观察数据变化。
如图1-1-8所示。
图1-1-8运行程序后数据变化显示
10.也可以通过
在语句AA2:
JMPAA2处设置断点,断点显示如图1-1-9所示,然后运行程序,当遇到断点时程序会停下来,然后观察数据。
可以使用E0000:
3000来改变该地址单元的数据,如图1-1-10所示,输入11后,按“空格”键,可以接着输入第二个数,如22,结束输入按“回车”键。
图1-1-9断点设置显示图1-1-10修改内存单元数据显示界面
实验例程文件名为Wmd861.asm。
1.1.5操作练习
编写程序,将内存3500H单元开始的8个数据复制到3600H单元开始的数据区中。
通过调试验证程序功能,使用E命令修改3500H单元开始的数据,运行程序后使用D命令查看3600H单元开始的数据。
1.2数制转换实验
1.2.1实验目的
1.掌握不同进制数及编码相互转换的程序设计方法,加深对数制转换的理解;
2.熟悉程序调试的方法。
1.2.2实验设备
PC机一台,TD-PITE实验装置一套。
1.2.3实验内容及步骤
计算机输入设备输入的信息一般是由ASCII码或BCD码表示的数据或字符,CPU一般均用二进制数进行计算或其它信息处理,处理结果的输出又必须依照外设的要求变为ASCII码、BCD码或七段显示码等。
因此,在应用软件中,各类数制的转换是必不可少的。
计算机与外设间的数制转换关系如图1-2-1所示,数制对应关系如表1-2-1所示
图1-2-1数制转换关系
表1-2-1数制对应关系表
续表1-2-1
1.将ASCII码表示的十进制数转换为二进制数
十进制表示为:
(1)
Di代表十进制数0,1,2,…,9;
上式转换为:
(2)
由式
(2)可归纳十进制数转换为二进制数的方法:
从十进制数的最高位Dn开始作乘10加次位的操作,依次类推,则可求出二进制数的结果。
程序流程图如图1-2-2所示。
实验参考程序如下。
实验程序清单(例程文件名:
A2-1.ASM)
SSTACKSEGMENTSTACK
DW64DUP(?
)
SSTACKENDS
DATASEGMENT
SADDDB30H,30H,32H,35H,36H;十进制数:
00256
DATAENDS
CODESEGMENT
ASSUMECS:
CODE,DS:
DATA
START:
MOVAX,DATA
MOVDS,AX
MOVAX,OFFSETSADD
MOVSI,AX
MOVBX,000AH
MOVCX,0004H
MOVAH,00H
MOVAL,[SI]
SUBAL,30H
A1:
IMULBX
MOVDX,[SI+01]
ANDDX,00FFH
ADCAX,DX
SUBAL,30H
INCSI
LOOPA1
A2:
JMPA2
CODEENDS
ENDSTART
图1-2-2转换程序流程图
实验步骤
(1)绘制程序流程图,编写实验程序,经编译、链接无误后装入系统;
(2)待转换数据存放于数据段,根据自己要求输入,默认为30H,30H,32H,35H,36H;
(3)运行程序,然后停止程序;
(4)查看AX寄存器,即为转换结果,应为:
0100;
(5)反复试几组数据,验证程序的正确性。
2.将十进制数的ASCII码转换为BCD码
从键盘输入五位十进制数的ASCII码,存放于3500H起始的内存单元中,将其转换为BCD码后,再按位分别存入350AH起始的内存单元内。
若输入的不是十进制的ASCII码,则对应存放结果的单元内容为“FF”。
由表1-2-1可知,一字节ASCII码取其低四位即变为BCD码。
实验程序清单(例程文件名:
A2-2.ASM)
SSTACKSEGMENTSTACK
DW64DUP(?
)
SSTACKENDS
CODESEGMENT
ASSUMECS:
CODE
START:
MOVCX,0005H;转换位数
MOVDI,3500H;ASCII码首地址
A1:
MOVBL,0FFH;将错误标志存入BL
MOVAL,[DI]
CMPAL,3AH
JNBA2;不低于3AH则转A2
SUBAL,30H
JBA2;低于30H则转A2
MOVBL,AL
A2:
MOVAL,BL;结果或错误标志送入AL
MOV[DI+0AH],AL;结果存入目标地址
INCDI
LOOPA1
A3:
JMPA3
CODEENDS
ENDSTART
实验步骤
(1)自己绘制程序流程图,然后编写程序,编译、链接无误后装入系统;
(2)在3500H~3504H单元中存放五位十进制数的ASCII码,即:
键入E3500后,输入31,32,33,34,35;
(3)运行程序,然后停止程序运行;
(4)键入D350A,显示运行结果,应为:
0000:
350A0102030405CC…
(5)反复测试几组数据,验证程序功能。
1.2.4思考题
1.实验内容1中将一个五位十进制数转换为二进制数(十六位)时,这个十进制数最小可为多少,最大可为多少?
为什么?
2.将一个十六位二进制数转换为ASCII码十进制数时,如何确定Di的值?
3.在十六进制转换为ASCII码时,存转换结果后,为什么要把DX向右移四次?
1.4循环程序设计实验
1.4.1实验目的
1.加深对循环结构的理解;
2.掌握循环结构程序设计的方法以及调试方法。
1.4.2实验设备
PC机一台,TD-PITE实验装置一套。
1.4.3实验内容及步骤
1.计算S=1+2×3+3×4+4×5+…+N(N+1),直到N(N+1)项大于200为止。
编写实验程序,计算上式的结果,参考流程图如图1-5-1所示。
实验程序清单(例程文件名为:
A5-1.ASM)
SSTACKSEGMENTSTACK
DW64DUP(?
)
SSTACKENDS
CODESEGMENT
ASSUMECS:
CODE
START:
MOVDX,0001H
MOVBL,02H
A1:
MOVAL,BL
INCBL
MULBL
ADDDX,AX;结果存于DX中
CMPAX,00C8H;判断N(N+1)与200的大小
JNAA1
A2:
JMPA2
CODEENDS
ENDSTART
图1-4-1程序流程图
实验步骤
(1)编写实验程序,编译、链接无误后装入系统;
(2)运行程序,然后再停止程序运行;
(3)运算结果存储在寄存器DX中,查看结果是否正确;
(4)可以改变N(N+1)的条件来验证程序功能是否正确,但要注意,结果若大于FFFFH将产生数据溢出。
2.求某数据区内负数的个数
设数据区的第一单元存放区内单元数据的个数,从第二单元开始存放数据,在区内最后一个单元存放结果。
为统计数据区内负数的个数,需要逐个判断区内的每一个数据,然后将所有数据中凡是符号位为1的数据的个数累加起来,即得到区内所包含负数的个数。
实验程序流程图如图1-5-2所示。
实验程序清单(例程文件名为:
A5-2.ASM)
SSTACKSEGMENTSTACK
DW64DUP(?
)
SSTACKENDS
CODESEGMENT
ASSUMECS:
CODE
START:
MOVDI,3000H;数据区首地址
MOVCL,[DI];取数据个数
XORCH,CH
MOVBL,CH
INCDI;指向第一个数据
A1:
MOVAL,[DI]
TESTAL,80H;检查数据首位是否为1
JEA2
INCBL;负数个数加1
A2:
INCDI
LOOPA1
MOV[DI],BL;保存结果
A3:
JMPA3
CODEENDS
ENDSTART
图1-4-2程序流程图
实验步骤
(1)按实验流程编写实验程序;
(2)编译、链接无误后装入系统;
(3)键入E3000,输入数据如下:
3000=06(数据个数)
3001=12
3002=88
3003=82
3004=90
3005=22
3006=33
(4)先运行程序,然后停止程序运行;
(5)查看3007内存单元或寄存器BL中的内容,结果应为03;
(6)可以进行反复测试来验证程序的正确性。
1.6显示程序实验
1.6.1实验目的
1.了解INT10H各功能模块的作用及用法;
2.掌握字符方式下PC机显示器显示控制。
1.6.2实验设备
PC机一台,TD-PITE实验装置一套。
1.6.3实验内容
编写实验程序,在显示器上的输出窗口显示A~Z共26个大写英文字母。
显示I/O功能调用使用说明如下:
INT10使用说明
入口:
AH=00H,AL=01H
功能:
清屏
入口:
AH=01H,AL=数据
功能:
写AL中的数据到显示屏上
入口:
AH=06H,DS:
BX=字串首地址,且字符串尾用00H填充
功能:
显示一字串,直到遇到00H为止
实验程序清单(例程文件名为:
A9-1.ASM)
SSTACKSEGMENTSTACK
DW64DUP(?
)
SSTACKENDS
CODESEGMENT
ASSUMECS:
CODE
START:
MOVCX,001AH
MOVBL,41H;‘A’的ASCII码值
MOVAH,01H
A1:
MOVAL,BL
INT10H;功能调用
INCBL
PUSHCX
MOVCX,0FFFFH
A2:
LOOPA2
POPCX
DECCX
JNZA1
A3:
JMPA3
CODEENDS
ENDSTART
1.6.4实验步骤
1.编写实验程序,经编译、链接无误后装入系统;
2.运行实验程序,观察实验结果;
3.修改实验程序,在显示器上显示‘GOODAFTERNOON’,要求使用AH=06功能(显示一字符串功能块)完成。
第2章80X86微机接口技术实验
接口技术是把由处理器、存储器等组成的基本系统与外部设备连接起来,从而实现CPU与外部设备通信的一门技术。
微机的应用是随着外部设备的不断更新和接口技术的不断发展而深入到各行各业,任何微机应用开发工作都离不开接口的设计、选用及连接。
微机应用系统需要设计的硬件是一些接口电路,所要编写的软件是控制这些接口电路按要求工作的驱动程序。
因此,接口技术是微机应用中必不可少的基本技能。
2.38259中断控制实验
2.3.1实验目的
1.掌握8259中断控制器的工作原理;
2.学习8259的应用编程方法;
3.掌握8259级联方式的使用方法。
2.3.2实验设备
PC机一台,TD-PITE实验装置一套。
2.3.3实验内容及步骤
1.中断控制器8259简介
在Intel386EX芯片中集成有中断控制单元(ICU),该单元包含有两个级联中断控制器,一个为主控制器,一个为从控制器。
该中断控制单元就功能而言与工业上标准的82C59A是一致的,操作方法也相同。
从片的INT连接到主片的IR2信号上构成两片8259的级联。
在TD-PITE实验系统中,将主控制器的IR6、IR7以及从控制器的IR1开放出来供实验使用,主片8259的IR4供系统串口使用。
8259的内部连接及外部管脚引出如图2-3-1所示。
图2-3-18259内部连续及外部管脚引出图
表2-3-1列出了中断控制单元的寄存器相关信息。
表2-3-1ICU寄存器列表
初始化命令字1寄存器(ICW1)说明见图2-3-2所示。
图2-3-2初始化命令字1寄存器
初始化命令字2寄存器(ICW2)说明见图2-3-3所示。
图2-3-3初始化命令字2寄存器
初始化命令字3寄存器(ICW3)说明,主片见图2-3-4,从片见图2-3-5。
图2-3-4主片初始化命令字3寄存器
图2-3-5从片初始化命令字3寄存器
初始化命令字4寄存器(ICW4)说明见图2-3-6。
图2-3-6初始化命令字4寄存器
操作命令字1寄存器(OCW1)说明见图2-3-7。
图2-3-7操作命令字1寄存器
操作命令字2寄存器(OCW2)说明如图2-3-8所示。
图2-3-8操作命令字2寄存器
操作命令字3寄存器(OCW3)说明如图2-3-9所示。
图2-3-9操作命令字3寄存器
查询状态字(POLL)说明如图2-3-10所示。
图2-3-10程序状态字寄存器
在对8259进行编程时,首先必须进行初始化。
一般先使用CLI指令将所有的可屏蔽中断禁止,然后写入初始化命令字。
8259有一个状态机控制对寄存器的访问,不正确的初始化顺序会造成异常初始化。
在初始化主片8259时,写入初始化命令字的顺序是:
ICW1、ICW2、ICW3、然后是ICW4,初始化从片8259的顺序与初始化主片8259的顺序是相同的。
系统启动时,主片8259已被初始化,且4号中断源(IR4)提供给与PC联机的串口通信使用,其它中断源被屏蔽。
中断矢量地址与中断号之间的关系如下表所示:
2.8259单中断实验
实验接线图如图2-3-11所示,单次脉冲输出与主片8259的IR7相连,每按动一次单次脉冲,产生一次外部中断,在显示屏上输出一个字符“7”。
图2-3-118259单中断实验接线图
实验程序清单
SSTACKSEGMENTSTACK
DW32DUP(?
)
SSTACKENDS
CODESEGMENT
ASSUMECS:
CODE
START:
PUSHDS
MOVAX,0000H
MOVDS,AX
MOVAX,OFFSETMIR7;取中断入口地址
MOVSI,003CH;中断矢量地址
MOV[SI],AX;填IRQ7的偏移矢量
MOVAX,CS;段地址
MOVSI,003EH
MOV[SI],AX;填IRQ7的段地址矢量
CLI
POPDS
;初始化主片8259
MOVAL,11H
OUT20H,AL;ICW1
MOVAL,08H
OUT21H,AL;ICW2
MOVAL,04H
OUT21H,AL;ICW3
MOVAL,01H
OUT21H,AL;ICW4
MOVAL,6FH;OCW1
OUT21H,AL
STI
AA1:
NOP
JMPAA1
MIR7:
STI
CALLDELAY
MOVAX,0137H
INT10H;显示字符7
MOVAX,0120H
INT10H
MOVAL,20H
OUT20H,AL;中断结束命令
IRET
DELAY:
PUSHCX
MOVCX,0F00H
AA0:
PUSHAX
POPAX
LOOPAA0
POPCX
RET
CODEENDS
ENDSTART
实验步骤
(1)按图2-3-11连接实验线路;
(2)编写实验程序,经编译、链接无误后装入系统;
(3)运行程序,重复按单次脉冲开关KK1+,显示屏会显示字符“7”以说明响应了中断。
2.58254定时/计数器应用实验
2.5.1实验目的
1.掌握8254的工作方式及应用编程;
2.掌握8254典型应用电路的接法。
2.5.2实验设备
PC机一台,TD-PITE实验装置一套,示波器一台。
2.5.3实验内容
1.计数应用实验。
编写程序,应用8254的计数功能,使用单次脉冲模拟计数,使每当按动‘KK1+’5次后,产生一次计数中断,并在屏幕上显示一个字符‘M’。
2.定时应用实验。
编写程序,应用8254的定时功能,产生一个1ms的方波。
2.5.4实验原理
8254是Intel公司生产的可编程间隔定时器。
是8253的改进型,比8253具有更优良的性能。
8254具有以下基本功能:
(1)有3个独立的16位计数器;
(2)每个计数器可按二进制或十进制(BCD)计数;
(3)每个计数器可编程工作于6种不同工作方式;
(4)8254每个计数器允许的最高计数频率为10MHz(8253为2MHz);
(5)8254有读回命令(8253没有),除了可以读出当前计数单元的内容外,还可以读出状态寄存器的内容;
(6)计数脉冲可以是有规律的时钟信号,也可以是随机信号。
计数初值公式为:
n=fCLKi÷fOUTi、其中fCLKi是输入时钟脉冲的频率,fOUTi是输出波形的频率。
图2-5-1是8254的内部结构框图和引脚图,它是由与CPU的接口、内部控制电路和三个计数器组成。
8254的工作方式如下述:
(1)方式0:
计数到0结束输出正跃变信号方式。
(2)方式1:
硬件可重触发单稳方式。
(3)方式2:
频率发生器方式。
(4)方式3:
方波发生器。
(5)方式4:
软件触发选通方式。
(6)方式5:
硬件触发选通方式。
图2-5-18254的内部接口和引脚
8254的控制字有两个:
一个用来设置计数器的工作方式,称为方式控制字;另一个用来设置读回命令,称为读回控制字。
这两个控制字共用一个地址,由标识位来区分。
控制字格式如表2-5-1所示。
表2-5-18254的方式控制字格式
表2-5-28254读出控制字格式
表2-5-38254状态字格式
2.5.5实验步骤
1.计数应用实验
编写程序,将8254的计数器0设置为方式3,计数值为十进制数4,用单次脉冲KK1+作为CLK0时钟,OUT0连接MIR7,每当KK1+按动5次后产生中断请求,在屏幕上显示字符“M”。
实验步骤:
(1)实验接线如图2-5-2所示;
(2)编写实验程序,经编译、链接无误后装入系统;
(3)运行程序,按动KK1+产生单次脉冲,观察实验现象;
(4)改变计数值,验证8254的计数功能。
图2-5-28254计数应用实验接线图
实验程序清单
A8254EQU06C0H
B8254EQU06C2H
C8254EQU06C4H
CON8254EQU06C6H
SSTACKSEGMENTSTACK
DW32DUP(?
)
SSTACKENDS
CODESEGMENT
ASSUMECS:
CODE,SS:
SSTACK
START:
PUSHDS
MOVAX,0000H
MOVDS,AX
MOVAX,OFFSETIRQ7;取中断入口地址
MOVSI,003CH;中断矢量地址
MOV[SI],AX;填IRQ7的偏移矢量
MOVAX,CS;段地址
MOVSI,003EH
MOV[SI],AX;填IRQ7的段地址矢量
CLI
POPDS
;初始化主片8259
MOVAL,11H
OUT20H,AL;ICW1
MOVAL,08H
OUT21H,AL;ICW2
MOVAL,04H
OUT21H,AL;ICW3
MOVAL,01H
OUT21H,AL;ICW4
MOVAL,6FH;OCW1
OUT21H,AL
;8254
MOVDX,CON8254
MOVAL,10H;计数器0,方式0
OUTDX,AL
MOVDX,A8254
MOVAL,04H
OUTDX,AL
STI
AA1:
JMPAA1
IRQ7:
MOVDX,A8254
MOVAL,04H
OUTDX,AL
MOVAX,014DH
INT10H;显示字符M
MOVAX,0120H
INT10H
MOVAL,20H
OUT20H,AL;中断结束命令
IRET
CODEENDS
ENDSTART
2.定时应用实验
编写程序,将8254的计数器0设置为方式3,用信号源1MHz作为CLK0时钟,OUT0为波形输出1ms方波。
实验程序清单
A8254EQU06C0H