微机系统实验报告材料.docx
《微机系统实验报告材料.docx》由会员分享,可在线阅读,更多相关《微机系统实验报告材料.docx(57页珍藏版)》请在冰豆网上搜索。
微机系统实验报告材料
电子科技大学
实验报告
课程名称
微机系统上机实验
成
绩
实验学时
28学时
评语:
指导教师:
吴文华
2016年12月26日
实验一汇编语言编程实验
一、实验目的
(1)掌握汇编语言的编程方法
(2)掌握DOS功能调用的使用方法
(3)掌握汇编语言程序的调试运行过程
二、实验设备
PC机一台。
三、实验容
1.将指定数据区的字符串数据以ASCII码形式显示在屏幕上,并通过DOS功能调用完成必要提示信息的显示。
2.在屏幕上显示自己的学号信息。
3.循环从键盘读入字符并回显在屏幕上,然后显示出对应字符的ASCII码,直到输入”Q”或“q”时结束。
4.自主设计输入显示信息,完成编程与调试,演示实验结果。
四、实验源码
DATASEGMENT
DISCHADB'WangHan14030188004',0AH,0DH,'$'
TABDB'',0AH,0DH,'$'
BLANKDB'$'
DATAENDS
STACKSEGMENT
STACKENDS
CODESEGMENT
ASSUMECS:
CODE,DS:
DATA,SS:
STACK
START:
MOVAX,SEGDISCHA
MOVDS,AX
MOVDX,OFFSETDISCHA
MOVAH,09H
INT21H
NEXT:
MOVAH,01H
INT21H
CMPAL,'Q'
JEENDSS
CMPAL,'q'
JEENDSS
MOVBL,AL
MOVAX,SEGBLANK
MOVDS,AX
MOVDX,OFFSETBLANK
MOVAH,09H
INT21H
MOVBH,0AH
MOVDL,BL
MOVCL,04H
SHRDL,CL
CMPDL,BH
JNLQ3
JMPQ2
Q1:
ADDDL,07H
Q2:
ADDDL,30H
MOVAH,02H
INT21H
MOVDL,BL
MOVDH,0FH
ANDDL,DH
CMPDL,BH
JNLQ3
JMPQ4
Q3:
ADDDL,07H
Q4:
ADDDL,30H
MOVAH,02H
INT21H
MOVAX,SEGTAB
MOVDS,AX
MOVDX,OFFSETTAB
MOVAH,09H
INT21H
MOVCX,0009H
LOOPNEXT
ENDSS:
MOVAH,4CH
INT21H
CODEENDS
ENDSTART
五、程序流程图
如下图1.2所示
图1.2程序流程图
实验二数码转换实验
一、实验目的
1.掌握不同进制数及编码相互转换的程序设计方法。
2.掌握运算类指令编程及调试方法。
3.掌握循环程序的设计方法。
二、实验设备
PC机一台。
三、实验容
1.重复从键盘输入不超过5位的十进制数,按回车键结束输入;
2.将该十进制数转换成二进制数;结果以2进制数的形式显示在屏幕上;
3.如果输入非数字字符,则报告出错信息,重新输入;
4.直到输入“Q”或‘q’时程序运行结束。
5.键盘输入一字符串,以空格结束,统计其中数字字符的个数,在屏幕显示
四、实验原理
十进制数可以表示为:
Dn*10n+Dn-1*10n-1+…+D0*100=Di*10i
其中Di代表十进制数1、2、3、…、9、0。
上式可以转换为:
Di*10i=(((Dn*10+Dn-1)*10+Dn-2)*10+…+D1)*10+D0
由上式可归纳出十进制数转换为二进制数的方法:
从十进制数的最高位Dn开始做乘10加次位的操作,依此类推,则可求出二进制数结果。
表2.1数码转换关系对应表
五、实验源码
1、数制转换
assumecs:
code
datasegment
estdb"Error:
Inputinvalid",0ah,0dh,'$'
dataends
stacksegment
stkdb64dup(0)
stackends
codesegment
start:
movax,stack
movss,ax
movsp,offsetstk
movax,data
movds,ax
rf:
movcx,5
movax,0
movdx,0
movsi,0
movdi,0
rr:
movah,01h
int21h
cmpal,0dh
jerend
cmpal,'q'
jeqt
cmpal,'Q'
jeqt
cmpal,'0'
jlerr
cmpal,'9'
jgerr
jmpcnt
err:
callperr
cnt:
subal,'0'
movbh,0
movbl,al
movax,di
pushbx
movbx,10
mulbx
popbx
addax,bx
adcdx,0
movsi,dx
movdi,ax
looprr
rend:
callnewline
movbx,si
callitb
movbx,di
callitb
callnewline
jmprf
qt:
movax,4c00h
int21h
itb:
movcx,16
rs:
movax,bx
andax,01h
movdl,al
adddl,'0'
pushdx
shrbx,1
looprs
movcx,16
r:
popdx
movah,02h
int21h
loopr
ret
newline:
movah,02h
movdl,0dh
int21h
movdl,0ah
int21h
ret
perr:
movdx,offsetest
movah,09h
int21h
jmprf
ret
codeends
endstart
2、数字统计
assumecs:
code
stacksegment
stkdb16dup(0)
stackends
codesegment
start:
movax,stack
movss,ax
movsp,0
movbx,0
rc:
movah,01h
int21h
cmpal,''
jebrk
cmpal,'0'
jln
cmpal,'9'
jgn
incbx
n:
jmprc
brk:
callshow_num
movax,4c00h
int21h
show_num:
movsi,0
rs:
movax,bx
movcl,10
divcl
addah,'0'
movdl,ah
pushdx
movah,0
incsi
cmpax,0
jert
jmprs
rt:
movcx,si
s:
popdx
movah,02h
int21h
loops
ret
codeends
endstart
六、程序流程图
如下图2.2所示
图2.2十进制ASCII码转换为二进制数流程图
实验三基本IO扩展口实验
一、实验目的
1.了解TTL芯片扩展简单I/O口的方法。
2.掌握数据输入输出程序编制的方法。
二、实验设备
PC机一台,实验箱
三、实验容
本实验要求用74LS244作为输入口,读取开关状态,并将此状态通过74LS273连到发光二极管显示。
具体实验容如下:
1.开关Yi为低电平时对应的发光二极管亮,Yi为高电平时对应的发光二极管灭。
2.当开关Yi全为高电平时,发光二极管Qi从左至右轮流点亮。
3.当开关Yi全为低电平时,发光二极管Qi从右至左轮流点亮。
四、实验原理
74LS244是一种三态输出的8总线缓冲驱动器,无锁存功能,当G为低电平,Ai信号传送到Yi,当为高电平时,Yi处于禁止高阻状态;
74LS273是一种带清除功能的8D触发器,1D~8D为数据输入端,1Q~8Q为数据输出端,正脉冲触发,低电平清除,常用作8位地址锁存器。
五、实验步骤
1.按照实验连线图连接:
244的CS接到ISA总线接口模块的0000H,Y7—Y0——开关K1—K8。
273的CS接到ISA总线接口模块的0020H,Q7—Q0——发光二极管L1—L8。
该模块的WR、RD分别连到ISA总线接口模块的IOWR、IORD。
该模块的数据(AD0~AD7)连到ISA总线接口模块的数据(LD0~LD7)。
2.编写实验程序,编译,运行程序
3.拨动开关,观察发光二极管的变化。
六、实验源码
MY_STACKSEGMENTPARA'STACK'
DB100DUP(?
)
MY_STACKENDS
MY_DATASEGMENTPARA'DATA'
IO_9054base_addressDB4DUP(0);PCI卡9054芯片I/O基地址暂存空间
IO_base_addressDB4DUP(0);PCI卡I/O基地址暂存空间
pcicardnotfindDB0DH,0AH,'pcicardnotfindoraddress/interrupterror!
!
!
',0DH,0AH,'$'
GOODDB0DH,0AH,'TheProgramisExecuting!
',0DH,0AH,'$'
LS244DW00000H
LS273DW00020H
RADB?
LBDB?
DELAY_SETEQU0FFFH;延时常数
MY_DATAENDs
MY_CODESEGMENTPARA'CODE'
MY_PROCPROCFAR
ASSUMECS:
MY_CODE,DS:
MY_DATA,SS:
MY_STACK
MAIN:
.386;386模式编译
MOVAX,MY_DATA
MOVDS,AX
MOVES,AX
MOVAX,MY_STACK
MOVSS,AX
CALLFINDPCI;自动查找PCI卡资源及IO口基址
MOVCX,wordptrIO_base_address
;MOVCX,0E800H;直接加入(E800:
本机PCI卡IO口基址)
ADDLS244,CX;PCI卡IO基址+偏移
ADDLS273,CX
MOVRA,7FH
MOVLB,0FEH
READ1:
MOVDX,LS244;读取开关状态
INAL,DX
CMPAL,0FFH
JEREAD2
CMPAL,000H
JEREAD3
NOTAL;取反
JMPREAD4
READ2:
CALLRIGHT
JMPREAD4
READ3:
CALLLEFT
READ4:
MOVDX,LS273
OUTDX,AL;送LED显示
CALLDELAY
CALLBREAK
JMPREAD1
MY_PROCENDp
RIGHTPROCNEAR
MOVAL,RA
RORAL,1
MOVRA,AL
RET
RIGHTENDP
LEFTPROCNEAR
MOVAL,LB
ROLAL,1
MOVLB,AL
RET
LEFTENDP
;*****************************************************************************
;/*按任意键退出*/
;*****************************************************************************
BREAKPROCNEAR;按任意键退出
PUSHF
PUSHAX
PUSHDX
MOVAH,06H
MOVDL,0FFH
INT21H
JERETURN
MOVAX,4C00H
INT21H
RETURN:
POPDX
POPAX
POPF
RET
BREAKENDP
;*****************************************************************************
;/*延时程序*/
;*****************************************************************************
DELAYPROCNEAR;延时程序
PUSHF
PUSHDX
PUSHCX
MOVDX,DELAY_SET
D1:
MOVCX,-1
D2:
DECCX
JNZD2
DECDX
JNZD1
POPCX
POPDX
POPF
RET
DELAYENDp
实验四可编程并行接口实验
一、实验目的
1.了解可编程并行接口8255的部结构,
2.掌握工作方式、初始化编程及应用。
二、实验设备
PC机一台,实验箱
三、实验容
1.流水灯实验:
利用8255的A口、B口循环点亮发光二极管。
2.交通灯实验:
利用8255的A口模拟交通信号灯。
3.I/O输入输出实验:
利用8255的A口读取开关状态,8255的B口把状态送发光二极管显示。
四、实验原理
8255是一个通用可编程并行接口电路。
它具有A、B、C三个8位并行口。
其中C口也可用作A、B口的联络信号及中断申请信号。
通过编程,它可以被设置为基本输入输出、选通输入输出以及双向传送方式。
对于C口还具有按位置0、1的功能。
图4.1可编程并行接口8255芯片接口电路
D7
D6
D5
D4
D3
D2
D1
D0
1
(特征位)
A组方式
00=方式001=方式1
1X=方式2
A口
0=输出
1=输入
C口高4位
0=输出
1=输入
B组方式
0=方式0
1=方式1
B口
0=输出
1=输入
C口低4位
0=输出
1=输入
0
(特征位)
不用
位选择
000=C口0位……111=C口7位
0=复位
1=置位
表4.18255控制字
五、实验步骤
1.流水灯实验
图4.2流水灯实验连线图
模块的WR、RD分别连到ISA总线接口模块的IOWR、IORD。
模块的数据(AD0~AD7)、地址线(A0~A7)分别连到ISA总线接口模块的数据(LD0~LD7)、地址线(LA0~LA7)。
8255模块选通线CE连到ISA总线接口模块的0000H。
8255的PA0~PA7连到发光二极管的L0~L7;8255的PB0~PB7连到发光二极管的L8~L15。
运行程序,观察发光二极管。
2.交通灯实验
模块的WR、RD分别连到ISA总线接口模块的IOWR、IORD。
模块的数据(AD0~AD7)、地址线(A0~A7)分别连到ISA总线接口模块的数据(LD0~LD7)、地址线(LA0~LA7)。
8255模块选通线CE连到ISA总线接口模块的0000H。
8255的PA0-L7、PA1-L6、PA2-L5、PA3-L3、PA4-L2、PA5-L1。
运行程序,观察发光二极管。
图4.3交通灯实验连线图
六、实验源码
1流水灯
MY_STACKSEGMENTPARA'STACK'
DB100DUP(?
)
MY_STACKENDS
;
MY_DATASEGMENTPARA'DATA'
IO_9054base_addressDB4DUP(0);PCI卡9054芯片I/O基地址暂存空间
IO_base_addressDB4DUP(0);PCI卡I/O基地址暂存空间
pcicardnotfindDB0DH,0AH,'pcicardnotfindoraddress/interrupterror!
!
!
',0DH,0AH,'$'
GOODDB0DH,0AH,'TheProgramisExecuting!
',0DH,0AH,'$'
LADB?
LBDB?
P8255_ADW0000H
P8255_BDW0001H
P8255_CDW0002H
P8255_MODEDW0003H
DELAY_SETEQU1FFFH
MES2DB'PCICONFIGREADERROR!
$'
MY_DATAENDs
MY_CODESEGMENTPARA'CODE'
MY_PROCPROCFAR
ASSUMECS:
MY_CODE,DS:
MY_DATA,SS:
MY_STACK
START:
.386;386模式编译
MOVAX,MY_DATA
MOVDS,AX
MOVES,AX
MOVAX,MY_STACK
MOVSS,AX
CALLFINDPCI;自动查找PCI卡资源及IO口基址
MOVCX,wordptrIO_base_address
;MOVCX,0E800H;直接加入(E800:
本机PCI卡IO口基址)
ADDP8255_A,CX;PCI卡IO基址+偏移
ADDP8255_B,CX
ADDP8255_C,CX
ADDP8255_MODE,CX
MOVDX,P8255_MODE;8255初始化,三个口全为输出
MOVAL,80H
OUTDX,AL
MOVDX,P8255_A;PA口赋初值
MOVAL,7FH
OUTDX,AL
MOVLA,AL
MOVDX,P8255_B;PB口赋初值
MOVAL,0FEH
OUTDX,AL
MOVLB,AL
CALLDELAY
A1:
MOVAL,LA;PA口数据右移一位
RORAL,1
MOVLA,AL
MOVDX,P8255_A
OUTDX,AL
MOVAL,LB
ROLAL,1
MOVLB,AL
MOVDX,P8255_B;PB口数据右移一位
OUTDX,AL
CALLDELAY;延时
CALLBREAK;按任意键退出
JMPA1
MY_PROCENDp
;
;*****************************************************************************
;/*延时子程序*/
;*****************************************************************************
;
DELAYPROCNEAR;延时程序
PUSHF
PUSHDX
PUSHCX
MOVDX,DELAY_SET
D1:
MOVCX,-1
D2:
DECCX
JNZD2
DECDX
JNZD1
POPCX
POPDX
POPF
RET
DELAYENDp
;
;*****************************************************************************
;/*按任意键退出子程序*/
;*****************************************************************************
;
BREAKPROCNEAR
MOVAH,06H
MOVDL,0FFH
INT21H
JERETURN
MOVAX,4C00H
INT21H
RETURN:
RET
BREAKENDP
;
2交通灯
MY_STACKSEGMENTPARA'STACK'
DB100DUP(?
)
MY_STACKENDS
MY_DATASEGMENTPARA'DATA'
IO_9054base_addressDB4DUP(0);PCI卡9054芯片I/O基地址暂存空间
IO_base_addressDB4DUP(0);PCI卡I/O基地址暂存空间
pcicardnotfindDB0DH,0AH,'pcicardnotfindoraddress/interrupterror!
!
!
',0DH,0AH,'$'
GOODDB0DH,0AH,'TheProgramisExecuting!
',0DH,0AH,'