您好,欢迎访问三七文档
实验一数据传送1、子程序Move中为什么比较SI、DI?源数据块与目标范围有可能部分重叠,需要考虑从第一个字节开始复制(顺序复制),还是从最后一个字节开始复制(倒序复制)。源数据块与目标范围有可能部分重叠,需要考虑从第一个字节开始复制(顺序复制),还是从最后一个字节开始复制(倒序复制)。2、编写一个程序,将DS段中的数据传送到实验仪B4区的61C256中。说明:B4区的61C256在I/O设备区,使用IOR、IOW读写。实验二数制转换实验1.实验内容1中将一个五位十进制数转换为二进制数(十六位)时,这个十进制数最小可为多少,最大可为多少?为什么?最小为00000,最大为65535,因为16位二进制数表示十进制数的范围是0~655352.将一个十六位二进制数转换为ASCII码十进制数时,如何确定Di的值?Di=16位二进制数/n10;n=5,4,3,2,1,03.在十六进制转换为ASCII码时,存转换结果后,为什么要把DX向右移四次?因为每四位二进制数表示一位16进制数,内存单元中的数据是以二进制存储的4.自编ASCII码转换十六进制、二进制转换BCD码的程序,并调试运行。实验三运算类编程实验1.求累加和程序设计,在偏移地址为1000H开始依顺序填入16个字(16个16位数),利用程序求和,存放在偏移地址2000H;2.多字节加法程序设计,参考原程序,编写个两个64位数的减法程序,结果保存到具体内存单元,调试并记录。实验四分支程序设计实验1、将源数据首址改为3100H,目的数据地址改为310A,再加以验证(注意单步调试);2、将源数据首址改为310AH,目的数据地址改为3100,再加以验证(注意单步调试)。实验六排序程序设计实验1、注意两个循环是如何循环的,如果想减少判断次数,比如说几次交换后就不再有数据交换了,如何修改程序来减少程序执行时间;2、编一程序把3000H-3009H中内容按从大到小排列;如果是有符号数怎么改写程序。硬件一静态存储器扩展实验5.改变实验程序,按非规则字写存储器,观察实验结果。SSTACKSEGMENTSTACKDW32DUP(?)SSTACKENDSCODESEGMENTSTARTPROCFARASSUMECS:CODEMOVAX,8000H;存储器扩展空间段地址MOVDS,AXAA0:MOVSI,0000H;数据首地址MOVCX,0010HMOVAX,0000HAA1:INCSIMOV[SI],AXINCAX;INCSIINCSILOOPAA1MOVAX,4C00HINT21H;程序终止STARTENDPCODEENDSENDSTART6.改变实验程序,按字节方式写存储器,观察实验现象。SSTACKSEGMENTSTACKDW32DUP(?)SSTACKENDSCODESEGMENTSTARTPROCFARASSUMECS:CODEMOVAX,8000H;存储器扩展空间段地址MOVDS,AXAA0:MOVSI,0000H;数据首地址MOVCX,0010HMOVAX,0000HAA1:MOV[SI],AXINCAXINCSILOOPAA1MOVAX,4C00HINT21H;程序终止STARTENDPCODEENDSENDSTART7.将实验程序改为死循环程序,分别按规则字与非规则字的方式写存储器。SSTACKSEGMENTSTACKDW32DUP(?)SSTACKENDSCODESEGMENTSTARTPROCFARASSUMECS:CODEMOVAX,8000H;存储器扩展空间段地址MOVDS,AXAA0:MOVSI,0000H;数据首地址MOVCX,0010HMOVAX,0000HAA1:MOV[SI],AXINCAXINCSIINCSIJMPAA1MOVAX,4C00HINT21H;程序终止STARTENDPCODEENDSENDSTART硬件二8259中断控制实验1.在中断中完成BCD码转换为二进制数。将四个二位十进制数的BCD码存放于3500H起始的内存单元中,将转换的二进制数存入3510H起始的内存单元中,每次中断完成一个二位十进制数的BCD码转换。实验步骤:将四个二位十进制数的BCD码存入3500H~3507H中,即:先键入E3500,然后输入0102030405060708.运行程序,按一次单次脉冲开关KK1+,查看3510内容,应为0ch。再按一次单次脉冲开关KK1+,查看3511内容,应为22。继续发中断,依次查看3512,3513内容。.MODELTINYIO8259_0EQU0260HIO8259_1EQU0261H.DATABUFFERDB8DUP(?)ReDisplayFlagDB0.STACK100.CODESTART:MOVAX,@DATAMOVDS,AX;初始化数据段MOVES,AXPUSHDSCALLWriIntverCLIPOPDS;初始化主片8259MOVDX,IO8259_0MOVAL,13HOUTDX,AL;ICW1MOVDX,IO8259_1MOVAL,08HOUTDX,AL;ICW2MOVAL,09HOUTDX,AL;ICW4MOVAL,0;OCW1OUTDX,ALMOVSI,3500HMOVDI,3510HSTIAA1:NOPJMPAA1WriIntverPROCNEARPUSHESMOVAX,0MOVES,AXMOVDI,20HLEAAX,MIR7STOSWMOVAX,CSSTOSWPOPESRETWriIntverENDPMIR7:STIXORAX,AXMOVAL,[SI]ADDAL,ALMOVBL,ALADDAL,ALADDAL,ALADDAL,BLINCSIADDAL,[SI]MOV[DI],ALINCSIINCDIMOVAL,20HMOVDX,IO8259_0OUTDX,AL;中断结束命令IRETENDSTART2.在上述试验基础上,第五次中断结束中断,再按单次脉冲开关KK1+将无法进入中断服务程序。.MODELTINYIO8259_0EQU0260HIO8259_1EQU0261H.DATABUFFERDB8DUP(?)ReDisplayFlagDB0counterDB06H.STACK100.CODESTART:MOVAX,@DATAMOVDS,AXMOVES,AXPUSHDSCALLWriIntverCLIPOPDS;初始化主片8259MOVDX,IO8259_0MOVAL,13HOUTDX,AL;ICW1MOVDX,IO8259_1MOVAL,08HOUTDX,AL;ICW2MOVAL,09HOUTDX,AL;ICW4MOVAL,0;OCW1OUTDX,ALMOVSI,3500HMOVDI,3510HSTIAA1:NOPJMPAA1WriIntverPROCNEARPUSHESMOVAX,0MOVES,AXMOVDI,20HLEAAX,MIR7STOSWMOVAX,CSSTOSWPOPESRETWriIntverENDPMIR7:STIDECcounter;自减,5次JNAAA3;(待测试)XORAX,AXMOVAL,[SI]ADDAL,ALMOVBL,ALADDAL,ALADDAL,ALADDAL,BLINCSIADDAL,[SI]MOV[DI],ALINCSIINCDIMOVAL,20HMOVDX,IO8259_0OUTDX,AL;中断结束命令IRETAA3:NOPJMPAA3ENDSTART3:编写程序利用8254计数器0和计数器1分别作为8259IR6,IR7的中断请求信号;将8255PA0接到发光二极管D0,8255PA7接到发光二极管D1;使DO,D1闪动,D0每闪动10次D1闪动一次。4、利用中断实现8255实验一(基本输入输出实验).MODELTINYIO8259_0EQU0260HIO8259_1EQU0261H.DATABUFFERDB8DUP(?)SAVE_ALDB?ReDisplayFlagDB0.STACK100.CODESTART:MOVAX,@DATAMOVDS,AXMOVES,AXPUSHDSCALLWriIntverCLIPOPDS;初始化主片8255MOVDX,0273HMOVAL,90HOUTDX,AL;初始化主片8259MOVDX,IO8259_0MOVAL,13HOUTDX,AL;ICW1MOVDX,IO8259_1MOVAL,08HOUTDX,AL;ICW2MOVAL,09HOUTDX,AL;ICW4MOVAL,0;OCW1OUTDX,ALMOVCX,0STIAA1:MOVDX,0271H;给B口送亮灯信号MOVAL,SAVE_ALOUTDX,ALJMPAA1WriIntverPROCNEARPUSHESMOVAX,0MOVES,AXMOVDI,20HLEAAX,MIR7STOSWMOVAX,CSSTOSWPOPESRETWriIntverENDPMIR7:STIMOVDX,0270H;从A口读入控制灯的信号INAL,DXMOVSAVE_AL,ALCALLDELAYMOVAL,20H;zhongduanMOVDX,IO8259_0OUTDX,AL;中断结束命令IRETDELAY:PUSHCX;延时MOVCX,0F000HAA2:PUSHAXPOPAXLOOPAA2POPCXRETENDSTART硬件三8255并行接口实验1:执行程序后,使发光二极管闪动。SSTACKSEGMENTSTACKDW32DUP(?)SSTACKENDSCODESEGMENTASSUMECS:CODESTART:MOVDX,0273HMOVAL,80HOUTDX,ALMOVBX,0000HAA1:MOVDX,0270HMOVAL,BHOUTDX,ALNOTBHMOVDX,0271HMOVAL,BLOUTDX,ALNOTBLCALLDELAYCALLDELAYJMPAA1DELAY:PUSHCXMOVCX,0F000HAA2:PUSHAXPOPAXLOOPAA2POPCXRETCODEENDSENDSTART2:执行程序后,使发光二极管高八位和低八位亮灭相反。(X86文档)SSTACKSEGMENTSTACKDW32DUP(?)SSTACKENDSCODESEGMENTASSUMECS:CODESTART:MOVDX,0273HMOVAL,80HOUTDX,ALMOVBX,00FFHAA1:MOVDX,0270HMOVAL,BHOUTDX,ALNOTBHMOVDX,0271HMOVAL,BLOUTDX,ALNOTBLCALLDELAYCALLDELAYJMPAA1DELAY:PUSHCXMOVCX,0F000HAA2:PUSHAXPOPAXLOOPAA2POPCXRETCODEENDSENDSTART1、例子程序中只展示了8155的输入输出和读写数据RAM的功能,8155还有定时器/计数器的功能,有兴趣读者可以自己编写程序,通过8155来实现定时,当作定时器用时,如何接线?2、若是要对PC口位操作,应该如何编写程序?3、如何使用8155实现键盘扫描和LED显示?(星研文档)1、如何对8255的PC口进行位操作?SSTACKSEGMENTSTACKDW32DUP(?)SSTACKENDSCODESEGMENTASSUMECS:CODESTART:MOVDX,0273HMOVAL,80HOUTDX,ALAA1:MOVAL,01HOUTDX,ALMOVAL,05HOUTDX,ALMOVAL,07HOUTDX,ALCALLDELAYCALLDELAYJMPAA1DELAY:PUSHCXMOVCX,0F000HAA2:PUSHAXPOPAXLOOPAA2POPCXRETCODEENDSENDSTART硬件四8254定时/计数器应用实验1:将CLK0接到时钟源,使程序每隔一秒显示一次M。2:编写程序使8254计数器0工作于方式0,OUT0接到发光二极管,使其闪动。(x86文档)1、8253还有其它五种工作方式,
本文标题:合肥工业大学电气与自动化专业实验中心-80X86微机原理及接口技术实验教程-思考题部分参考答案(1)
链接地址:https://www.777doc.com/doc-2181602 .html