微机实验指导.docx
《微机实验指导.docx》由会员分享,可在线阅读,更多相关《微机实验指导.docx(29页珍藏版)》请在冰豆网上搜索。
微机实验指导
实验一拆字、拼字程序
一、实验目的
1.掌握屏蔽一个字节中的高四位或低四位内容的方法,熟悉移位指令的用法。
2.掌握汇编语言设计和调试方法。
二、实验条件与内容
实验条件:
1.PⅡ以上的PC计算机,及操作系统WindowsXP。
2.MasmforWindows集成实验环境V6.0版本。
实验内容:
(1)把4000H单元的内容拆开,高位送4001H低位,低位送4002H低位,4001H、4002H的高位清零,一般本程序用于把数据送显示缓冲区时用。
(2)把4000H、4001H的低位分别送入4002H高低位,一般本程序用于把显示缓冲区的数据取出拼装成一个字节。
三、程序框图
拆字程序框图 拼字程序框图
四、实验过程与步骤
在汇编语言环境下分别将拆字程序和拼字程序进行录入,并对程序进行编译。
在DEBUG下对程序分别进行调试:
(1)在程序运行前,检查4000H~4002H中内容情况。
(2)用连续或单步方式运行程序,之后检查4000H~4002H内容变化情况。
思考题
1.MOV指令在应用时应注意哪些事项?
2.单字和双字在存储器中是怎样存放的?
请举例进行说明。
拆字程序清单:
CODESSEGMENT
ASSUMECS:
CODES,DS:
DATAS,SS:
STACKS
START:
MOVBX,4000H;把地址单元4000H给BX寄存器
MOV[BX],5BH;把所要拆字内容置为5BH
MOVAL,[BX];把4000H单元的内容给AL
MOVAH,AL;再4000H单元的内容给AH
MOVCL,04;设置移位次数为4
SHRAH,CL;AH的内容右移4位
ADDBX,01(或INCBX);地址单元加1
MOV[BX],AH;把高位字送给4001H单元
ANDAL,0FH;屏蔽掉AL中的高四位
ADDBX,01(或INCBX);地址单元加1
MOV[BX],AL;把低位字送给4002H单元
HLT
CODESENDS;程序结束
ENDSTART
此程序运行的结果是:
(用DDS:
4000)
13C9:
40005B050B0000……
拼字程序清单:
CODESSEGMENT
ASSUMECS:
CODES,DS:
DATAS,SS:
STACKS
START:
MOVAX,DATAS
MOVDS,AX
MOVBX,4000H;把地址单元4000H给BX寄存器
MOV[BX],0F6H;把4000H单元所要拼的字置为F6H
MOV[BX+1],28H;把4001H单元所要拼的字置为28H
MOVAH,[BX];把4000H单元的内容给AH
MOVAL,[BX+1];把4001H单元的内容给AL
ANDAL,0FH;屏蔽掉AL中的高四位
MOVCL,4;设置移位次数为4
SHLAL,CL;AL的内容左移4位
ANDAH,0FH;屏蔽掉AH中的高四位
ORAL,AH;进行拼字
INCBX;地址单元加1
MOV[BX],AL;将拼好的字保存在4002H单元
HLT
CODESENDS;程序结束
ENDSTART
此程序运行的结果是:
(用DDS:
4000)
13C9:
4000F628680000……
思考题
1.MOV指令在应用时应注意哪些事项?
答:
①MOV指令的目的操作数不允许用立即数方式;②MOV指令的目的操作数不允许用CS寄存器;③除源操作数为立即数的情况外,两个操作数中必须有一个是寄存器;④不允许MOV指令在两个存储单元之间直接传递数据;⑤不允许在两个段寄存器之间直接传递信息;⑥MOV指令使用操作数为段寄存器、或地址单元不能为非法数;⑦MOV指令不影响标志寄存器FLAG中的标志位。
1.单字和双字在存储器中是怎样存放的?
请举例进行说明。
答:
在16位计算机中,单字是由2个字节构成的。
当一个整数字保存在存储器中时,这两个字节是按相反的顺序存储的。
首先存储的是低有效字节,再把高有效字节存储在下一个地址。
也就是说低位字节存储在低地址,高位字节存储在高地址。
例如:
3456H在存储器地址(0000、0001)中是这样存放的:
地址单元:
000034H(数值)
000156H
双字是32位宽、4个字节,并且是由两个连续存储的相邻的字组成的,这是非常重要的数据格式。
双字的存储与单字存储的方法相似,即低位字存放在较低的存储器地址单元,高位字存放在下一个较高的存储器地址单元。
例如11223344H存放形式:
地址单元:
000044H(数值)
000133H
001022H
001111H
实验二 数据区移动与分支程序
一、实验目的
1.掌握RAM中的数据相关操作的方法与指令。
2.掌握分支结构编程方法及条件转移指令的用法。
二、实验条件与内容
实验条件:
1.PⅡ以上的PC计算机,及操作系统WindowsXP。
2.MasmforWindows集成实验环境V6.0版本。
实验内容:
1、把4100H源RAM区首址内的16字节数据传送到4200H目标RAM区。
2、假设有一组数据为5,-4,0,3,100,-51。
请编程判断:
每个数大于0,等于0,还是小于0,并输出其判断结果。
即:
1当x>0
y=0当x=0
-1当x<0
数据区移动设计思想
程序要求把内存中一数据区(称为源数据块)传送到另一存储区(称为目的数据块)。
源数据块和目的数据块在存储器中可能有三种情况,如下图:
对于两个数据块分离的情况,如图4-1所示。
数据的传送从数据块的首址开始,或者从数据块的末址开始均可。
但对于有部分重叠的情况,则要加以分析,否则重叠部分会因“搬移”而遭破坏。
可以得出以下结论:
当源数据首址>目的块首址时,从数据块首址开始传送数据。
当源数据块首址<目的块首址时,从数据块末地址开始传送数据。
四、程序框图
见该实验程序流程框图。
五、实验过程及步骤
实验1
在汇编语言环境下输入该实验上机程序,并对程序进行编译。
对程序分别进行调试:
(1)在程序未运行前,检查4100H~4110H、4200H~4210H中的内容情况。
(2)用单步或用断点方式运行程序,检查检查4100-410FH中内容是否和4200-420FH中内容完全一致。
实验2
实验前要做好充分准备,包括汇编程序清单、调试步骤、调试方法,以及对程序结果的分析等。
编程提示:
1.首先将原始数据装入起始地址为XX的字节存储单元中。
2.将判断结果以字符串的形式存放在数据区中,以便在显示输出时调用。
3.其中判断部分可采用CMP指令,得到一个分支结构,分别输出“y=0”,“y=1”,“y=-1”。
4.程序中存在一个循环结构,循环6次,调用6次分支结构后结束。
思考题
1.在分支程序设计中,怎样才能形成条件、构成分支?
2.条件转移指令有哪三种类型?
根据三种类型将下面指令进行分类。
数据区移动实验的上机程序清单:
CODESSEGMENT
ASSUMECS:
CODES,DS:
DATAS,SS:
STACKS
START:
MOVAX,DATAS
MOVDS,AX
MOVCX,010H;置搬移数据循环次数
MOVSI,4100H;置源数据块首址
MOVDI,4200H;置目的数据块首址
MOVBX,SI;将源数据块首址给BX
NUM:
MOV[BX],0FFH;将16个数据存放在
INCBX源数据块区
LOOPNUM
MOVCX,010H;置搬移数据循环次数
CMPSI,DI;SI与DI相比较
JAL2;SI>DI跳转到L2处
ADDSI,CX;SI与CX相加
ADDDI,CX;DI与CX相加
L1:
DECSI;置源数据块末地址
DECDI;DI减1,置目的数据块末地址
MOVAL,[SI];把源数据块末地址的数据搬移到目的数据块区域
MOV[DI],AL
LOOPL1;循环16次结束
JMPHEND;跳转到结束
L2:
MOVAL,[SI];把源数据块存储单元的数据传送到目的数据块
MOV[DI],AL
INCSI;源数据块地址增1
INCDI;目的数据块地址增1
LOOPL2;数据搬移16次后结束
HEND:
HLT
CODESENDS;程序结束
ENDSTART
分支程序清单:
DATASSEGMENT
XDB25,-4,0,3,100,-51,17,62;建立数据表
YDB;为存储结果建立缓冲区
DATASENDS
CODESSEGMENT
ASSUMECS:
CODES,DS:
DATAS
START:
MOVAX,DATAS
MOVDS,AX;置数据段存放地址
XORAX,AX;对AX清零
MOVCX,6;设定循环控制数
LEASI,X;置数据表偏移量首址
LEADI,Y;置存储数据偏移量首址
BJ:
MOVAL,[SI];将第一个数给AL
CMPAL,0;AL内容与0进行比较
JGEDY;比较结果>=0则转移到DY处
XY0:
MOVBL,-1;小于0将-1给BL
MOV[DI],BL;将-1存储到地址单元
JMPXH;跳转到XH处
DY:
JEXD;若等于0转移到XD处
MOVBL,1
MOV[DI],BL;将1给BL且存储到地址单元
JMPXH;跳转到XH处
XD:
MOVBL,0;给BL赋值为0
MOV[DI],BL;将0存储到地址单元
XH:
INCSI;数据表偏移地址增1
INCDI;存放结果数据偏移地址增1
LOOPBJ;判断CX是否为0,是则结束,否则进行循环
HLT
CODESENDS;程序结束
ENDSTART
实验三循环程序设计
一、实验目的
1.掌握循环程序设计的方法(两重性循环结构)
2.掌握正确分配与使用寄存器。
二、实验内容与要求
以GRADE为首地址的10个字的数组中保存有学生成绩。
建立一个10个字的RNAK数组,并根据GRADE中的学生成绩将学生名次填入RANK数组中(提示:
一个学生的名次等于成绩高于等于该学生的人数加1)。
寄存器分配情况说明如下:
AX存放当前被测学生的成绩
BX存放当前被测学生的相对地址指针
CX内循环计数值
DX存放当前被测学生的名次计数值
SI内循环测试时的地址指针
DI外循环计数值
三、程序框图
见图6-1所示。
四、实验报告及要求
(一)预习准备部分
1.预习本次实验指导书中一、二、三部分内容。
2.按照实验内容要求写出程序清单。
(二)实验过程部分
1.写出上机调试后正确的程序,说明程序的功能、结构。
2.调试说明,包括上机调试的情况、上机调试步骤、调试所遇到的问题是如何解决的,并对调试过程中的问题进行分析,对执行结果进行分析。
3.写出源程序执行的结果。
思考题
在循环程序设计中,循环初始化时应注意哪些问题?
按要求编程,计算学生排名,并输出排名结果:
DATASSEGMENT
GRADEDB95,84,72,58,76,90,100,
68,80,88
;建立学生成绩表
RANKDB10DUP(?
)
;建立学生成绩名次的缓冲区
KGDB‘’,‘$’
;显示两个空格
DATASENDS
CODESSEGMENT
ASSUMECS:
CODES,DS:
DATAS,SS:
STACKS
START:
MOVAX,DATAS
MOVDS,AX;分配数据段地址
XORAX,AX;对AX清零
MOVDI,0;对DI置0
;置学生成绩表首址
WXH:
MOVAL,[BX]
;将第一个学生成绩给AX
;将学生名次先置为1
;设置循内环计数值
MOVSI,OFFSETGRADE;取比较学生成绩的第一个数
NXH:
CMPAL,[SI];两个学生成绩相比较
JAENEXT;若高于等于则跳转到NEXT处
;否则学生名次增1
NEXT:
INCSI;取下一个相比较的学生成绩
;判断CX是否为0
;将学生名次存入地址单元
INCBX;取下一个学生的成绩
INCDI;外循环控制次数增1
;外循环次数是否到10
JBWXH;不到10进行循环,到10后结束
;设置显示名次缓冲区首址
MOVCX,10;设置显示控制循环次数为10
XS:
;将显示的名次给AL
CMPAL,0AH;名次与0AH(10)比较
JWEDY;高于等于转移到DY
ADDAL,30H;转换成ASIIC码进行输出显示
;显示名次
JMPKGF;跳转到显示空格处
DY:
;大于等于A的进行转换,并显示
MOVDL,AL
MOVAH,02
INT21H
KGF:
LEADX,KG;显示空格字符串
INT21H
LOOPXS
HLT
CODESENDS;程序结束
ENDSTART
实验四244/273基本接口I/O实验
一、实验目的
1.学习微机接口控制系统中扩展简单I/O口的方法。
2.学习数据输入/输出程序的编制方法。
二、实验条件
1.PC计算机及操作系统WindowsXP/Win7。
2.微机实验系统(简称实验箱)以及连接线若干。
三、实验电路
四、实验内容
(一)电路接线
1.将74LS244的8个数据输入端分别接到8个电平开关K0~K7上,8个数据输出端分别接到数据总线D0~D7。
2.将74LS244的片选接线端CS244接到2A0-2A7H地址端。
3.将74LS273的8个D输入端分别接到数据总线D0~D7,8个Q输出端接到LED显示电路L0~L7。
4.将74LS2273的片选接线端CS273接到2A8-2AFH地址端。
(二)实验内容一
编程将74LS244芯片作为输入读取开关状态,并把74LS273作为输出在LED上显示开关状态。
(三)实验内容二
编程从键盘上输入一个字母或数字(不要用小键盘输入),将其ASCII码通过74LS273输出,并在8个LED上显示。
五、实验要求
在实验过程中,记录实验时拨动开关的状态,并观察LED的显示状态。
思考题
1.74LS244、74LS273是什么芯片?
2.
、
信号线分别起什么作用?
实验五8255A并口实验——方波、输入/输出
一、实验目的
1.了解8255器件的原理,掌握其各口实现输入/输出的方法。
2.通过编程实现A、B、C口的方波输出,并编程实现A口输入、B口输出的方法。
二、实验条件
1.PC计算机及操作系统WindowsXP/Win7。
2.微机实验系统(简称实验箱)以及连接线若干。
二、实验内容与过程
1、8255A的输入/输出实验。
要求A口作为输入,B口作为输出。
(1)将开关K1~K8端子分别接到8255A的A口的8个端子,将发光二极管L1~L8分别接到B口的8个端子。
并将选片信号线连接起来。
(2)输入程序并调试运行。
(3)分别拨动钮子开关K1~K8,观察LED的L1~L8的亮与灭。
该实验上机程序清单如下,请把空格处的程序进行完善。
CODESEGMENT
ASSUMECS:
CODE
PAEQU;A口控制字
PBEQU;B口控制字
PCTLEQU;8255控制口的控制字
H20:
;对8255各口初始化
P20:
;把A口作为输入端
;取A口状态
;把B口作为输出端
;把A口的状态由B口进行输出
JMPP20;进行循环
CODEENDS
ENDH20
2、8255A输出方波实验。
完善程序,输入源文件,进行运行,在实验箱七段数码管显示“Γ”状态下,用示波器观察A、B、C口的输出波形。
CODESEGMENT
ASSUMECS:
CODE
PAEQU;8255的A口控制字
PBEQU;8255的B口控制字
PCEQU;8255的C口控制字
PCTLEQU;8255控制口的控制字
START:
;8255初始化
P21:
;打开A口
;输出电平
;打开B口
;输出电平
;打开C口
;输出电平
MOV CX,0800H;赋延时循环数
DELAY:
NOP
LOOPDELAY
;AL值取反
JMPP21;跳转到P11处循环
CODEENDS
ENDH1
用示波器观察A、B、C口的输出的波形,并在下面坐标上画出其波型。
三、实验总结
1、8255A与CPU相连的引脚除数据线D7~D0外,还有控制线引脚
是什么信号?
有什么作用?
另外A1、A0信号起什么作用?
2、8255A方式控制字是由数据信号D7~D0来决定,其中哪些位用来选择A组的工作方式及端口A和端口C高4位的输入/输出性质?
哪些位位用来选择B组的工作方式及端口B和端口C低4位的输入/输出性质?
3、8255A方式0的主要特征是什么?
实验六8255并口实验——控制交通灯
一、实验目的
掌握8255并口传输数据的方法,以控制发光二极管的亮与灭,模拟实现十字路口交通灯的控制。
二、实验内容
用8255并口的PA、PB作为输出口,控制12个发光二极管(相当于东、西、南、北路口各3个红黄绿灯)的亮与灭,模拟交通灯的管理。
三、程序框图
开始
读取8255控制字88H,使各端口
均为输出口,且均工作于方式0
使4个路口的红灯全亮
延时一段时间
点亮1、3路口绿灯
延时
熄灭1、3路口绿灯
1、3路口黄灯亮且闪烁8次
四个红灯亮
点亮2、4路口绿灯
延时
熄灭2、4路口绿灯
2、4路口黄灯亮且闪烁8次
4个红灯全亮
编程提示:
(1)将8255的PA0、PA3、PA6、PB1对应发光二极管的红灯,PA1、PA4、PA7、PB2对应发光二极管的黄灯,PA2、PA7、PB0、PB3对应发光二极管的绿灯。
(2)设十字路口1、3为南北方向,2、4为东西方向,初始状态为4个路口的红灯全亮。
之后,1、3路口绿灯亮,2、4路口红灯亮,即南北通车,东西禁行。
延时一段后,1、3路口绿灯熄灭,而1、3路口黄灯开始闪烁,闪烁8次后,1、3路口红灯亮,而同时2、4路口绿灯亮,即东西通车。
延时一段时间后,2、4路口绿灯熄灭,而黄灯开始闪烁,闪烁8次后,再切换到1、3路口方向通车,重复上述过程。
(3)设定8255的三个端口工作方式均为0,并处于输出状态。
(4)各发光二极管共阳极,使其点亮应使8255各相应的端口位清0。
四、实验电路
五、实验步骤
1.按实验电路连线,即8255各端口接线如下:
PA0——L12PA1——L11PA2——L10PA3——L9PA4——L8
PA5——L7PA6——L6PA7——L5PB0——L4PB1——L3
PB2——L2PB3——L1
把8255的选片信号线连接起来。
2.输入程序并运行。
六、实验报告及要求
(一)预习准备部分
1.预习本次实验指导书的一~五部分内容。
2.按照实验内容要求编写程序。
(二)实验过程部分
1.对上机调试后的正确程序,说明语句功能、程序结构。
2.调试说明,包括上机调试的情况、上机调试步骤、调试所遇到的问题是如何解决的,并对调试过程中的问题进行分析,对执行结果进行分析。
3.说明8255并口模拟控制交通灯的工作过程。
思考题
1.系统分配给8255A的I/O地址是什么?
其三种工作方式是什么?
2.8255A在方式0下的端口A、B、C的工作状态是什么?
实验七D/A转换输出波形实验
一、实验目的
1.了解DAC0832器件的原理,掌握其各口实现输入/输出的方法。
2.通过编程实现A、B、C口的方波输出,并编程实现A口输入、B口输出的方法。
二、实验条件
1.PC计算机及操作系统WindowsXP/Win7。
2.微机实验系统(简称实验箱)以及连接线若干。
3.示波器。
三、实验内容与过程
1、实验内容1编制程序,利用DAC0832芯片输出方波。
(1)将选片信号线按要求连接起来。
(2)输入程序并运行。
CODESEGMENT
ASSUMECS:
CODE
DAPORTEQU;DAC0832控制字
H41:
P41:
YS:
NOP
LOOPYS
JMPP41
CODEENDS
ENDH41
实验结果,在示波器上输出的波形:
2、实验内容2编制程序,利用DAC0832芯片输出锯齿波。
CODESEGMENT
ASSUMECS:
CODE
DAPORTEQU;DAC0832控制字
H42:
P42:
JMPP42
CODEENDS
ENDH42
若生成负锯齿波信号,只要把语句改成即可。
实验结果,在示波器上输出的波形:
3、实验内容3编制程序,利用DAC0832芯片输出三角波。
CODESEGMENT
ASSUMECS:
CODE
DAPORTEQU;DAC0832控制字
H43:
MOVDX,DAPORT
P43:
OUTDX,AL
JEQ43
JMPP7
Q43:
OUTDX,AL
JEP43
JMPQ43
CODEENDS
ENDH43
实验结果,在示波器上输出的波形:
4、实验内容4编制程序,利用DAC0832芯片输出梯形波。
CODESEGMENT
ASSUMECS:
CODE
DAPORTEQU;DAC0832控制字
H44:
MOVDX,DAPORT
P44:
OUTDX,AL
LOOPP44
MOVCX