微机原理实验报告Word格式文档下载.docx
《微机原理实验报告Word格式文档下载.docx》由会员分享,可在线阅读,更多相关《微机原理实验报告Word格式文档下载.docx(41页珍藏版)》请在冰豆网上搜索。
START:
MOVAX,DATA;
把数据的基地址赋给DS
MOVDS,AX
MOVDX,OFFSETSHOW;
调用DOS显示字符串
MOVAH,09H
INT21H
MOVSI,OFFSETSZ;
数组的偏移地址赋给SI
MOVCX,10;
存进数组的长度给CX
MOVDH,80H;
将数组的第一个数写进DH
NEXT:
MOVBL,[SI];
将数组的第一个数写进BL
CMPDH,BL;
比较DH和BL中数的到校
JAENEXT1;
如果DH中的数大于BL中,将跳转到NEXT1
MOVDH,BL;
如果DH中的数小于BL中,将BL中的数赋给DH
NEXT1:
INCSI;
偏移地址加1
LOOPNEXT;
循环,CX自减一直到0,DH中存数组的最大值
;
接下来的程序是将将最大值DH在屏幕上显示输出
MOVBX,02H
NEXT2:
MOVCL,4
ROLDH,CL;
将DH循环右移四位
MOVAL,DH
ANDAL,0FH;
将AL高位清零,一位一位进行ASCII码转换
CMPAL,09H;
与09H比较大小
JBENEXT3;
若小于,跳转至NEXT3,证明数值在0-9之间
ADDAL,07H;
若大于,则证明为字母,因为字母与数字的ASCII码相差7,所以要加上7
NEXT3:
ADDAL,30H;
因为转换为ASCII码要加30H
MOVDL,AL
MOVAH,2;
DOS中断显示
DECBX
JNZNEXT2
MOVDL,'
H'
MOVAH,2
CODEENDS
ENDSTART
实验结果:
1.2、实验代码
SZDB80H,03H,5AH,0FFH,97H,64H,0BBH,7FH,0FH,0D8H;
JGENEXT1;
此为无符号数与有符号数的唯一差别,JGE是无符号数的跳转
LOOPNEXT;
循环,CX减1,一直到CX减为0,DH中存数组的最大值
接下来的程序是将最大值DH在屏幕上显示输出
ADDAL,07H;
实验结果
2、实验代码
BNUMDW0500H
DNUMDB4DUP()
MESDB'
THEBCDOF'
500H'
IS:
ASSUMECS:
DATA
MOVAX,DATA
MOVDS,AX
MOVDX,OFFSETMES;
将字符串偏移量写入DX
MOVAH,09H
INT21H
MOVAX,BNUM;
将0500H存入AX中
LEABX,DNUM;
取DNUM的偏移量
MOVDL,0
;
计算1000的个数
COUNT1:
SUBAX,03E8H;
AX-1000
JCNEXT1;
不够减,即若CF=1,有借位,转NEXT1
INCDL;
DL+1
JMPCOUNT1;
跳转AGAIN1
ADDAX,03E8H;
AX+1000
MOV[BX],DL;
将DL(即千位数)存入DNUM中
INCBX;
BX+1
MOVDL,0;
DL清零
计算100个数
COUNT2:
SUBAX,0064H;
AX-100
JCNEXT2
INCDL
JMPCOUNT2
ADDAX,0064H
将DL(即百位数)存入DNUM中
INCBX
计算10个数
COUNT3:
SUBAX,000AH;
AX-10
JCNEXT3
JMPCOUNT3
ADDAX,000AH
将DL(十位数)存入DNUM中
INCBX
MOV[BX],AL;
计算个位数
MOVCX,4;
接下来的程序是将数值转化为ASCII并在屏幕上显示
LEASI,DNUM;
取DNUM的地址偏移量
NEXT4:
MOVAL,[SI];
将DNUM中所存的各个数值转换为ASCII码;
在屏幕上输出显示
CMPAL,09H
JBENEXT5
ADDAL,07H
NEXT5:
ADDAL,30H
MOVDL,AL
MOVAH,2
INT21H
INCSI
DECCX
JNZNEXT4
ENDSTART
3、实验代码
DATASEGMENT
OUPDB'
THEASCIIOF7963IS:
'
A1DB07H,09H,06H,03H
DATAENDS
CODESEGMENT
ASSUMECS:
MOVAX,DATA
MOVDS,AX
MOVDX,OFFSETOUP
MOVAH,09H
INT21H
MOVCL,4
MOVSI,0
MOVAL,A1[SI];
将A1的第SI个数据传给AL
MOVBL,AL
ORAL,30H;
加30转换为ASCII码值
SHRAL,4
将右移后的高位清零
因为ASCII码与值之间相差30
MOVDL,AL
输出对应的ASCII码
MOVAL,BL
ANDAL,0FH
ADDAL,30H
MOVAH,02H
MOVDL,'
LOOPNEXT
EXIT:
MOVAH,4CH
CODEENDS
4、实验代码
YIDB100DUP(88H)
ERDB100DUP(00H);
定义数组
THENUMBEROFCOUNTERIS:
MAINPROCFAR
MOVAX,DATA
MOVCL,100;
计数器初值
MOVCH,00H;
转移次数统计,初值
LEASI,YI;
将内存块1的偏移量给SI
LEADI,ER;
将内存块2的偏移量给DI
MOVAL,[SI]
MOV[DI],AL;
将YI中的数据复制到ER中
INCSI
INCDI
INCCH
显示字符串
MOVAH,9
CALLCOUNT;
调用子程序
DECCL;
计数减1
JNZNEXT;
计数不为零,跳转执行
HLT
MAINENDP;
主程序结束
下面是子程序,实现屏幕显示转移次数功能
COUNTPROCNEAR;
定义子程序属性
PUSHCX;
CX进栈
MOVDH,CH
将AL高位清零
若小于,跳转至NEXT3
ADDAL,07H
加30H
显示H
MOVDL,0AH;
回车
MOVDL,0DH;
换行
POPCX;
CX出栈
RET
COUNTENDP
子程序结束
5、实验代码
INPDB'
PLEASEINPUT(a~z):
设置字符串
OUPDB'
THETRANSFORMATION(A~Z)IS:
DATAENDS
MOVDX,OFFSETINP;
显示字符串,提示输入
MOVAH,1;
DOS中断调用,从键盘中读取一个字符
PUSHAX;
AX入栈
PUSHDX
中断调用,回车
中断调用,换行
MOVDX,OFFSETOUP;
显示字符串,输出提示
INT21H
POPDX;
DX出栈
POPAX;
AX出栈
SUBAL,32;
AL减去32,使大写转化为小写
大小写之间的ASCII码值相差32
MOVDL,AL;
DOS中断显示结果
MAINENDP
6、实验代码
YIDB44H,33H,22H,99H,00H
ERDB44H,33H,22H,99H,00H;
装载数据,必须有后面00H
SUMDB5DUP()
99223344H+99223344H='
LEABP,YI;
在BP中装入YI的地址偏移量
LEASI,ER;
在SI中装入ER的地址偏移量
LEADI,SUM;
在DI中装入SUM的地址偏移量
MOVCX,05;
计数初值
CLC;
进位位清零
MOVAL,[BP];
将YI中的数据赋给AL
MOVAH,[SI];
将ER中的数据赋给BL
ADCAL,AH;
YI和ER中的数据带进位的相加
将相加的结果保存在SUM中
INCSI
INCBP
DECCX
结果不为零,跳转到NEXT
上面的程序已经将相加的结果存在了SUM中,下面的程序是将SUM中的结果转化为ASCII显示
MOVCH,05;
MOVDH,[DI-1];
将所得结果最高位赋给DH
DECDI
DECCH
JNZNEXT1;
循环显示SUM中的值
ENDSTART
五、分析与总结
通过实验熟练了8086的指令系统和基本的程序设计格式,实验中出现的各种
问题通过一步步的分析自行解决的过程,提高了对于各种语句、指令的运用熟练程
度
实验二8255可编程并行接口实验
1、掌握8255芯片结构及工作方式;
2、熟悉8255并行口扩展的编程。
1、Lab6000p实验教学系统;
2、IBM-PC机
三、系统中8255模块
Lab6000p实验箱中的8255模块连线如图所示:
AD0~AD7、A0、A1、RESET、/WR、/RD已分别连至系统总线DB0~DB7、AB0、AB1、RESET、/IOW、/IOR;
8255_CS、PA口、PB口、PC口引出留给用户连接。
四、实验内容和实验步骤
1、8255基本输入输出方式――开关控制LED显示
1)实验要求
开关拨上LED亮,开关拨下LED灭。
2)电路连接
8255_CS连至地址译码/CS0,PA口连至LED电平显示模块,PB口连至开关电路。
3)程序框图
4)程序代码
modeequ082h;
方式0,PA,PC输出,PB输入
PortAequ8000h;
PortA
PortBequ8001h;
PortB
PortCequ8002h;
PortC
CAddrequ8003h;
控制字地址
codesegment
assumecs:
code
Start:
moval,mode
movdx,CAddr
outdx,al;
输出控制字
loop1:
movdx,PortB
inal,dx
movdx,PortA
outdx,al
jmploop1
codeends
endstart
5)实验步骤
[1]在Lab6000p实验箱上完成连接电路;
[2]开启计算机电源,开启Lab6000p实验箱电源;
[3]启动WAVE6000软件;
[4]确认WAVE6000与Lab6000p连接;
[5]输入源代码;
[6]编译源代码(F9);
[7]单步运行源代码(F8),观察每条指令执行结果;
[8]连续运行程序(Ctrl+F9),上下拨动开关观察LED显示情况。
6)问题思考
[1]若8255_CS连至地址译码/CS4,程序该如何修改。
答:
只要将8255四个端口A、B、C、控制口端口号依次更改为:
0C000H,0C001H,0C002H,0C003H
[2]若PB口连至LED电平显示模块,PA口连至开关电路,程序该如何修改。
只要更改8255的方式控制字为:
10010011H;
方式0PA输入PB、PC输出
2、8255选通输入方式――开关控制LED显示
开关上的逻辑信号在选通信号有效时读入微处理器,并送到LED显示。
2)提示
选通信号由单脉冲产生。
3)程序代码
MODEEQU10101110B
PORTAEQU8000H
PORTBEQU8001H
PORTCEQU8002H
CADDREQU8003H
ASSUMECS:
CODE
STARTPROCNEAR
MOVDX,CADDR
MOVAL,MODE
OUTDX,AL
SCAN:
MOVDX,PORTB
INAL,DX
MOVDX,PORTA
JMPSCAN
STARTENDP
CODEENDS
ENDSTART
实验三8253可编程定时/计数器实验
1、掌握8253芯片结构及工作方式;
2、熟悉8253可编程定时/计数器的编程。
三、系统中8253模块
Lab6000p实验箱中的8253模块连线如图所示:
AD0~AD7、A0、A1、/WR、/RD已分别连至系统总线DB0~DB7、AB0、AB1、/IOW、/IOR;
三个通道的OUT、GATE、CLK以及CS引出留给用户连接。
四、实验内容和实验步骤
1、8253计数实验
5个脉冲后LED0亮。
CONTROLequ08003h
COUNT0equ08000h
COUNT1equ08001h
COUNT2equ08002h
startprocnear
moval,30h;
通道0,方式0
movdx,CONTROL
moval,4;
计数器初始值。
movdx,COUNT0
低八位
moval,0
高八位
jmp$
startendp
4)实验步骤
[7]连续运行程序(Ctrl+F9),按动单脉冲按键观察LED显示情况。
5)问题思考
[1]若CS连至地址译码/CS3,程序该如何修改。
[2]为什么定时/计数器初值赋4,5个脉冲后LED才亮。
2、8253定时实验
在LED上实现1秒钟亮/1秒钟灭。
对标准脉冲信号计数,若一个计数器位数不够2个计数器(2个通道)级连(串连)。
3)程序代码
moval