还剩24页未读,继续阅读
本资源只提供10页预览,全部文档请下载后查看!喜欢就下载吧,查找使用更方便
文本内容:
微机原理实验指导书商丘师范学院物理与信息工程系编TOC\o1-3\h\z\u实验一二进制多位加法运算实验-2-
一、实验目的-2-
二、实验仪器-2-
三、实验原理-2-
四、实验步骤-3-
五、问题思考-3-实验二数码显示实验-4-
一、实验目的-4-
二、实验仪器-4-
三、实验原理-4-
四、实验步骤-6-
五、问题思考-6-实验三数据块__实验-8-
一、实验目的-8-
二、实验仪器-8-
三、实验原理-8-
四、实验步骤-9-
五、问题思考-9-实验四多分支程序实验-11-
一、实验目的-11-
二、实验仪器-11-
三、实验原理-11-
四、实验步骤-12-
五、问题思考-12-实验五8255A并行口实验-14-
一、实验目的-14-
二、实验仪器-14-
三、实验原理-14-
四、实验步骤-16-
五、问题思考-17-实验六8259单级中断控制器实验-19-
一、实验目的-19-
二、实验仪器-19-
三、实验原理-19-
四、实验步骤-23-
五、问题思考-23-实验一二进制多位加法运算实验
一、实验目的
(1)学习使用加法类运算指令编程及调试方法
(2)理解程序、数据在存储器中的存储方式
二、实验仪器微机、微机原理接口实验仪
三、实验原理计算X+Y+Z=?(X、Y、Z为16位二制数)由于本实验是三个十六位二制数相加运算,因此,当X+Y时要考虑用ADC指令,把进位C加到结果的高16位中,当(X+Y)+Z时,再把进位C加到结果的高16位中,本实验设定三个加数0FFFFH,计算结果应为2FFFDH数据X、Y、Z存放在内存4000H~4005H单元中运算结果保留在内存4100H~4102H单元中,其中4102H单元存放进位程序流程图实验程序CODESEGMENT;程序段开始 ASSUMECS:CODE;定义CS为程序段段寄存器 ORG2CA0H;程序从存储器地址2CA0H开始存放START:CLC;清除进位标志 MOVSI,4000H;把数4000H存入SI寄存器 MOV[SI],0ffffH;被加数0ffffH(X)存入SI指定的存储器单元(4000H、4001H)_____ MOV[SI+2],0ffffH;加数0ffffH(Y)存入SI+2指定的存储器单元(4002H、4003H)20000 MOV[SI+4],0ffffH;加数0ffffH(Z)存入SI+4指定的存储器单元(4004H、4005H)30000 MOVAX,0000H;清除和的进位存储单元(4102H单元=0) MOV[SI+102H],AX; MOVAX,[SI];从存储器中取出被加数(X), ADDAX,[SI+2];从存储器中取出加数(Y),实现X+Y,和在AX寄存器中,进位在CY中 ADC[SI+102H],0000;把进位存入4102H单元,[SI+102H]+0+CY ADDAX,[SI+4];(X+Y)+Z MOV[SI+100H],AX;X+Y+Z和的低16位存入4100H、4101H中 ADC[SI+102H],0000;(X+Y)+Z和的进位存入4102H单元中 JMP$;循环执行JMP指令,程序完成 CODEENDS;程序段结束 ENDSTART;程序结束
四、实验步骤
(1)在PC机和实验系统联机状态下,运行该实验程序,可用鼠标左键单击菜单栏“文件”或工具栏“打开图标”,弹出“打开文件”的对话框,然后打开8kA__文件夹,__S
1.A__文件,单击“确定”即可装入源文件,再单击工具栏中编译,即可完成源文件自动编译、装载目标代码功能,再单击“调试”中“连续运行”或工具图标运行,即开始运行程序
(2)运算结果保留在内存4100H~4102H单元中,__DI__-8086K软件中存贮器RAM窗口,输入RAM的起始地址
4100、
4101、4102,单元内容应为FD、FF、02
(3)连续运行程序,从程序、数据存储器相应地址查看程序代码、运算数据、运算结果
(4)修改运算数据X=_____、Y=
20000、Z=30000,单步运行程序,观察存储器窗口、查看运行结果27104E207530
五、问题思考
(1)能不能直接把变量X、Y、Z放入内存?
(2)怎样修改运算数据?
(3)查看运行结果时应注意什么问题?实验1二进制多位加法运算程序反编译代码地址存储值反编译的指令2CA0F8CLC2CA1BE0040MOVSI40002CA4C704FFFFMOVWORDPTR[SI]FFFF2CA8C74402FFFFMOVWORDPTR[SI+02]FFFF2CADC74404FFFFMOVWORDPTR[SI+04]FFFF2CB2B80000MOVAX00002CB5__840201MOV[SI+0102]AX2CB98B04MOVAX[SI]2CBB034402ADDAX[SI+02]2CBE8394020100ADCWORDPTR[SI+0102]+002CC3034404ADDAX[SI+04]2CC6__840001MOV[SI+0100]AX2CCA8394020100ADCWORDPTR[SI+0102]+002CCFEBFEJMP2CCF实验二数码显示实验
一、实验目的
(1)了解LED数码管动态显示的工作原理及编程方法
(2)理解显示缓冲器、字型码,掌握查表方法
二、实验仪器微机、微机原理接口实验仪
三、实验原理实验箱数码显示电路如图所示,驱动数码管需要两个条件,一是通过字形代码端口输出字形代码,二是通过位型代码端口输出位型代码字形代码放在字形代码表中,使用DB指令建立表格,位型代码由右移指令实现显示数据由内存中的显示缓冲区提供,经过查表指令取出字形显示代码输出显示,采用使用动态显示方式,循环输出显示代码程序流程图实验程序CODE SEGMENT;程序段开始ASSUMECS CODE ;定义CS为程序段段寄存器 ORG2DF0H;程序从存储器地址2DF0H开始存放START JMPSTART0;跳到程序开始处 PA EQU0FF21H;把PA字符定义给字位口地址0FF21H,使程序中的PA代表0FF21H PB EQU0FF22H;把PB字符定义给字形口地址0FF22HPC EQU0FF23H;把PC字符定义给键入口地址0FF23HBUF DB,,,,,;在存储器中预定6个存储单元,作为6位数码管的显示缓冲区data1: db0c0h0f9h0a4h0b0h99h92h82h0f8h80h90h88h83h0c6h0a1h;定义显示字型码 db86h8eh0ffh0ch__h0deh0c7h8ch0f3h0bfh8FH0ffh0ffh0ffhSTART0CALLBUF1;程序开始,调用BUF1子程序CON1: CALLDISP;调用显示子程序 JMPCON1;跳转到CON1,进行主程序循环DISP: MOVAL,0FFH;把0FFH放入AX寄存器的低8位AL寄存器 MOVDX,PA;字位口地址0FF21H存入DX寄存器 OUTDX,AL;把0FFH送到字位口,准备把所有数码管熄灭 MOVCL,0DFH;6位数码管最高位的字位码存入CL寄存器 MOVBX,OFFSETBUF;把显示缓冲区首地址存入BX寄存器DIS1: MOVAL,[BX];从显示缓冲区中取出一个显示码存入AX的低8位AL MOVAH,00H;AX寄存器高八位清零 PUSHBX;把BX寄存器的值存入堆栈存储器,以用于新的场合 MOVBX,OFFSETDATA1;把字型码表的首地址存入BX寄存器 ADDBX,AX;显示码+字型码表首地址=表内单元地址 MOVAL,[BX];查表,把某个显示码的字型码从存储器取出 POPBX;恢复原来BX的值 MOVDX,PB;字形口地址0FF22H存入DX寄存器 OUTDX,AL;把字型码输出到字形口地址0FF22H MOVAL,CL;把字位码存入AL寄存器 MOVDX,PA;字位口地址0FF21H存入DX寄存器 OUTDX,AL;把字位码输出到字位口地址0FF21H PUSHCX;把CX寄存器的值存入堆栈存储器,以用于新的场合DIS2: MOVCX,00A0H;把数00A0H存入寄存器CX,作为定时常数 LOOP$;如果CX—1≠0,重复执行指令LOOP,延时 POPCX;恢复原来CX的值 CMPCL,0FEH;比较CL寄存器的值是否等于0FEH JZLX1;等于则跳转到LX1处,6位数码管显示完毕 INCBX;没有显示完就让BX+1,指向显示缓冲区的下一位 RORCL,1;循环右移CL寄存器的值,把显示位形码修改成下一位 JMPDIS1;跳转到DIS1 LX1:MOVAL,0FFH;熄灭所有数码管 MOVDX,PB OUTDX,AL RET;子程序返回BUF1: MOVBUF,0DH;2把DI__88显示码存入显示缓冲区子程序 MOVBUF+1,01H0 MOVBUF+2,0CH0 MOVBUF+3,0EH8 MOVBUF+4,08H10 MOVBUF+5,08H10 RET;-------------------------------------------------------CODEENDS;程序段结束 ENDSTART;程序结束
四、实验步骤
(1)在PC机和实验系统联机状态下,运行该实验程序,可用鼠标左键单击菜单栏“文件”或工具栏“打开图标”,弹出“打开文件”的对话框,然后打开8kA__文件夹,__S
6.A__文件,单击“确定”即可装入源文件,再单击工具栏中编译,即可完成源文件自动编译、装载目标代码功能,再单击“调试”中“连续运行”或工具图标运行,即开始运行程序
(2)数码管显示“DI__88”字样
(3)连续运行程序,从程序数据存储器相应地址查看程序代码、显示缓冲区、字型码表
(4)修改参数,使数码管显示2008字样,单步运行程序,观察寄存器窗口、查看运行结果
五、问题思考
(1)分析程序中BX、DX寄存器的作用
(2)怎样控制数码管循环点亮的循环方式?实验2数码显示实验程序反编译代码2DF0EB23JMP2E152DF290NOP2DF30000ADD[BX+SI]AL2DF50000ADD[BX+SI]AL2DF70000ADD[BX+SI]AL2DF9C0DBC02DFAF9STC2DFBA4MOV__2DFCB099MOVAL992DFE92XCHGDXAX2DFF82F880CMPAL802E0290NOP2E038883C6A1MOV[BP+DI+A1C6]AL2E07868EFF0CXCHGCL[BP+0CFF]2E0B__DEMOVSIBX2E0DC78CF__F8FFFMOVWORDPTR[SI+BFF3]FF8F2E13FFFFDI2E15E83F00CALL2E572E18E80200CALL2E1D2E1BEBFBJMP2E182E1DB0FFMOVALFF2E1FBA21FFMOVDXFF212E22EEOUTDXAL2E23B1DFMOVCLDF2E25BBF32DMOVBX2DF32E288A07MOVAL[BX]2E2AB400MOVAH002E2C53PUSHBX2E2DBBF92DMOVBX2DF92E3003D8ADDBXAX2E328A07MOVAL[BX]2E345BPOPBX2E35BA22FFMOVDXFF222E38EEOUTDXAL2E398AC1MOVALCL2E__BA21FFMOVDXFF212E3EEEOUTDXAL2E3F51PUSHCX2E40B9A00FMOVCX0FA02E43E2FELOOP2E432E4559POPCX2E4680F9FECMPCLFE2E497405JZ2E502E4B43INCBX2E4CD0C9RORCL12E4EEBD8JMP2E282E50B0FFMOVALFF2E52BA22FFMOVDXFF222E55EEOUTDXAL2E56C3RET2E572ECS:2E58C606F32D0DMOVBYTEPTR[2DF3]0D2E5D2ECS:2E5EC606F42D01MOVBYTEPTR[2DF4]012E632ECS:2E64C606F52D0CMOVBYTEPTR[2DF5]0C2E692ECS:2E6AC606F62D0EMOVBYTEPTR[2DF6]0E2E6F2ECS:2E70C606F72D08MOVBYTEPTR[2DF7]082E752ECS:2E76C606F82D08MOVBYTEPTR[2DF8]082E7BC3RET实验三数据块__实验
一、实验目的
(1)了解内存中数据块__方法
(2)掌握分支程序的设计方法
二、实验仪器微机、微机原理接口实验仪
三、实验原理程序要求把内存中一数据区(称为源数据块)传送到内存另一数据区(称为目的数据块)源数据块和目的数据块在存贮中可能有三种情况,如下图所示对于两个数据块分离的情况,如图(a),数据的传送从据块的首址开始,或者从数据块的末址开始均可但对于有部分重叠的情况,则要加以分析,否则重叠部分会因“搬移”而遭破坏可以得出如下结论当源数据块首址大于目的块首址时,从数据块首地址开始传送数据当源数据块首址小于目的块首址时,从数据块末址开始传送数据程序流程图实验程序CODESEGMENT;程序段开始 ASSUME CS CODE;定义CS为程序段段寄存器 ORG2EF0H;程序从存储器地址2EF0H开始存放START: MOVCX,0100H;数据传送个数0100H存放CX寄存器 MOVSI,4000H4100H;源地址4000H存入源地址寄存器SI MOVDI,4100H4000H;目的地址4100H存入目的地址寄存器DI CMPSI,DI;比较SI和DI的值的大小,判断 JAFADR;SIDI则跳转到FADR处,从地址的头部开始传送数据 ADDSI,CX;SI<DI则地址的尾部开始传送数据,SI+CX形成尾部源地址 ADDDI,CX;DI+CX形成尾部目的地址 DECSI;指向第一个数据源地址 DECDI;指向第一个数据目的地址CON1: MOVAL,[SI];从源地址取出一个数据存入AL寄存器,地址减量传送 MOV[DI],AL;把数据存入目的地址 DECSI;减量修改源地址指针 DEC DI;减量修改目的地址指针 DEC CX;修改数据个数 JNE CON1;标志__≠0(CX—1≠0)则跳转到CON1,__下一个数据 JMP$;标志__=0(CX—1=0)则传送结束FADR: MOVAL,[SI];从源地址取出一个数据存入AL寄存器,地址增量传送MOV[DI],AL;把数据存入目的地址 INCSI;增量修改源地址指针 INCDI;增量修改目的地址指针 DECCX;修改数据个数 JNEFADR;标志__≠0(CX—1≠0)则跳转到FADR,__下一个数据 JMP$;标志__=0(CX—1=0)则传送结束CODE ENDS;程序段结束 ENDSTART;程序结束
四、实验步骤1在源数据块4000H~40FFH中首址、末址几个单元,填入几个标志性数据2在PC机和实验系统联机状态下,运行该实验程序,可用鼠标左键单击菜单栏“文件”或工具栏“打开图标”,弹出“打开文件”的对话框,然后打开8kA__文件夹,__S
8.A__文件,单击“确定”即可装入源文件,再单击工具栏中编译,即可完成源文件自动编译、装载目标代码功能,再单击“调试”中“连续运行”或工具图标运行,即开始运行程序3复位RST键,查看目的数据块4100H~41FFH数据是否和源数据块4000H~40FFH单元相一致4让目的地址DI和源地址SI的值对调,重新在源地址填入几个标志性数据,执行程序,查看运行结果
五、问题思考1程序是怎样实现循环控制的?2分析SI、DI寄存器的作用实验3数据块__程序反编译代码地址存储值反编译的指令2EF0B90001MOVCX01002EF3BE0040MOVSI40002EF6BF0042MOVDI41002EF9__F7CMPSIDI2EFB7711JA2F0E2EFD03F1ADDSICX2EFF03F9ADDDICX2F014EDECSI2F024FDECDI2F038A04MOVAL[SI]2F058805MOV[DI]AL2F074EDECSI2F084FDECDI2F0949DECCX2F0A75F7JNZ2F032F0CEBFEJMP2F0C2F0E8A04MOVAL[SI]2F108805MOV[DI]AL2F1246INCSI2F1347INCDI2F1449DECCX2F1575F7JNZ2F0E2F17EBFEJMP2F17实验四多分支程序实验
一、实验目的
(1)掌握程序散转的方法,实现程序的多分支转移
二、实验仪器微机、微机原理接口实验仪
三、实验原理多分支程序一般用于实现键盘功能的实现,当按键的键值被读入内存指定单元后,为实现键的功能需要根据键值跳往对应程序完成相应功能方法是把每个程序的首地址先存放在一个表格中,利用键值查表把查得的值作为地址再利用跳转指令就可实现程序流程图实验程序CODESEGMENT;程序段开始 ASSUME CS:CODE;定义CS为程序段段寄存器 ORG2F40H;程序从存储器地址2F40H开始存放START: JMPSTART0;程序开始ADDR DWDP0DP1DP2DP3DP4DP5DP6DP7DP8DP9DPA;把程序段DP
0、DP1等地址的值放入表格START0:MOVSI,4000H;存储器4000H处存放分支代码(比如键盘送来的数字) MOVAL,[SI];取出分支代码,存入AL寄存器 SUBAH,AH;清除AH寄存器的值,AH、AL构成AX SHLAL,1;AL寄存器的值左移一位 MOVBX,OFFSETADDR;把表格首地址放入BX寄存器 ADDBX,AX;形成分支地址 JMP[BX];跳转到分支代码指定的程序段执行程序DP0: MOVBL,0c0H;DISP0;DP0程序段,把显示0的字型码放入显示子程序入口参数BL寄存器 JMPdisp;跳转到显示子程序DP1: MOVBL,0f9H;DISP1 JMPdispDP2: MOVBL,0a4H;DISP2 JMPdispDP3: MOVBL,0b0H;DISP3 JMPdispDP4: MOVBL,99H;DISP4 JMPdispDP5: MOVBL,92H;DISP5 JMPdispDP6: MOVBL,82H;DISP6 JMPdispDP7: MOVBL,0f8H;DISP7 JMPdispDP8: MOVBL,80H;DISP8 JMPdispDP9: MOVBL,90H;DISP9DPA:MOVBL88H;DISP“A” JMPdispdisp: MOVAH,0DFH;把数码管最高位显示位形码放入AHdisp0: MOVDX,0ff22H;把字形码端口地址放入DX寄存器 MOVAL,BL;取出字型码 OUTDX,AL;送出字形码 MOVDX,0ff21H;把位形码端口地址放入DX寄存器 MOVAL,AH; OUTDX,AL;送出位形码 CALLDLY;调用延时子程序 RORAH,01H;修改位形码,指向下一个数码管 JMPdisp0;跳转到显示子程序开始,重复显示DLY: MOVCX,0003H0006H;延时子程序,设置外层循环延时常数dly1: PUSHCX;保存 MOVCX,0ffffH;设置内层循环延时常数disp1: LOOPdisp1;循环判断(CX—1=0?) POPCX;取出外层循环延时常数 LOOPdly1;判断外层循环次数 RET;返回CODE NDS;程序段结束 ENDSTART;程序结束
四、实验步骤1在4000H单元写入00,01,……09中任一个数2在PC机和实验系统联机状态下,运行该实验程序,可用鼠标左键单击菜单栏“文件”或工具栏“打开图标”,弹出“打开文件”的对话框,然后打开8kA__文件夹,__S
9.A__文件,单击“确定”即可装入源文件,再单击工具栏中编译,即可完成源文件自动编译、装载目标代码功能,再单击“调试”中“连续运行”或工具图标运行,即开始运行程序3数码管应根据4000H单元中内容作不同的循环显示4修改程序,使数码管显示A,并使延时程序延时加倍
五、问题思考1___能看到数码管的循环点亮?2分析SI、CX寄存器的作用实验4多分支程序反编译代码地址存储值反编译的指令2F40EB15JMP2F572F42902F4367(ADDR)2F442F(DP0地址值)2F456C2F462F(DP1地址值)2F47712F482F(DP2地址值)2F49762F4A2F(DP3地址值)2F4B7B2F4C2F(DP4地址值)2F4D802F4E2F(DP5地址值)2F4F852F502F(DP6地址值)2F518A2F522F(DP7地址值)2F538F2F542F(DP8地址值)2F55942F562F(DP9地址值)(start0)2F57BE0040MOVSI40002F5A8A04MOVAL[SI]2F5C2AE4SUBAHAH2F5ED0E0SHLAL12F60BB432FMOVBX2F432F6303D8ADDBXAX2F65FF27JMP[BX]2F67B3C0(DP0)MOVBLC02F69EB2EJMP2F992F6B90NOP2F6CB3F9(DP1)MOVBLF92F6EEB29JMP2F992F7090NOP2F71B3A4(DP2)MOVBLA42F73EB24JMP2F99地址存储值反编译的指令2F7590NOP2F76B__0(DP3)MOVBLB02F78EB1FJMP2F992F7A90NOP2F7BB399(DP4)MOVBL992F7DEB1AJMP2F992F7F90NOP2F80B392(DP5)MOVBL922F82EB15JMP2F992F8490NOP2F85B382(DP6)MOVBL822F87EB10JMP2F992F__90NOP2F8AB3F8(DP7)MOVBLF82F8CEB0BJMP2F992F8E90NOP2F8FB380(DP8)MOVBL802F91EB06JMP2F992F9390NOP2F94B390(DP9)MOVBL902F96EB01JMP2F992F9890NOP2F99B4DF(disp)MOVAHDF2F9BBA22FFMOVDXFF222F9E8AC3MOVALBL2FA0EEOUTDXAL2FA1BA21FFMOVDXFF212FA48AC4MOVALAH2FA6EEOUTDXAL2FA7E80400CALL2FAE2FAAD0CCRORAH12FACEBEDJMP2F9B2FAEB90100(Dly)MOVCX00032FB151PUSHCX2FB2B9FFFFMOVCXFFFF2FB5E2FELOOP2FB52FB759POPCX2FB8E2F7LOOP2FB12FBAC3RET实验五8255A并行口实验
一、实验目的
(1)掌握通过8255A并行口传输数据的方法,以控制发光二极管的亮与灭
二、实验仪器微机、微机原理接口实验仪
三、实验原理⑴通过8255A控制发光二极管,PB4-PB7对应黄灯,PC0-PC3对应红灯,PC4-PC7对应绿灯以模拟交通路灯的管理⑵要完成本实验,必须先了解交通路灯的亮灭规律,设有一个十字路口l、3为南北方向,
2、4为东西方向,初始状态为四个路口的红灯全亮,之后,
1、3路口的绿灯亮,
2、4路口的红灯亮,
1、3路口方向通车延时一段时间后,l、3路口的绿灯熄灭,而l、3路口的黄灯开始闪烁,闪烁若干次以后,l、3路口红灯亮,而同时
2、4路口的绿灯亮,
2、4路口方向通车,延时一段时间后,
2、4路口的绿灯熄灭,而黄灯开始闪烁,闪烁若干次以后,再切换到l、3路口方向,之后,重复上述过程⑶程序中设定好8255A的工作模式及三个端口均工作在方式0,并处于输出状态⑷各发光二极管共阳极,使其点亮应使8255A相应端口的位清0程序流程图实验程序CODE SEGMENT;H8255-
2.A__ ASSUMECS:CODEIOCONPTEQU0FF2BH;8255控制口地址IOAPT EQU0FF28H;8255PA口地址IOBPT EQU0FF29H;8255PB口地址,高4位接黄灯IOCPT EQU0FF2AH;8255PC口地址,低4位接红灯,高4位接绿灯 ORG11e0HSTART: MOVAL82H;82H控制字送AL, MOVDXIOCONPT;8255控制口地址送DX寄存器 OUTDXAL;送出控制字,PA、PC输出,PB输入 MOVDXIOBPT;PB口地址送DX INALDX;从PB口取数据(PB口低4位别处在用) MOVBYTEPTRDS:[0601H]AL;保存到0601H单元 MOVDXIOCONPT;取8255控制口地址 MOVAL80H;设置成PA、PC、PB输出 OUTDXAL MOVDXIOBPT;取PB口地址 MOVALDS:[0601H];取0601H单元的数 ORAL0F0H;屏蔽低4位 OUTDXAL;送到PB口(恢复PB口低4位状态) MOVDXIOCPT;取PC口地址 MOVAL0F0H;把0FH送PC口,4个红灯全亮(0亮1熄灭) OUTDXAL CALLDELAY1;延时IOLED0:MOVAL10_____1B;
1、3路口绿灯亮,
2、4路口红灯亮 MOVDXIOCPT;取PC口地址 OUTDXAL;送出 CALLDELAY1;延时 CALLDELAY1 ORAL0F0H;熄灭
1、3路口绿灯 OUTDXAL MOVCX8H16H;设置黄灯闪烁次数IOLED1:MOVDXIOBPT;取PB口地址 MOVALDS:[0601H];取PB口原来状态 ANDAL10101111B;点亮
1、3路口黄灯,保持PB口低4位 OUTDXAL CALLDELAY2;延时 ORAL010_____B;熄灭
1、3路口黄灯,保持PB口低4位 OUTDXAL; CALLDELAY2;延时 LOOPIOLED1;CX-1不等于0,到IOLED1循环 MOVDXIOCPT;取PC口地址 MOVAL0F0H;4个红灯全亮 OUTDXAL CALLDELAY2;延时 MOVAL01011010B;
2、4路口绿灯亮,
1、3路口红灯亮 OUTDXAL CALLDELAY1;延时 CALLDELAY1 ORAL0F0H;4个红灯亮 OUTDXAL MOVCX8H16H;设置黄灯闪烁次数IOLED2:MOVDXIOBPT;取PB口地址 MOVALDS:[0601H];取PB口原来状态 ANDAL01011111B;点亮
2、4路口黄灯,保持PB口低4位 OUTDXAL CALLDELAY2;延时 ORAL10_____0B;熄灭
2、4路口黄灯,保持PB口低4位 OUTDXAL CALLDELAY2;延时 LOOPIOLED2;CX-1不等于0,到IOLED2循环 MOVDXIOCPT;取PC口地址 MOVAL0F0H;4个红灯全亮 OUTDXAL CALLDELAY2;延时 JMPIOLED0;主循环DELAY1:PUSHAX;延时子程序 PUSHCX MOVCX0030H0060H;设置延时常数DELY2: CALLDELAY2 LOOPDELY2;CX-1不等于0,到DELY2循环 POPCX POPAX RETDELAY2:PUSHCX;短延时程序 MOVCX8000H;设置延时常数DELA1: LOOPDELA1;CX-1不等于0,到DELY1循环 POPCX RETCODE ENDS ENDSTART
四、实验步骤
(1)按图6-4连好实验线路8255A PC0-L3 PC1-L7 PC2-L11 PC3-L15 (红灯) PC4-L2 PC5-L6 PC6-L10 PC7-L14(绿灯) PB4-L1 PB5-L5 PB6-L9 PB7-L13(黄灯)
(2)在联机状态下,加载H8255-
2.A__程序,全速运行程序,观察发光二极管工作状态
(3)修改程序,使黄灯闪烁16次;车辆通过时间加倍
五、问题思考
(1)___把B端口的值读进内存?
(2)分析短延时程序和长延时程序各对工作状态的影响实验58255A并行口程序反编译代码地址存储值反编译的指令11E0B082MOVAL8211E2BA2BFFMOVDXFF2B11E5EEOUTDXAL11E6BA29FFMOVDXFF2911E9ECINALDX11EAA20106MOV
[0601]AL11EDBA2BFFMOVDXFF2B11F0B080MOVAL8011F2EEOUTDXAL11F3BA29FFMOVDXFF2911F6A00106MOVAL
[0601]11F90CF0ORALF011FBEEOUTDXAL11FCBA2AFFMOVDXFF2A11FFB0F0MOVALF01201EEOUTDXAL1202E85D00CALL12621205B0A5MOVALA51207BA2AFFMOVDXFF2A120AEEOUTDXAL120BE85400CALL1262120EE85100CALL126212110CF0ORALF01213EEOUTDXAL1214B90800MOVCX00081217BA29FFMOVDXFF29121AA00106MOVAL
[0601]121D24AFANDALAF121FEEOUTDXAL1220E84C00CALL126F12230C50ORAL501225EEOUTDXAL1226E84600CALL126F1229E2ECLOOP1217122BBA2AFFMOVDXFF2A地址存储值反编译的指令122EB0F0MOVALF01230EEOUTDXAL1231E8__00CALL126F1234B05AMOVAL5A1236EEOUTDXAL1237E82800CALL1262123AE82500CALL1262123D0CF0ORALF0123FEEOUTDXAL1240B90800MOVCX00081243BA29FFMOVDXFF291246A00106MOVAL
[0601]1249245FANDAL5F124BEEOUTDXAL124CE82000CALL126F124F0CA0ORALA01251EEOUTDXAL1252E81A00CALL126F1255E2ECLOOP12431257BA2AFFMOVDXFF2A125AB0F0MOVALF0125CEEOUTDXAL125DE80F00CALL126F1260EBA3JMP1205126250PUSHAX126351PUSHCX1264B93000MOVCX00301267E80500CALL126F126AE2FBLOOP1267126C59POPCX126D58POPAX126EC3RET126F51PUSHCX1270B900F0MOVCXF0001273E2FELOOP1273127559POPCX1276C3RET实验六8259单级中断控制器实验
一、实验目的
(1)掌握8259中断控制器的接口方法
(2)学习8259中断控制器的应用编程
二、实验仪器微机、微机原理接口实验仪
三、实验原理⑴ 8259芯片介绍中断控制器8259A是专为控制优先级中断而设计的芯片它将中断源优先级排队、辨别中断源以及提供中断矢量的电路集于一片中因此无需附加任何电路,只需对8259A进行编程,就可以管理8级中断,并选择优先模式和中断请求方式即中断结构可以由用户编程来设定同时,在不需要增加其它电路的情况下,通过多片8259A的级联,能构成多达64级的矢量中断系统系统中断类型号08H09H0AH0BH0CH0DH0EH0FH⑵ 本实验中使用3号中断源IR3,“∩”插孔和IR3相连,中断方式为边沿触发方式,每拨二次AN开关产生一次中断,满5次中断,显示“8259——good”如果中断源电平__不符合规定要求,则自动转到7号中断,显示“Err”程序流程图主程序IR3中断服务程序实验程序CODE SEGMENT;H
8259.A__ ASSUMECS:CODEINTPORT1 EQU0060H;8259A的命令字I__1地址(8259A的CS接到端口EX1=60H上)INTPORT2 EQU0061H;8259A的命令字I__
2、I__
3、I__4地址INTQ3 EQUINTREEUP3INTQ7 EQUINTREEUP7PA EQU0FF21H;字位口;PA口作为数码管位形口,地址是0FF21HPB EQU0FF22H;字形口;PB口作为数码管字形口,地址是0FF22HPC EQU0FF23H;键入口 ORG12D0HSTART: JMPSTART0BUF DB;预定显示缓冲区intcnt db;预定中断次数单元data1: db0c0h0f9h0a4h0b0h99h92h82h0f8h80h90h88h83h0c6h0a1h db86h8eh0ffh0ch__h0deh0c7h8ch0f3h0bfh8FHSTART0: CLI;关中断 CALLBUF1;把8259-1送入显示缓冲区 CALLWRINTVER;把中断向量设置到中断向量表 MOVAL13H;把13H送命令字I__1,单片(不用I__3)、用I__4 MOVDXINTPORT1 OUTDXAL MOVAL08H;把08H送命令字I__2,中断向量从08H到0FH编码 MOVDXINTPORT2 OUTDXAL MOVAL09H;把09H送命令字I__4,缓冲方式、8088系列 OUTDXAL MOVAL0F7H;把0F7H送命令字O__1,IR3允许中断 OUTDXAL MOVintcnt01H;TIME=1;设置中断次数单元 STI;开中断WATING: CALLDISP;DISP8259-1;调用显示子程序 JMPWATING;循环等待中断WRINTVER:MOVAX0H;设置中断向量子程序赋予附加段段地址 MOVESAX MOVDI002CH;段内偏移量赋初值 LEAAXINTQ3;把INTQ3中断服务子程序的段内偏移量地址放入AX STOSW;将AX的值写入到ES DI指定的地址,同时DI+2(写入中断服务程序的偏移地址到中断向量表,设置INTQ3中断向量) MOVAX0000h;中断服务程序的段地址是0 STOSW;将AX的值写入到ES DI指定的地址,同时DI+2(写入中断服务程序的段地址到中断向量表,设置INTQ3中断向量) MOVDI003CH LEAAXINTQ7;把INTQ7中断服务子程序的段内偏移量地址放入AX STOSW;将AX的值写入到ES DI指定的地址,同时DI+2(写入中断服务程序的偏移地址到中断向量表,设置INTQ7中断向量) MOVAX0000h;中断服务程序的段地址是0 STOSW;将AX的值写入到ES DI指定的地址,同时DI+2(写入中断服务程序的段地址到中断向量表;设置INTQ3中断向量) RETINTREEUP3:CLI;中断INTQ3子程序 MOVALINTCNT;取中断次数 CALLCONVERS;设置显示中断次数 MOVBXOFFSETBUF;取BUF显示缓冲区首地址段内偏移量(077BH) MOVAL10H;显示代码存入AL(10H作为显示代码不显示任何数) MOVCX05H;设置循环次数,实际上是数码管的个数 INTRE0: MOV[BX]AL;把显示码送入显示缓冲区BX指定的单元 INCBX;指向下一个单元 LOOPINTRE0;CX-1不等于0则跳转,直到缓冲区写完(全熄灭) MOVAL20H;把20H送到O__2,发出一般的中断结束命令 MOVDXINTPORT1 OUTDXAL ADDINTCNT01H;增量中断次数单元 CMPINTCNT06H0BH;是否够5次 JNAINTRE2;不够5次时转移到INTRE2(不够5次跳转) CALLBUF2;DISP:good;够5次时调用把GOOD送入显示缓冲区的子程序INTRE1: CALLDISP;显示GOOD JMPINTRE1;死循环CONVERS:ANDAL0FH;屏蔽高4位 MOVBXoffsetbuf;取显示缓冲区首地址段内偏移量 MOV[BX+5]AL;把中断次数送缓冲区最后一位(在最低位显示中断次数) RETINTRE2: MOVAL20H;把20H送到O__2,发出一般的中断结束命令 MOVDXINTPORT1 OUTDXAL STI;开中断 IRET;中断返回INTREEUP7:CLI;中断INTQ7子程序 MOVAL20H;把20H送到O__2,发出一般的中断结束命令 MOVDXINTPORT1 OUTDXAL callbuf3;disp:err;调用Err送入显示缓冲区子程序INTRE3: CALLDISP;显示Err JMPINTRE3;死循环DISP: MOVAL0FFH;显示子程序,位码放AL,0FFH代表不显示 MOVDXPA;位形口地址放DX OUTDXAL;熄灭所以数码管 MOVCL0DFH;位形码放CL MOVBXOFFSETBUF;取显示缓冲区首地址段内偏移量DIS1: MOVAL[BX];从显示缓冲区取显示码 MOVAH00H PUSHBX MOVBXOFFSETDATA1;取显示字型码首地址段内偏移量 ADDBXAX;形成显示字形码地址 MOVAL[BX];查表取字型码 POPBX MOVDXPB;字形口地址放DX OUTDXAL;送出字形码 MOVALCL;取位形码 MOVDXPA;位形口地址放DX OUTDXAL;送出位形码 PUSHCX;短延时准备DIS2: MOVCX00A0H;延时常数放CX LOOP$;CX-1不等于0则循环 POPCX CMPCL0FEH;是否显示完最后一位 JZLX1;显示完跳转 INCBX;没完修改缓冲区偏移量,指向下一位 RORCL1;修改位形码 JMPDIS1;去显示下一位LX1: MOVAL0FFH; MOVDXPB;熄灭所以数码管 OUTDXAL RETBUF1: MOVBUF08H;把8259-1送入显示缓冲区子程序 MOVBUF+102H MOVBUF+205H MOVBUF+309H MOVBUF+417H MOVBUF+501H RETBUF2: MOVBUF09H2;把GOOD送入显示缓冲区子程序 MOVBUF+100H0 MOVBUF+200H0 MOVBUF+30Dh8 MOVBUF+410H MOVBUF+510H RETBUF3: MOVBUF0eH;把Err送入显示缓冲区子程序 MOVBUF+118H MOVBUF+218H MOVBUF+310H MOVBUF+410H MOVBUF+510H RETCODE ENDS ENDSTART
四、实验步骤
(1)按图6-6连好实验线路图8259的INT连8088的INTR(Xl5);8259的INTA连8088的INTA(Xl2);“∩”插孔和8259的3号中断IR3插孔相连,“∩”端初始为低电平;8259的CS端接EX1;连JX4→JX17
(2)在联机状态下,加载H
8259.A__程序,全速运行程序,系统显示8259-1,
(3)拨动AN开关按钮,按满5次显示good
(4)修改程序,使开关搬动10次显示2008
五、问题思考
(1)显示缓冲区的作用是什么
(2)进入中断服务子程序由什么决定?实验68259单级中断控制器程序反编译代码12D0EB22JMP12F412D290NOP12D30000ADD[BX+SI]AL12D50000ADD[BX+SI]AL12D70000ADD[BX+SI]AL12D900C0ADDALAL12DBF9STC12DCA4MOV__12DDB099MOVAL9912DF92XCHGDXAX12E082F880CMPAL8012E390NOP12E48883C6A1MOV[BP+DI+A1C6]AL12E8868EFF0CXCHGCL[BP+0CFF]12EC__DEMOVSIBX12EEC78CF__F8FFFMOVWORDPTR[SI+BFF3]FF8F12F4FCCLD12F5E8C800CALL13C012F8E81E00CALL131912FBB013MOVAL1312FDBA6000MOVDX00601300EEOUTDXAL1301B008MOVAL081303BA6100MOVDX00611306EEOUTDXAL1307B009MOVAL091309EEOUTDXAL130AB0F7MOVALF7130CEEOUTDXAL130D2ECS:130EC606D91201MOVBYTEPTR[12D9]011313FBSTI1___E86F00CALL1___1317EBFBJMP1___1319B80000MOVAX0000131C8EC0MOVESAX131EBF2C00MOVDI002C1321B83513MOVAX13351324ABSTOSW1325B80000MOVAX00001328ABSTOSW1329BF3C00MOVDI003C132CB87713MOVAX1377132FABSTOSW1330B80000MOVAX00001333ABSTOSW1334C3RET1335FACLI13362ECS:1337A0D912MOVAL[12D9]133AE82900CALL1366133DBBD312MOVBX12D31340B010MOVAL101342B90500MOVCX000513458807MOV[BX]AL134743INCBX1348E2FBLOOP1345134AB020MOVAL20134CBA6000MOVDX0060134FEEOUTDXAL13502ECS:13518006D91201ADDBYTEPTR[12D9]0113562ECS:1357803ED9120BCMPBYTEPTR[12D9]0B135C7611JBE136F135EE88400CALL13E51361E82200CALL1___1364EBFBJMP13611366240FANDAL0F1368BBD312MOVBX12D3136B884705MOV[BX+05]AL136EC3RET136FB020MOVAL201371BA6000MOVDX00601374EEOUTDXAL1375FBSTI1376CFIRET1377FACLI1378B020MOVAL20137ABA6000MOVDX0060137DEEOUTDXAL137EE8__00CALL140A1381E80200CALL1___1384EBFBJMP13811___B0FFMOVALFF1388BA21FFMOVDXFF21138BEEOUTDXAL138CB1DFMOVCLDF138EBBD312MOVBX12D313918A07MOVAL[BX]1393B400MOVAH00139553PUSHBX1396BBDA12MOVBX12DA139903D8ADDBXAX139B8A07MOVAL[BX]139D5BPOPBX139EBA22FFMOVDXFF2213A1EEOUTDXAL13A28AC1MOVALCL13A4BA21FFMOVDXFF2113A7EEOUTDXAL13A851PUSHCX13A9B9A000MOVCX00A013ACE2FELOOP13AC13AE59POPCX13AF80F9FECMPCLFE1__27405JZ1__91__443INCBX1__5D0C9RORCL11__7EBD8JMP13911__9B0FFMOVALFF1__BBA22FFMOVDXFF221__EEEOUTDXAL1__FC3RET13C02ECS:13C1C606D31208MOVBYTEPTR[12D3]0813C62ECS:13C7C606D41202MOVBYTEPTR[12D4]0213CC2ECS:13CDC606D51205MOVBYTEPTR[12D5]0513D22ECS:13D3C606D61209MOVBYTEPTR[12D6]0913D82ECS:13D9C606D71217MOVBYTEPTR[12D7]1713DE2ECS:13DFC606D81201MOVBYTEPTR[12D8]0113E4C3RET13E52ECS:13E6C606D31209MOVBYTEPTR[12D3]0913EB2ECS:13ECC606D41200MOVBYTEPTR[12D4]0013F12ECS:13F2C606D51200MOVBYTEPTR[12D5]0013F72ECS:13F8C606D6120DMOVBYTEPTR[12D6]0D13FD2ECS:13FEC606D71210MOVBYTEPTR[12D7]1014032ECS:1404C606D81210MOVBYTEPTR[12D8]101409C3RET140A2ECS:140BC606D3120EMOVBYTEPTR[12D3]0E14102ECS:1411C606D41218MOVBYTEPTR[12D4]1814162ECS:1417C606D51218MOVBYTEPTR[12D5]18141C2ECS:141DC606D61210MOVBYTEPTR[12D6]1014222ECS:1423C606D71210MOVBYTEPTR[12D7]1014282ECS:1429C606D81210MOVBYTEPTR[12D8]10142EC3RET。