微机系统实验报告.docx
《微机系统实验报告.docx》由会员分享,可在线阅读,更多相关《微机系统实验报告.docx(50页珍藏版)》请在冰豆网上搜索。
微机系统实验报告微机系统实验报告西安电子科技大学实验报告课程名称微机系统上机实验成绩实验学时28学时评语:
指导教师:
吴文华2016年12月26日实验一汇编语言编程实验一、实验目的
(1)掌握汇编语言的编程方法
(2)掌握DOS功能调用的使用方法(3)掌握汇编语言程序的调试运行过程二、实验设备PC机一台。
三、实验内容1.将指定数据区的字符串数据以ASCII码形式显示在屏幕上,并通过DOS功能调用完成必要提示信息的显示。
2.在屏幕上显示自己的学号姓名信息。
3.循环从键盘读入字符并回显在屏幕上,然后显示出对应字符的ASCII码,直到输入”Q”或“q”时结束。
4.自主设计输入显示信息,完成编程与调试,演示实验结果。
四、实验源码DATASEGMENTDISCHADBWangHan14030188004,0AH,0DH,$TABDB,0AH,0DH,$BLANKDB$DATAENDSSTACKSEGMENTSTACKENDSCODESEGMENTASSUMECS:
CODE,DS:
DATA,SS:
STACKSTART:
MOVAX,SEGDISCHAMOVDS,AXMOVDX,OFFSETDISCHAMOVAH,09HINT21HNEXT:
MOVAH,01HINT21HCMPAL,QJEENDSSCMPAL,qJEENDSSMOVBL,ALMOVAX,SEGBLANKMOVDS,AXMOVDX,OFFSETBLANKMOVAH,09HINT21HMOVBH,0AHMOVDL,BLMOVCL,04HSHRDL,CLCMPDL,BHJNLQ3JMPQ2Q1:
ADDDL,07HQ2:
ADDDL,30HMOVAH,02HINT21HMOVDL,BLMOVDH,0FHANDDL,DHCMPDL,BHJNLQ3JMPQ4Q3:
ADDDL,07HQ4:
ADDDL,30HMOVAH,02HINT21HMOVAX,SEGTABMOVDS,AXMOVDX,OFFSETTABMOVAH,09HINT21HMOVCX,0009HLOOPNEXTENDSS:
MOVAH,4CHINT21HCODEENDSENDSTART五、程序流程图如下图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:
codedatasegmentestdbError:
Inputinvalid,0ah,0dh,$dataendsstacksegmentstkdb64dup(0)stackendscodesegmentstart:
movax,stackmovss,axmovsp,offsetstkmovax,datamovds,axrf:
movcx,5movax,0movdx,0movsi,0movdi,0rr:
movah,01hint21hcmpal,0dhjerendcmpal,qjeqtcmpal,Qjeqtcmpal,0jlerrcmpal,9jgerrjmpcnterr:
callperrcnt:
subal,0movbh,0movbl,almovax,dipushbxmovbx,10mulbxpopbxaddax,bxadcdx,0movsi,dxmovdi,axlooprrrend:
callnewlinemovbx,sicallitbmovbx,dicallitbcallnewlinejmprfqt:
movax,4c00hint21hitb:
movcx,16rs:
movax,bxandax,01hmovdl,aladddl,0pushdxshrbx,1looprsmovcx,16r:
popdxmovah,02hint21hlooprretnewline:
movah,02hmovdl,0dhint21hmovdl,0ahint21hretperr:
movdx,offsetestmovah,09hint21hjmprfretcodeendsendstart2、数字统计assumecs:
codestacksegmentstkdb16dup(0)stackendscodesegmentstart:
movax,stackmovss,axmovsp,0movbx,0rc:
movah,01hint21hcmpal,jebrkcmpal,0jlncmpal,9jgnincbxn:
jmprcbrk:
callshow_nummovax,4c00hint21hshow_num:
movsi,0rs:
movax,bxmovcl,10divcladdah,0movdl,ahpushdxmovah,0incsicmpax,0jertjmprsrt:
movcx,sis:
popdxmovah,02hint21hloopsretcodeendsendstart六、程序流程图如下图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触发器,1D8D为数据输入端,1Q8Q为数据输出端,正脉冲触发,低电平清除,常用作8位地址锁存器。
五、实验步骤1.按照实验连线图连接:
244的CS接到ISA总线接口模块的0000H,Y7Y0开关K1K8。
273的CS接到ISA总线接口模块的0020H,Q7Q0发光二极管L1L8。
该模块的WR、RD分别连到ISA总线接口模块的IOWR、IORD。
该模块的数据(AD0AD7)连到ISA总线接口模块的数据(LD0LD7)。
2.编写实验程序,编译链接,运行程序3.拨动开关,观察发光二极管的变化。
六、实验源码MY_STACKSEGMENTPARASTACKDB100DUP(?
)MY_STACKENDSMY_DATASEGMENTPARADATAIO_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,$LS244DW00000HLS273DW00020HRADB?
LBDB?
DELAY_SETEQU0FFFH;延时常数MY_DATAENDsMY_CODESEGMENTPARACODEMY_PROCPROCFARASSUMECS:
MY_CODE,DS:
MY_DATA,SS:
MY_STACKMAIN:
.386;386模式编译MOVAX,MY_DATAMOVDS,AXMOVES,AXMOVAX,MY_STACKMOVSS,AXCALLFINDPCI;自动查找PCI卡资源及IO口基址MOVCX,wordptrIO_base_address;MOVCX,0E800H;直接加入(E800:
本机PCI卡IO口基址)ADDLS244,CX;PCI卡IO基址+偏移ADDLS273,CXMOVRA,7FHMOVLB,0FEHREAD1:
MOVDX,LS244;读取开关状态INAL,DXCMPAL,0FFHJEREAD2CMPAL,000HJEREAD3NOTAL;取反JMPREAD4READ2:
CALLRIGHTJMPREAD4READ3:
CALLLEFTREAD4:
MOVDX,LS273OUTDX,AL;送LED显示CALLDELAYCALLBREAKJMPREAD1MY_PROCENDpRIGHTPROCNEARMOVAL,RARORAL,1MOVRA,ALRETRIGHTENDPLEFTPROCNEARMOVAL,LBROLAL,1MOVLB,ALRETLEFTENDP;*;/*按任意键退出*/;*BREAKPROCNEAR;按任意键退出PUSHFPUSHAXPUSHDXMOVAH,06HMOVDL,0FFHINT21HJERETURNMOVAX,4C00HINT21HRETURN:
POPDXPOPAXPOPFRETBREAKENDP;*;/*延时程序*/;*DELAYPROCNEAR;延时程序PUSHFPUSHDXPUSHCXMOVDX,DELAY_SETD1:
MOVCX,-1D2:
DECCXJNZD2DECDXJNZD1POPCXPOPDXPOPFRETDELAYENDp实验四可编程并行接口实验一、实验目的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芯片接口电路D7D6D5D4D3D2D1D01(特征位)A组方式00=方式001=方式11X=方式2A口0=输出1=输入C口高4位0=输出1=输入B组方式0=方式01=方式1B口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。
模块的数据(AD0AD7)、地址线(A0A7)分别连到ISA总线接口模块的数据(LD0LD7)、地址线(LA0LA7)。
8255模块选通线CE连到ISA总线接口模块的0000H。
8255的PA0PA7连到发光二极管的L0L7;8255的PB0PB7连到发光二极管的L8L15。
运行程序,观察发光二极管。
2.交通灯实验模块的WR、RD分别连到ISA总线接口模块的IOWR、IORD。
模块的数据(AD0AD7)、地址线(A0A7)分别连到ISA总线接口模块的数据(LD0LD7)、地址线(LA0LA7)。
8255模块选通线CE连到ISA总线接口模块的0000H。
8255的PA0-L7、PA1-L6、PA2-L5、PA3-L3、PA4-L2、PA5-L1。
运行程序,观察发光二极管。
图4.3交通灯实验连线图六、实验源码1流水灯MY_STACKSEGMENTPARASTACKDB100DUP(?
)MY_STACKENDS;MY_DATASEGMENTPARADATAIO_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_ADW0000HP8255_BDW0001HP8255_CDW0002HP8255_MODEDW0003HDELAY_SETEQU1FFFHMES2DBPCICONFIGREADERROR!
$MY_DATAENDsMY_CODESEGMENTPARACODEMY_PROCPROCFARASSUMECS:
MY_CODE,DS:
MY_DATA,SS:
MY_STACKSTART:
.386;386模式编译MOVAX,MY_DATAMOVDS,AXMOVES,AXMOVAX,MY_STACKMOVSS,AXCALLFINDPCI;自动查找PCI卡资源及IO口基址MOVCX,wordptrIO_base_address;MOVCX,0E800H;直接加入(E800:
本机PCI卡IO口基址)ADDP8255_A,CX;PCI卡IO基址+偏移ADDP8255_B,CXADDP8255_C,CXADDP8255_MODE,CXMOVDX,P8255_MODE;8255初始化,三个口全为输出MOVAL,80HOUTDX,ALMOVDX,P8255_A;PA口赋初值MOVAL,7FHOUTDX,ALMOVLA,ALMOVDX,P8255_B;PB口赋初值MOVAL,0FEHOUTDX,ALMOVLB,ALCALLDELAYA1:
MOVAL,LA;PA口数据右移一位RORAL,1MOVLA,ALMOVDX,P8255_AOUTDX,ALMOVAL,LBROLAL,1MOVLB,ALMOVDX,P8255_B;PB口数据右移一位OUTDX,ALCALLDELAY;延时CALLBREAK;按任意键退出JMPA1MY_PROCENDp;*;/*延时子程序*/;*;DELAYPROCNEAR;延时程序PUSHFPUSHDXPUSHCXMOVDX,DELAY_SETD1:
MOVCX,-1D2:
DECCXJNZD2DECDXJNZD1POPCXPOPDXPOPFRETDELAYENDp;*;/*按任意键退出子程序*/;*;BREAKPROCNEARMOVAH,06HMOVDL,0FFHINT21HJERETURNMOVAX,4C00HINT21HRETURN:
RETBREAKENDP;2交通灯MY_STACKSEGMENTPARASTACKDB100DUP(?
)MY_STACKENDSMY_DATASEGMENTPARADATAIO_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,$P8255_ADW0000HP8255_BDW0001HP8255_CDW0002HP8255_MODEDW0003HDELAY_SETEQU0FfffHDELAY_SET1EQU08ffHMES2DBPCICONFIGREADERROR!
$MY_DATAENDsMY_CODESEGMENTPARACODEMY_PROCPROCFARASSUMECS:
MY_CODE,DS:
MY_DATA,SS:
MY_STACKSTART:
.386;386模式编译MOVAX,MY_DATAMOVDS,AXMOVES,AXMOVAX,MY_STACKMOVSS,AXCALLFINDPCI;自动查找PCI卡资源及IO口基址MOVCX,wordptrIO_base_address;MOVCX,0E800H;直接加入(E800:
本机PCI卡IO口基址)ADDP8255_A,CX;PCI卡IO基址+偏移ADDP8255_B,CXADDP8255_C,CXADDP8255_MODE,CXMOVDX,P8255_MODEMOVAL,80H;3个口全部为输出OUTDX,ALMOVDX,P8255_A;CALLST0;全为红灯TRAFFIC1:
CALLST1;南北为绿灯,东西为红灯;CALLDELAYCALLST2;南北黄灯闪烁,东西为红灯;CALLDELAYCALLST3;南北为红灯,东西为绿灯;CALLDELAYCALLST4;南北为红灯,东西黄灯闪烁CALLBREAKJMPTRAFFIC1MY_PROCENDp;*;/*初始状态全为红灯*/;*;ST0PROCNEARMOVAL,1BHOUTDX,ALCALLDELAYRETST0ENDp;*;/*南北为绿灯,东西为红灯子程序*/;*;ST1PROCNEARMOVDX,P8255_AMOVAL,33HOUTDX,ALCALLDELAY;CALLDELAYRETST1ENDp;*;/*南北黄灯闪烁,东西为红灯子程序*/;*;ST2PROCNEARMOVCX,5HST20:
MOVAL,2BHOUTDX,ALCALLDELAYMOVAL,3BHOUTDX,AlCALLDELAYLOOPST20RETST2ENDp;*;/*南北为红灯,东西为绿灯子程序*/;*;ST3PROCNEARMOVAL,1EHOUTDX,ALCALLDELAY;CALLDELAYRETST3ENDp;*;/*南北为红灯,东西黄灯闪烁子程序*/;*;ST4PROCNEARMOVCX,5HST40:
MOVAL,1DHOUTDX,ALCALLDELAYMOVAL,1FHOUTDX,ALCALLDELAYLOOPST40RETST4ENDp;*;/*延时子程序*/;*;DELAYPROCNEAR;延时程序PUSHFPUSHDXPUSHCXMOVDX,DELAY_SETD1:
MOVCX,-1D2:
DECCXJNZD2DECDXJNZD1POPCXPOPDXPOPFRETDELAYENDpDELAY1PROCNEAR;延时程序PUSHFPUSHDXPUSHCXMOVDX,DELAY_SET1D3:
MOVCX,-1D4:
DECCXJNZD4DECDXJNZD3POPCXPOPDXPOPFRETDELAY1ENDp;*;/*按任意键退出子程序*/;*;BREAKPROCNEAR;按任意键退出PUSHFPUSHAXPUSHDXMOVAH,06HMOVDL,0FFHINT21HJERETURNMOVAX,4C00HINT21HRETURN:
POPDXPOPAXPOPFRETBREAKENDP;实验五可编程定时器/计数器实验一、实验目的1.掌握8254定时/计数器的编程方法。
2.学习8254的几种工作方式。
3.了解计数器的硬件连接及时序关系。
二、实验设备PC机一台,实验箱三、实验内容1.将32Hz的晶振频率作为8254的时钟输入,利用定时器8254产生1Hz的方波,用发光二极管显示输出结果(发光二极管闪烁)。
2.用开关控制结束程序执行,发光二极管熄灭。
四、实验原理8254是一种可编程的定时器/计数器芯片,它具有3个独立的16位计数器通道,每个计数器都有6种工作方式,6种工作方式主要有5点不同:
一是启动计数器的触发方式和时刻不同;二是计数过程中门控信号GATE对计数操作的影响不同;三是OUT输出的波形不同;四是在计数过程中重新写入计数初值对计数过程的影响不同;五是计数过程结束,减法计数器是否恢复计数初值并自动重复计数过程的不同。
图5.1可编程定时器/计数器8254管脚图对8254的编程分两部分:
首先向控制字寄存器写入方式控制字,然后向指定的通道写入计数值。
方式控制字格式如下:
D7D6D5D4D3D2D1D0SC1SC0RL1RL0M2M1M0BCD其中:
SC1、SC0用来选择计数器通道;M2、M1、M0用来选择工作方