输入输出程序设计_第1页
输入输出程序设计_第2页
输入输出程序设计_第3页
输入输出程序设计_第4页
输入输出程序设计_第5页
已阅读5页,还剩20页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

第8章输入输出程序设计8.1I/O设备的数据传送方式一、CPU与外设控制信息状态信息数据信息二、直接存储器存取(DMA)方式系统完成DMA传送的步骤如下:(1)DMA控制器向CPU发出HOLD信号,请求使用总线.(2)CPU发出响应信号HOLD给DMA控制器,并将总线让出.(3)传输数据的存储器地址通过地址总线发出.(4)传输的数据字节通过数据总线进行传输.(5)地址寄存器增1,以便指向下一个要传送的字节.(6)字节计数器减1.(7)若字节计数器非0,转向第3步.(8)否则,DMA控制器撤消总线请求信号HOLD,传送结束8.2程序直接控制I/O方式一、I/O端口I/O地址功能I/O地址功能00~0FDMA控制器8237A20~3F可编程中断控制器8259A40~5F可编程中断计时器60~638255APPI70~71CMOSRAM81~8FDMA页表地址寄存器93~9FDMA控制器A0~A1可编程中断控制器2C0~CEDMA通道,传输地址寄存器F0~FF协处理器170~1F7硬盘控制器200~20F游戏控制端口278~27A3号并行口(LPT2打印机)2E0~2E3EGA/VGA使用2F8~2FE2号串行口(COM2)320~324硬盘适配器366~36FPC网络372~377软盘适配器378~37A2号并行口(LPT1打印机)380~38FSDLC及BSC通信390~393Cluster适配器3A0~3AFBSC通信3B0~3BFMDA视频寄存器3BC~3BE1号并行口3C0~3CFEGA/VGA视频寄存器3D0~3D7CGA视频寄存器3F0~3F7软盘控制寄存器3F8~3FE1号串行口(COM1)表8.1I/O端口地址分配二、I/O指令INAL,PORT;(AL)(PORT)INAX,PORT;(AX)(PORT+1,PORT)INAL,DX;(AL)((DX))INAX,DX;(AL)((DX+1),(DX))OUTPORT,AL;(PORT)(AL)

OUTPORT,AX;(PORT+1,PORT)(AX)

OUTDX,AL;((DX))(AL)

OUTDX,AX;((DX+1),(DX))(AL)

例如:INAX,28HMOVDATA_WORD,AXINAL,27HTESTAL,00000100BJNZERRORMOVDX,126HINAL,DXORAL,80HOUTDX,AL三、I/O程序举例例8.1发声子程序SOUND1/0076543210控制其他外部设备2号定时器门控&放大器程序如下:SOUNDPROCNEARPUSHAXPUSHDXMOVDX,CXINAL,61HANDAL,11111100BTRIG:XORAL,2OUT61H,ALMOVCX,BXDELAY:LOOPDELAYDECDXJNETRIGPOPDXPOPAXRETSOUNDENDP例8.2打印字符的程序段PRT_CHARDATASEGMENTMESSDB‘PRINTERISMORMAL’,0DH,0AHCOUNTEQU$-MESSDATAENDSCSEGSEGMENTMAINPROCFARASSUMECS:CSEG,DS:DATASTART:MOVSI,OFFSETMESSMOVCX,COUNTNEXT:MOVDX,379HWAIT:INAL,DXTESTAL,80HJEWAITMOVAL,[SI]MOVDX,378HOUTDX,ALMOVAL,0DHMOVDX,37AHOUTDX,ALMOVAL,0CHOUTDX,ALINCSILOOPNEXTMOVAH,4CHINT21HMAINENDPCSEGENDSENDSTART例8.3CPU要从3个设备轮流输入数据,PROC1,PROC2,PROC3分别是设备1,设备2和设备3的数据输入程序.它们的状态寄存器的端口地址分别用STAT1,STAT2,STAT3表示,这三个状态寄存器的5位是输入准备好.INPUT:INAL,STAT1TESTAL,20HJZDEV2CALLFARPTRPROC1DEV2:INAL,STAT2TESTAL,20HJZDEV3CALLFARPTRPROC2DEV3:INAL,STAT3TESTAL,20HJZNO_INPUTCALLFARPTRPROC3NO_INPUT:…8.3中断传送方式非屏蔽中断请求中断逻辑INTn指令INTO指令除法错误单步TF=108090A0B0F0E0D0CIR0IR1IR2IR3IR4IR5IR6IR7系统定时器键盘彩色图形接口串行通信接口2串行通信接口1LPT2控制器磁盘控制器LPT1控制器8259A图8.380X86中断源一、8086的中断分类1.软件中断(1)中断指令INT引起的内中断INT20H(2)处理CPU某些错误的中断除法错中断溢出中断INTO(3)为调试程序(DEBUG)设置的中断2.硬件中断(1)非屏蔽中断(2)来自各种外部设备的中断只允许键盘中断,可设置如下中断屏蔽字MOVAL,11111101BOUT21H,AL系统重新增设键盘中断,指令如下:INAL,21HANDAL,11111101BOUT21H,AL设置和清除IF位STICLI打印机软盘硬盘串行通信口一串行通信口二保留键盘定时器(a)中断屏蔽寄存器(I/O端口21H)RSLEOI00L2L1L0(a)中断命令寄存器(I/O端口20H)结束硬件中断的指令:MOVAL,20HOUT20HAL二、中断向量表中断操作的五个步骤类型0中断向量类型1中断向量类型3CH中断向量602000A0类型3FH中断向量……INT3DHMOVCX,300:00000:00040:00F00:00F40:00F8向量地址=3DH*4=0F4H2060A000STIPUSHDSIRET中断处理程序A000:2060…表8.2中断向量表地址分配地址中断型号地址中断类型号0~7F0~1FBIOS中断向量80~FF20~3FDOS中断向100~17F40~5F扩充BIOS中断向量180~19F60~67用户中断向量1A0~1BF68~6F保留1C0~1DF70~77I/O设备中断向量1E0~1FF78~7F保留200~3C380~FDBASIC3C4~3FFF1~FF保留…0:N*4INHAND:IRET…MOVAX,0MOVES,AXMOVBX,N*4MOVAX,OFFSETINTHANDMOVES:WORDPTR[BX],AXMOVAX,SEGINTHANDMOVES:WORDPTR[BX+2],AX……中断向量表使用DOS功能调用(21H)存取中断向量的方法:设置中断向量把由AL指定的中断类型的中断向量DS:DX放在中断向量表中.预置:AH=25HAL=中断向量号执行:INT21H取中断向量把由AL指定的中断类型的中断向量从中断向量表中取到ES:BX中.预置:AH=35HAL=中断向量号执行:INT21H返回时送:ES:BX=中断向量例8.4使用DOS功能调用存取中断向量.INTHAND:…IRETMOVAL,NMOVAH,35HINT21HPUSHESPUSHBXPUSHDSMOVAX,SEGINTHANDMOVDS,AXMOVDX,OFFSETINTHANDMOVAL,NMOVAH,25HINT21HPOPDS…POPDXPOPDSMOVAL,NMOVAH,25HINT21HRET…三、中断过程当中断发生时,由中断机构自动完成下列动作:(1)取中断类型号N(2)标志寄存器内容(FLAGS)入栈(3)当前代码段寄存器(CS)内容入栈(4)当前指令计数器(IP)内容入栈(5)禁止硬件中断和单步中断(IF=0,TF=0)(6)从中断向量表中取4*N的字的内容送IP,取4*N+2中的字内容送CS(7)转中断处理程序………INTHAND:………IRET产生中断1.FLAGS,CS和IP入栈2.清除IF,TF3.转中断处理程序INTHAND中断返回1.IP,CS和FLAGS出栈2.返回断点,继续执行下一条指令INT12H四、中断优先级和中断嵌套8086规定的优先级次序为:软件中断(除法错,溢出,中断指令)非屏蔽中断(NMI)可屏蔽中断(INTR)单步中断高低………..主程序......IR2处理程序.…IR1处理程序...IR4处理程序......IR3处理程序IR2和IR4中断请求STI(EOI)IRETIR3中断请求STI(EOI)IRET(EOI)IRETSTISTI(EOI)IRET开中断IR1中断清除IR2中断清除正常优先级方式下的典型中断序列IR1中断请求五、中断处理程序主程序(1)设置中断向量(2)设置设备的中断屏蔽位(3)设置CPU的中断允许IF位(开中断)硬件(4)外设接口送中断请求给CPU(5)当前指令执行完后,CPU送响应信号给外设接口(6)CPU接收中断类型号(7)当前的FLAGS,CS和IP保存入栈(8)清除IF和TF(9)中断向量送IP和CS例8.5编写一个中断处理程序,要求在主程序运行过程中,每隔10秒钟响铃一次,同时在屏幕上显示出信息“Thebellisring”.MODELSMALL.STACK.DATACOUNTDW1MSGDB‘Thebellisringing!’,0dh,0ah,’$’.CODEMAINPROCFARSTART:MOVAX,@DATAMOVDS,AXMOVAL,1CHMOVAH,35HINT21HPUSHESPUSHBXPUSHDSMOVAX,SEGRINGMOVDS,AXMOVDX,OFFSETRINGMOVAL,1CHMOVAH,25HINT21HPOPDSINAL,21HANDAL,11111110BOUT21H,ALSTIMOVDI,20000DELAY:MOVSI,30000DELAY1:DECSIJNZDELAY1DECDIJNZDELAYRINGPROCNEARPUSHDSPUSHAXPUSHCXPUSHDXMOVAX,@DATAMOVDS,AXSTIDECCOUNTJNZEXITMOVDX,OFFSETMSGMOVAH,09HINT21HMOVDX,100INAL,61HANDAL,0FCHSOUND:XORAL,02OUT61H,ALMOVCX,1400HWAIT1:LOOPWAIT1DECDXJNESOUNDMOVCOUNT,182EXIT:CLIPOPDXPOPCXPOPAXPOPDSRINGENDPENDSTART例8.6在配置了键盘输入(中断类型09)和打印机输出(中断类型0FH)两种外部设备的80X86中断系统中,要求从键盘上接收字符,同时对32字节的输入缓冲区进行测试,如果缓冲区已满,则键盘挂起,(禁止键盘中断输入),有打印机输出一个提示信息..MODELSMALL.STACK.DATAOLD_IP09DW?OLD_CS09DW?OLD_IP0FDW?OLD_CS0FDW?COUNTDW?BUFFERDB20HDUP(‘’)BUF_PDW?START_MSGDB0ah,0dh,’RUN’,0ah,0dh,’$’END_MSGDB0ah,0dh,’END’,0AH,0DH,’$’FULL_MSGDB’Bufferfull’,0AH,0DH,’$’MAINPROCFARSTART:MOVAX,@DATAMOVDS,AX.CODELEAAX,BUFFERMOVBUF_P,AXMOVCOUNT,0MOVAL,09HMOVAH,35HINT21HMOVOLD_CS09,ESMOVOLD_IP09,BXPUSHDSLEADX,KBDINTMOVAX,SEGKBDINTMOVDS,AXMOVAL,09HMOVAH,25HINT21HPOPDSINAL,21HANDAL,0FDHOUT21H,ALMOVAL,0FHMOVAH,35HINT21HMOVOLD_CS0F,ESMOVOLD_IP0F,BXPUSHDSLEADX,PRTINTMOVAX,SEGPRTINTMOVDS,AXMOVAL,0FHMOVAH,25HINT21HPOPDSLEADX,START_MSGMOVAH,09HINT21HSTIMOVDI,20000MAINP:MOVSI,30000MAINP1:DECSIJNZMAINP1DECDIJNZMAINPLEADX,END_MSGMOVAH,09HINT21HMOVDX,OLD_IP09MOVAX,OLD_CS09MOVDS,AXMOVAL,09HMOVAH,25HINT21HPOPDSCLIPUSHDSMOVDX,OLD_IP0FMOVAX,OLD_CS0FMOVDS,AXMOVAL,0FHMOVAH,25HINT21HPOPDSPUSHDSINAL,21HANDAL,0FDHOUT21H,ALSTIMOVAX,4C00HINT21HMAINENDPKDBINTPROCNEARPUSHAXPUSHBXCLDINAL,60HPUSHAXINAL,61HMOVAH,ALORAL,80HOUT61H,ALXCHGAH,ALOUT61H,ALPOPAXTESTAL,80HJNZRETURN1MOVBX,BUF_FMOV[BX],ALCALLDISPLAY_HEXINCBXINCCOUNTMOVBUF_P,BXCHECK:CMPCOUNT,20HJBRETURN1INAL,21HORAL,2ANDAL,7FHOUT21H,ALCALLINIT_PRTRETURN1:CLIMOVAL,20HOUT20H,ALIRETKBDINTENDPPRTINTPROCNEARPUSHAXPUSHBXPUSHDXMOVBX,BUF_PMOVAL,[BX]MOVDX,378HOUTDX,ALPUSHAXMOVAL,1DHMOVDX,37AHOUTDX,ALJMP$+2MOVAL,1CHOUTDX,ALPOPAXINCBXMOVBUF_P,BXCMPAL,0AHJNZRETURN2INAL,21HORAL,80HOUT21H,ALRETURN2:MOVAL,20HOUT20H,ALPOPDXPOPBXPOPAXIRETPRTINTENDPINIT_PRTPROCNEARPUSHAXPUSHBXPUSHDXCLILEABX,FULL_MSGMOVBUF_P,BXMOVAL,0DHMOVDX,378HOUTDX,ALMOVAL,1DHMOVDX,37AHOUTDX,ALJMP$+2MOVAL,1CHOUTDX,ALPOPDXPOPBXPOPAXIRETINIT_PRTENDPDISPLAY_HEXPROCNEARPUSHAXPUSHCXPUSHDXMOVCH,2MOVCL,4NEXTB:ROLAL,CLPUSHAXMOVDL,ALANDDL,0FHORDL,30HCMPDL,3AHJLDISPITADDDL,7DISPIT:MOVAH,2INT21HPOPAXDECCHJNZNEXTBMOVAH,2MOVDL,‘.’INT21HPOPDXPOPBXPOPAXIRETDISPLAY_HEXENDPENDSTART例8.7除数为0时的软件中断.MODELSMALL.STACK.CODEMAINPROCNEARMOVAX,SEGZDIVMOVDS,AXMOVDX,OFFSETZDIVMOVAL,0MOVAH,25HINT21HMOVAX,@CODEMOVDS,AXMOVDX,OK_MSGMOVAH,9

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论