微机原理与接口专业技术实验书Word文档下载推荐.docx
《微机原理与接口专业技术实验书Word文档下载推荐.docx》由会员分享,可在线阅读,更多相关《微机原理与接口专业技术实验书Word文档下载推荐.docx(63页珍藏版)》请在冰豆网上搜索。
双色灯输入由8255来驱动,主要用来做模拟交通灯实验。
1.3单色LED灯模块:
单色LED灯输入DL1-DL8可由8255来驱动,用来完成单色灯实验。
1.4电位器:
该模块主要为A/D转换提供模拟输入电压。
1.5分频器模块
1.6单脉冲电路
1.7步进电机驱动电路
该电路通过2003驱动步进电机。
步进电机脉冲信号可以由8255提供。
1.8A/D转换器模块
0809各通道的口地址是CS+0H,CS+1H,CS+2H,CS+3H,CS+4H,CS+5H,CS+6H,CS+7H。
用于A/D转换实验。
1.9D/A转换器模块:
该电路可以用于做D/A转换实验和驱动直流电机实验。
0832口地址为CS32。
1.108251可编程串行通讯模块:
可用来做8086与PC机通讯的实验。
1.11可编程定时/计数器模块
本电路模块可用于产生定时中断,实现实时时钟实验等,具体接法请参照实验。
本电路口地址为CS53。
1.128259中断控制器实验模块
本模块为8259中断实验模块,在串行监控方式下做8259中断实验。
1.13开关量输入实验模块
第三章软件实验部分
实验一两个多位十进制数相减实验
一、实验要求:
将两个多位十进制数相减,要求被减数,减数均以ASCII码形式按顺序存放在以DATAI和DATA2为首的5个内存单元中(低位在前),结果送回DATAI处。
二、实验目的:
1.学习数据传送和算术运算指令的用法。
2.熟悉在PC机上建立、汇编、链接、调试和运行汇编语言程序的过程。
三、实验程序框图:
四、实验程序:
文件路径为C:
\HK88TE\cai\asm\Ruanjian\Rjexp1.asm
DATASEGMENT
DATA1DB33H,39H,31H,37H,38H;
第一个数据(作为被减数)
DATA2DB36H,35H,30H,38H,32H;
第二个数据(作为减数)
MES1DB'
-'
'
$'
MES2DB'
='
DATAENDS
STACKSEGMENT;
堆栈段
STADB20DUP(?
)
TOPEQULENGTHSTA
STACKENDS
CODESEGMENT
ASSUMECS:
CODE,DS:
DATA,SS:
STACK,ES:
DATA
START:
MOVAX,DATA
MOVDS,AX
MOVES,AX
MOVAX,STACK
MOVSS,AX
MOVAX,TOP
MOVSP,AX
MOVSI,OFFSETDATA1
MOVBX,05
CALLDISPL;
显示被减数
MOVAH,09H
LEADX,MES1
INT21H
MOVSI,OFFSETDATA2
MOVBX,05;
显示减数
CALLDISPL
LEADX,MES2
MOVDI,OFFSETDATA2
CALLSUBA;
减法运算
显示结果
MOVDL,0DH
MOVAH,02H
MOVDL,0AH
MOVAX,4C00H
DISPLPROCNEAR;
显示子功能
DSI:
MOVAH,02
MOVDL,[SI+BX-1];
显示字符串中一字符
DECBX;
修改偏移量
JNZDSI
RET
DISPLENDP
SUBAPROCNEAR
MOVDX,SI
MOVBP,DI
SU1:
SUBBYTEPTR[SI+BX-1],30H
SUBBYTEPTR[DI+BX-1],30H
将ASCII码表示的数字串
JNZSU1;
转化为十六进制的数字串
MOVSI,DX
MOVDI,BP
MOVCX,05;
包括进位,共5位
CLC;
清进单位
SU2:
MOVAL,[SI]
MOVBL,[DI]
SBBAL,BL;
带进位相减
AAS;
非组合BCD码的减法调整
MOV[SI],AL;
结果送被减数区
INCSI
INCDI;
指向下一位
LOOPSU2;
循环
SU3:
ADDBYTEPTR[SI+BX-1],30H
ADDBYTEPTR[DI+BX-1],30H
十六进制的数字串转化ASCII码表示的数字串
JNZSU3
RET
SUBAENDP
CODEENDS
ENDSTART
实验二两个数相乘的实验
实现十进制数的乘法,被乘数和乘数均以ASCII码形式存放在内存中,算式结果在屏幕上显示出来。
掌握乘法指令和循环指令的用法。
DATA1DB32H,39H,30H,35H,34H
DATA2DB34H
*'
RESULTDB6DUP(00H)
STACKSEGMENT
STADB20DUP(?
MOVSS,AX
MOVSP,TOP
LEASI,DATA1
MOVBX,05H
L1:
MOVDL,[SI+BX-1]
INT21H
DECBX
JNZL1
LEASI,DATA2
MOVDL,[SI]
MOVSI,OFFSETDATA2;
显示算式
MOVBL,[SI];
乘数DATA2→BL
ANDBL,00001111B;
屏蔽高4位,ASCII码转化为十六进制数
MOVDI,OFFSETRESULT
MOVCX,05
LOOP1:
ANDAL,00001111B;
取被乘数DATA1,ASCII变十六进制数
INCSI;
指向被乘数1的下一字符单元
MULBL;
相乘
AAM;
AAM调整
ADDAL,[DI];
结果低位与前次计算的进位相加
AAA;
AAA调整
MOV[DI],AL
结果送存到下一单元
MOV[DI],AH
LOOPLOOP1;
计算结果高位进位送存
MOVCX,06
MOVSI,DI
DISPL:
ADDDL,30H
DECSI
LOOPDISPL;
MOVAX,4C00H
INT21H;
结束
CODEENDS
实验三BCD码相乘实验
实现BCD码的乘法,要求被乘数和乘数以组合的BCD码形式存放,各占一个内存单元,乘积存入在另外两个内存单元中,由于没有组合的BCD码乘法指令,程序中采用将乘数1作为计算器,累加另一个乘数的方法得到计算结果。
掌握用组合的BCD码表示数据,并熟悉怎样实现组合BCD码乘法运算。
(附后)
FIRSTDB99H
SECONDDB25H
THIRDDB2DUP(?
STACKSEGMENTPARASTACK'
STACK'
STAPNDB100DUP(?
TOPEQULENGTHSTAPN
STACK
MOVBL,FIRST;
被乘数送BL
MOVCL,SECOND;
乘数送CL
MOVDX,0;
部分积清0
MOVAL,BL
AGAIN:
ORAL,AL
JZDONE;
被乘数减到0则转结果显示
MOVAL,DL
ADDAL,CL
DAA;
乘数于部分积低位相加后调整
MOVDL,AL
MOVAL,DH
ADCAL,0
往部分积高位送进位后调整
MOVDH,AL
DECAL
DAS;
组合BCD码减法调整
MOVBL,AL
JMPAGAIN
DONE:
LEABX,THIRD
MOV[BX],DX
LEASI,FIRST
CALLDIS
XORAX,AX
LEADX,MES1;
*
LEASI,SECOND
LEADX,MES2;
=
LEASI,THIRD
MOVAX,4C00H;
返回DOS
DISPROCNEAR;
显示子程序
MOVCL,04H
SHRAL,CL
ADDAL,30H
ANDAL,0FH
DISENDP
ENDSTART
实验四字符匹配程序
用串操作指令设计程序,实现在指定存储区6000:
0-6000:
100(长度为100H)中寻找匹配字符,遇空格字符(20H)结束,退出时给出是否找到的信息。
掌握8086的串操作指令的使用方法。
三、实验说明:
1、8086中用于字符串检索的指令为SCAXB/SCASW,用AL中的字节或者AX中的字与位于ES段由DI寄存器所批的内存单元的字节或字相比较。
通过前缀的控制,可以实现在DI所指的字母串中,寻找第一个与AL(或AX)的内容相同(或不同)的字节(或字)。
2、对于所有的串操作指令,都要注意方向标志的设置,指令CLD使方向标志DF清0,SI和DI自动增量修改,指令STD使DF置I,SI和DI作自动减量修改。
四、实验程序框图:
五、实验程序:
MESS1DB'
按下回车后在6000:
0-100范围内寻找空格符!
'
0DH,0AH,'
MESS3DB'
找到空格符!
MESS4DB'
寻找范围内没有空格符!
STADW32DUP(?
TOPDW?
DATA,ES:
MOVDS,AX;
初始化
MOVDX,OFFSETMESS1
显示信息1
MOVAH,08H
MOVAX,6000H
MOVDI,0;
偏移量送DI
CLD;
清方向标志
MOVCX,0100H;
长度为100H字节
MOVAL,20H;
空格符20H
REPNZSCASB
JNZAA;
全都不为20H则转AA
MOVDX,OFFSETMESS3
显示"
找到"
信息
JMPBBB
AA:
MOVDX,OFFSETMESS4
没找到"
BBB:
实验五字符串匹配程序
编写程序,实现两个字符串比较。
如相同,则显示“MATCH”,否则,显示“NOMATCH”。
掌握提示信息的使用方法及键盘输入信息的用法。
CRLFMACRO;
显示回车
INT21H
ENDM
MESS1DB'
MATCH'
MESS2DB'
NOMATCH'
MESS3DB'
INPUTSTRING1!
INPUTSTRING2!
MAXLEN1DB81
STRING1DB81DUP(?
MAXLEN2DB81
STRING2DB81DUP(?
显示输入提示信息1
MOVAL,MAXLEN1
MOVBX,OFFSETSTRING1
MOV[BX],AL;
最大字符缓冲
MOVAH,0AH
MOVDX,OFFSETSTRING1
接收键入的字符串1
CRLF
显示输入提示信息2
MOVAL,MAXLEN2
MOVBX,OFFSETSTRING2
最大字符缓冲设置
MOVDX,OFFSETSTRING2
接收键入的字符串2
CLD
LEASI,STRING1;
字符串1的地址送给SI
MOVCL,[SI+1];
字符串1的字符数送给CX
MOVCH,0
KKK:
LEADI,STRING2;
字符串2的地址送给DI
MOVDL,[DI+1];
字符串2的字符数送给DX
MOVDH,0
ZJ2:
MOVAL,[SI+2];
字符串1的第一个字符在字符串2中匹配
CMP[DI+2],AL
JEZJ3;
匹配成功则跳转
ZJ1:
指向字符串2下一个字符
DECDX
JZGGG;
字符串2完,不匹配
JMPZJ2;
字符串2没完,重新匹配
ZJ3:
DECCX
JZMMM;
字符串1完,匹配
指向串1下一个字符
指向串2下一个字符
MOVAL,[SI+2]
匹配,跳转
重新从串1的第一个字符匹配
MOVCL,[SI+1]
INCDI
JMPZJ2
MMM:
MOVAH,09H;
输出匹配信息
JMPPPP
GGG:
输出不匹配信息
MOVDX,OFFSETMESS2
PPP:
程序终止
CODEENDS
实验六从键盘输入数据并显示
编写程序,将键盘接收到的四位十六进制数转换为等值的二进制数,再显示在屏幕上。
若输入的不是0-F间的数字,则显示出错信息,并要求重新输入。
掌握接收键盘数据的方法,并了解将键盘数据显示时须转换为ASCII码的原理,并在程序中设置错误出口。
CRLFMACRO
MARKDB?
MESSDB'
输入四位十六进制数,按回车键转化为二进制数,空格键结束!
输入:
ERRORDB0DH,0AH,'
输入错误!
HEAD:
MOVMARK,0
LEADX,MESS
显示提示输入的信息
CALLGETNUM;
接收键入数值送DX
CMPMARK,01H
JEHEAD
MOVCX,0010H;
16位
MOVBX,DX
TTT:
ROLBX,1;
循环左移1位
MOVDL,BL
ANDDL,01H;
屏蔽掉高7位
显示二进制位对应的ASCII字符
LOOPTTT
JMPHEAD
FINI:
M