微机原理及接口技术实验指导书文档格式.docx
《微机原理及接口技术实验指导书文档格式.docx》由会员分享,可在线阅读,更多相关《微机原理及接口技术实验指导书文档格式.docx(57页珍藏版)》请在冰点文库上搜索。
START:
MOVAH,02H
MOVDL,41H
INT21H
INT20H
CODEENDS
ENDSTART
(2)屏幕上显示字符串“HOWAREYOU?
”
DATASEGMENT
BUFDB'
HOWAREYOU?
$'
DATAENDS
ASSUMECS:
CODE,DS:
DATA
MOVAX,DATA
MOVDS,AX
MOVDX,OFFSETBUF
MOVAH,09H
MOVAH,4CH
CODEENDS
实验二分支程序设计实验
一、实验目的
1.掌握分支程序的结构。
2.掌握分支程序的设计、调整方法。
二、实验设备
TDN86/88教学实验系统一台。
三、实验内容及步骤
设计一数据块间的搬移程序
设计思想:
程序要求把内存中一数据区(称为源数据块)传送到另一存储区(成
为目的数据块)。
源数据块和目的数据块在存储中可能有三种情况,如图3-1所示。
图3-1源数据块与目的数据块在存储中的位置情况
对于两个数据块分离的情况,如图3-1(a),数据的传送从数据块的首地址开始,或从数据块的末地址开始均可。
但是对于有重叠的情况,则要加以分析,否则重叠部分会因“搬移”而遭到破坏,可有如下结论:
当源数据块首地址<目的块首地址时,从数据块末地址开始传送数据,如图3-1(b)所示。
当源数据块首地址>目的块首地址时,从数据块首地址开始传送数据,如图3-1(c)所示。
参考流程:
如图3-2所示。
图3-2程序流程图
实验程序
DW64DUP(?
MOVCX,0010H
MOVSI,3100H
MOVDI,3200H
CMPSI,DI
JAA2
ADDSI,CX
ADDDI,CX
DECSI
DECDI
A1:
MOVAL,[SI]
MOV[DI],AL
DECCX
JNEA1
JMPA3
A2:
INCSI
INCDI
JNEA2
A3:
ENDSTART
实验步骤
(1)输入程序并检查无误,经汇编、连接后装入系统。
(2)用E命令在以SI为起址的单元中填入16个数。
(3)G=↙,运行实验程序。
(4)用D命令查看DI为起址的单元中的数据是否与SI单元中数据相同。
(5)试改变SI、DI的取值,观察在三种不同的数据块情况下程序的运行。
四.思考题
为什么当源数据块首址>
目的块首址时,应从数据块首地址开始传送数据。
而当
数据块首址<
目的块首址时,应从数据块末地址开始传送数据?
实验三循环程序设计
一.实验目的
1.加深对循环结构的理解。
2.掌握循环结构程序设计的方法。
3.熟练掌握调试循环程序的方法。
二.实验设备
三.实验内容及步骤
1.编制程序
计算S=1+2×
3+3×
4+4×
5+…+N(N+1),直到N(N+1)项大于200为止。
编写实验程序,计算上式的结果,参考流程图如图3-3所示。
图3-3程序流程图
MOVDX,0001H
MOVBL,02H
MOVAL,BL
INCBL
MULBL
ADDDX,AX;
结果存于DX中
CMPAX,00C8H;
判断N(N+1)与200的大小
JNAA1
JMPA2
(1)编写实验程序,编译、链接无误后装入系统;
(2)运行程序,然后再停止程序运行;
(3)运算结果存储在寄存器DX中,查看结果是否正确;
(4)可以改变N(N+1)的条件来验证程序功能是否正确,但要注意,结果若大于FFFFH将产生数据溢出。
2.求某数据区内负数的个数
设数据区的第一单元存放区内单元数据的个数,从第二单元开始存放数据,在区内最后一个单元存放结果。
为统计数据区内负数的个数,需要逐个判断区内的每一个数据,然后将所有数据中凡是符号位为1的数据的个数累加起来,即得到区内所包含负数的个数。
实验程序流程图如图3-4所示。
图3-4程序流程图
MOVDI,3000H;
数据区首地址
MOVCL,[DI];
取数据个数
XORCH,CH
MOVBL,CH
INCDI;
指向第一个数据
MOVAL,[DI]
TESTAL,80H;
检查数据首位是否为1
JEA2
INCBL;
负数个数加1
LOOPA1
MOV[DI],BL;
保存结果
ENDSTART
(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.进一步掌握多重循环循环程序的结构。
2.进一步掌握多重循环程序的设计、编写及调试方法。
二、实验准备
1.复习教材中有关多重循环程序设计的相关内容。
2.复习排序和检索算法
3.编写程序1:
将内存中的10个无符号数(长度为2字节)由大到小排序。
DATASEGMENT
XDW24H,32H,01H,02H,44H,32H,05H,00H,12H,11H
MOVCX,10
DECCX
LOOP1:
MOVDI,CX
MOVBX,0
LOOP2:
MOVAX,X[BX]
CMPAX,X[BX+2]
JGELOOP3
XCHGAX,X[BX+2]
MOVX[BX],AX
LOOP3:
ADDBX,2
LOOPLOOP2
MOVCX,DI
LOOPLOOP1
INT21H
CODEENDS
4.编写程序2:
在上述已排好序的数据区里查找某一个数。
若找到,显示‘Y’,否则显示‘N’。
XDW44H,32H,32H,24H,12H,11H,05H,02H,01H,00H
STRING1DB'
Y'
0DH,0AH,'
STRING2DB'
N'
0DH,0AH,'
XORAX,AX
MOVAX,00H
CMPAX,X[BX]
JZLOOP2
INCBX
LOOPLOOP1
JMPLOOP3
MOVDX,OFFSETSTRING1
MOVAH,09H;
输出相应的字母
JMPEXIT
MOVDX,OFFSETSTRING2
EXIT:
三、实验内容
1.将编写好的程序1输入、汇编、连接并通过Debug调试和检查运行结果。
无序数组X:
24H,32H,01H,02H,44H,32H,05H,00H,12H,11H
排序后的数组从DS:
0000-0010从大到小排列:
2.将编写好的程序2输入、汇编、连接并通过Debug调试和检查运行结果。
测试的数据00H保存在AX寄存器中:
四、实验报告要求
1.整理出运行正确的源程序清单(加以注释),并画出程序流程图。
2.如何修改程序1对数据由小到大排序。
只要把程序中JGELOOP3,JGE(>
=)条件改成JBS(<
=)
3.说明多重循环程序设计中应该注意的问题。
应该注意循环的条件和循环的次数,注意别出现死循环
4.上机调试过程中遇到的问题是如何解决的。
此次实验较为简单,因为排序算法书上有,只出现一个小问题,就是输入的时候,调用OIH中断,只能输入一个字符存在AX中。
而不能把输入的数字存在AX中。
只会存储相应ACLL码
排序程序设计实验
(1)写出汇编、连接、及运行程序查看结果的步骤如下:
1、程序源代码:
datasegment
var1db09h,08h,07h,06h,05h,04h,03h,02h,01h,00h
var2db?
dataends
codesegment
assumecs:
code,ds:
data
start:
movax,data
movds,ax
movcx,000ah;
指定数据个数及循环次数
leasi,var2;
取数据区VAR2的偏移地址
l1:
deccx
jzaa
pushsi
pushcx
cc:
decsi
moval,[si]
decsi
cmpal,[si];
取相邻的两个数进行比较
jabb
xchgal,[si]
mov[si+01],al
bb:
incsi
loopcc
popcx
popsi
jmpl1
aa:
movah,4ch
int21h
codeends
endstart
2、汇编
3、连接
4、运行程序
第一次数据区的数值一次为:
09h,08h,07h,06h,05h,04h,03h,02h,01h,00h
运行
结果
第二次数据区的数值一次为:
02h,03h,05h,01h,04h,06h,0Ah,0Bh,09h,08h
(2)本次实验程序的流程图
Y
N
(3)1、内循环部分:
cc:
外循环部分:
2、程序中对SI,CX压栈及弹栈的意义:
对SI、CX进行保护。
(4)实验小结
通过此次实验使我进一步了解了汇编语言编程过程。
对于汇编的常用指令有更深的理解了。
实验五8255并行接口应用实验
一.实验目的
1.掌握8255工作方式的编程设计。
2.8255与外部设备进行连接的应用。
二.实验设备与材料:
TDN86/88教学实验系统一台,扁平插线若干。
三.实验原理:
INTEL8255是一种通用的可编程并行I/O接口芯片,是专为INTEL公司的微处理器设计的,也可用于其它系列的微型机系统中。
利用8086汇编指令系统,编制初始化程序,可以变更8255的工作方式,通用性强,使用灵活。
8255具有3个带锁存或缓冲的数据端口,它的并行数据宽度为8位。
可与外设并行进行数据交换。
A口和B口内具有中断控制逻辑,在外设与CPU之间可用中断方式进行信息交换。
8255能与许多外部设备连接,例如:
键盘、显示器、打印机等。
(a)工作方式控制字(b)C口按位置位/复位控制字
四.实验内容及步骤
1.8255的一般输入输、出方式
本系统中的8255芯片8255的数据线、地址线、读写控制线等分别与系统总线相连,其A、B、C三个端口以排针形式引出,供8255实验使用,其线路如图1所示。
图18255接口实验中端口地址如表1所示
表1
信号线
寄存器
编址
IOY3
A口
60H
B口
61H
C口
62H
控制寄存器
63H
接口实验单元中的开关和发光二极管电路
按图所示实验线路,8255端口A工作在方式0并作为输出口,端口B工作在方式0并作为输入口。
用一组开关信号接入端口B,端口A输出线接至一组发光二极管上,通过对8255编程来实现输入输出功能。
图28255输入输出方式实验接线图
注:
圆圈处是要求接的连线。
(1)按图2接线。
用扁平线(8头)分别插在8255的A口和发光二极管的插针上。
用扁平线分别插在8255的B口和拨动开关的插针上。
(2)输入源程序,汇编、连接后装入系统。
●
参考程序1
MOVAL,82H;
设8255方式字10000010A位输出,B口位输入。
OUT63H,AL
INAL,61H
OUT60H,AL
JMPA1
(3)执行程序后,拨动开关组K0-K7,观察发光二极管LED0-LED7变化,它应是与开关组K0-K7的值是一一对应的变化。
2.8255的选通输入、输出方式
按图3所示实验线路,8255端口A工作在方式0并作为输出口,端口B工作在方式1并作为输入口。
从端口C的PC2成为选通信号输入,端STBb,PC0成为中断请求信号输出端INTRb。
当B口数据就绪后,通过发口STBb信号来请求CPU读取端口B数据并送A口输出显示。
图38255选通方式实验接线图
(KK1-初态为“1”)
(1)
按图3接线。
8255的PC0插针接8259的IRQ7插针上,8255的PC1插针接KK1-插针上。
(2)
输入源程序,汇编、连接后装入系统。
参考程序2
CLI
MOVAL,0A6H
MOVAL,05H
PUSHDS
MOVAX,0000H
MOVAX,OFFSETIRQ7
ADDAX,2000H
MOVSI,003CH
MOV[SI],AX
MOVSI,003EH
POPDS
INAL,21H;
读IMR
ANDAL,7FH;
开IRQ7中断
OUT21H,AL
STI
HLT;
等待中断请求信号
JMPA1
IRQ7:
INAL,61H;
读开关信息
OUT60H,AL;
输出开关信息
MOVAL,20H
OUT20H,AL
IRET
ENDSTART
(3)
执行程序后,拨动开关组K0-K7(即设定一输入值),按一下拨动开关KK1,观察发光二极管LED0-LED7变化,它应是与开关组K0-K7D的设定值一一对应。
3.运用8255设计的键盘及显示接口
图中用并行接口8255A作为微机与键盘间的接口,采用逐行扫描法识别键。
将键盘中的列与PA0-PA3相连,A口为输出;
将行与C口的PC0-PC1相连,C口为输入口;
PB0-PB7与七段代码显示器连接B口为输出。
程序执行过程如下:
识别是否有键按下,方法是使PA0-PA3输出全0,读C口(行值)中只要有一位为0,就说明有键按下,在检测到有键按下后,延迟一段时间,根据找到的键号,转去执行显示七段代码显示器的程序,这时七段代码显示器就显示与该键相同的数值。
实验步骤
图48255接口的应用键盘及显示接线图
(1)按图4接线。
(3)执行程序后,按一下键盘,7段代码就会显示相应的数字。
参考程序3
STACKSEGMENTSTACK
)
DATASEGMENT
TABLEDB3FH,06H,5BH,4FH,66H,6DH,7DH,07H
DATAENDS
CODESEGMENT
MOVSI,3000H
MOVAL,00H
MOV[SI],AL;
清空存放数据的缓冲区
MOV[SI+1],AL
MOV[SI+2],AL
MOV[SI+3],AL
MOVDI,3003H
MOVAL,81H;
8255方式字定义选择0方式,A口为输出;
;
B口为输出;
C口为输入
OUT63H,AL
BEGIN:
CALLDIS;
显示七段代码管数据的子程序
CALLCLEAR;
七段代码管清0子程序
CALLCCSCAN;
检测是否有键按下子程序
JNZINK1;
JMPBEGIN
INK1:
CALLDIS
CALLDALLY;
子程序为延时,消抖动
CALLDALLY
CALLCLEAR
CALLCCSCAN
JNZINK2
JMPBEGIN
INK2:
MOVCH,0FEH
MOVCL,00H
COLUM:
MOVAL,CH
OUT60H,AL
INAL,62H
TESTAL,01H
JNZLONE
MOVAL,00H
JMPKCODE
LONE:
TESTAL,02H
JNZNEXT
MOVAL,04H
KCODE:
ADDAL,CL
CALLPUTBUF
PUSHAX
KON:
JNZKON
POPAX
NEXT:
INCCL
TESTAL,08H
JZKERR
ROLAL,1
MOVCH,AL
JMPCOLUM
KERR:
CCSCAN:
NOTAL
ANDAL,03H
RET
CLEAR:
OUT61H,AL
DIS:
MOVSI,3000H
MOVDL,0F7H
MOVAL,DL
AGAIN:
MOVAL,[SI]
MOVBX,OFFSETTABLE;
取七段代码首址
ANDAX,00FFH
ADDBX,AX
MOVAL,[BX]
OUT61H,AL
CA