輸入輸出程序設(shè)計(jì)_第1頁
輸入輸出程序設(shè)計(jì)_第2頁
輸入輸出程序設(shè)計(jì)_第3頁
輸入輸出程序設(shè)計(jì)_第4頁
輸入輸出程序設(shè)計(jì)_第5頁
已閱讀5頁,還剩20頁未讀 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡介

第8章輸入輸出程序設(shè)計(jì)8.1I/O設(shè)備的數(shù)據(jù)傳送方式一、CPU與外設(shè)控制信息狀態(tài)信息數(shù)據(jù)信息二、直接存儲(chǔ)器存取(DMA)方式系統(tǒng)完成DMA傳送的步驟如下:(1)DMA控制器向CPU發(fā)出HOLD信號(hào),請(qǐng)求使用總線.(2)CPU發(fā)出響應(yīng)信號(hào)HOLD給DMA控制器,并將總線讓出.(3)傳輸數(shù)據(jù)的存儲(chǔ)器地址通過地址總線發(fā)出.(4)傳輸?shù)臄?shù)據(jù)字節(jié)通過數(shù)據(jù)總線進(jìn)行傳輸.(5)地址寄存器增1,以便指向下一個(gè)要傳送的字節(jié).(6)字節(jié)計(jì)數(shù)器減1.(7)若字節(jié)計(jì)數(shù)器非0,轉(zhuǎn)向第3步.(8)否則,DMA控制器撤消總線請(qǐng)求信號(hào)HOLD,傳送結(jié)束8.2程序直接控制I/O方式一、I/O端口I/O地址功能I/O地址功能00~0FDMA控制器8237A20~3F可編程中斷控制器8259A40~5F可編程中斷計(jì)時(shí)器60~638255APPI70~71CMOSRAM81~8FDMA頁表地址寄存器93~9FDMA控制器A0~A1可編程中斷控制器2C0~CEDMA通道,傳輸?shù)刂芳拇嫫鱂0~FF協(xié)處理器170~1F7硬盤控制器200~20F游戲控制端口278~27A3號(hào)并行口(LPT2打印機(jī))2E0~2E3EGA/VGA使用2F8~2FE2號(hào)串行口(COM2)320~324硬盤適配器366~36FPC網(wǎng)絡(luò)372~377軟盤適配器378~37A2號(hào)并行口(LPT1打印機(jī))380~38FSDLC及BSC通信390~393Cluster適配器3A0~3AFBSC通信3B0~3BFMDA視頻寄存器3BC~3BE1號(hào)并行口3C0~3CFEGA/VGA視頻寄存器3D0~3D7CGA視頻寄存器3F0~3F7軟盤控制寄存器3F8~3FE1號(hào)串行口(COM1)表8.1I/O端口地址分配二、I/O指令I(lǐng)NAL,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發(fā)聲子程序SOUND1/0076543210控制其他外部設(shè)備2號(hào)定時(shí)器門控&放大器程序如下: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個(gè)設(shè)備輪流輸入數(shù)據(jù),PROC1,PROC2,PROC3分別是設(shè)備1,設(shè)備2和設(shè)備3的數(shù)據(jù)輸入程序.它們的狀態(tài)寄存器的端口地址分別用STAT1,STAT2,STAT3表示,這三個(gè)狀態(tài)寄存器的5位是輸入準(zhǔn)備好.INPUT:INAL,STAT1TESTAL,20HJZDEV2CALLFARPTRPROC1DEV2:INAL,STAT2TESTAL,20HJZDEV3CALLFARPTRPROC2DEV3:INAL,STAT3TESTAL,20HJZNO_INPUTCALLFARPTRPROC3NO_INPUT:…8.3中斷傳送方式非屏蔽中斷請(qǐng)求中斷邏輯INTn指令I(lǐng)NTO指令除法錯(cuò)誤單步TF=108090A0B0F0E0D0CIR0IR1IR2IR3IR4IR5IR6IR7系統(tǒng)定時(shí)器鍵盤彩色圖形接口串行通信接口2串行通信接口1LPT2控制器磁盤控制器LPT1控制器8259A圖8.380X86中斷源一、8086的中斷分類1.軟件中斷(1)中斷指令I(lǐng)NT引起的內(nèi)中斷INT20H(2)處理CPU某些錯(cuò)誤的中斷除法錯(cuò)中斷溢出中斷INTO(3)為調(diào)試程序(DEBUG)設(shè)置的中斷2.硬件中斷(1)非屏蔽中斷(2)來自各種外部設(shè)備的中斷只允許鍵盤中斷,可設(shè)置如下中斷屏蔽字MOVAL,11111101BOUT21H,AL系統(tǒng)重新增設(shè)鍵盤中斷,指令如下:INAL,21HANDAL,11111101BOUT21H,AL設(shè)置和清除IF位STICLI打印機(jī)軟盤硬盤串行通信口一串行通信口二保留鍵盤定時(shí)器(a)中斷屏蔽寄存器(I/O端口21H)RSLEOI00L2L1L0(a)中斷命令寄存器(I/O端口20H)結(jié)束硬件中斷的指令:MOVAL,20HOUT20HAL二、中斷向量表中斷操作的五個(gè)步驟類型0中斷向量類型1中斷向量類型3CH中斷向量602000A0類型3FH中斷向量……INT3DHMOVCX,300:00000:00040:00F00:00F40:00F8向量地址=3DH*4=0F4H2060A000STIPUSHDSIRET中斷處理程序A000:2060…表8.2中斷向量表地址分配地址中斷型號(hào)地址中斷類型號(hào)0~7F0~1FBIOS中斷向量80~FF20~3FDOS中斷向100~17F40~5F擴(kuò)充BIOS中斷向量180~19F60~67用戶中斷向量1A0~1BF68~6F保留1C0~1DF70~77I/O設(shè)備中斷向量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功能調(diào)用(21H)存取中斷向量的方法:設(shè)置中斷向量把由AL指定的中斷類型的中斷向量DS:DX放在中斷向量表中.預(yù)置:AH=25HAL=中斷向量號(hào)執(zhí)行:INT21H取中斷向量把由AL指定的中斷類型的中斷向量從中斷向量表中取到ES:BX中.預(yù)置:AH=35HAL=中斷向量號(hào)執(zhí)行:INT21H返回時(shí)送:ES:BX=中斷向量例8.4使用DOS功能調(diào)用存取中斷向量.INTHAND:…IRETMOVAL,NMOVAH,35HINT21HPUSHESPUSHBXPUSHDSMOVAX,SEGINTHANDMOVDS,AXMOVDX,OFFSETINTHANDMOVAL,NMOVAH,25HINT21HPOPDS…POPDXPOPDSMOVAL,NMOVAH,25HINT21HRET…三、中斷過程當(dāng)中斷發(fā)生時(shí),由中斷機(jī)構(gòu)自動(dòng)完成下列動(dòng)作:(1)取中斷類型號(hào)N(2)標(biāo)志寄存器內(nèi)容(FLAGS)入棧(3)當(dāng)前代碼段寄存器(CS)內(nèi)容入棧(4)當(dāng)前指令計(jì)數(shù)器(IP)內(nèi)容入棧(5)禁止硬件中斷和單步中斷(IF=0,TF=0)(6)從中斷向量表中取4*N的字的內(nèi)容送IP,取4*N+2中的字內(nèi)容送CS(7)轉(zhuǎn)中斷處理程序………INTHAND:………IRET產(chǎn)生中斷1.FLAGS,CS和IP入棧2.清除IF,TF3.轉(zhuǎn)中斷處理程序INTHAND中斷返回1.IP,CS和FLAGS出棧2.返回?cái)帱c(diǎn),繼續(xù)執(zhí)行下一條指令I(lǐng)NT12H四、中斷優(yōu)先級(jí)和中斷嵌套8086規(guī)定的優(yōu)先級(jí)次序?yàn)?軟件中斷(除法錯(cuò),溢出,中斷指令)非屏蔽中斷(NMI)可屏蔽中斷(INTR)單步中斷高低………..主程序......IR2處理程序.…IR1處理程序...IR4處理程序......IR3處理程序IR2和IR4中斷請(qǐng)求STI(EOI)IRETIR3中斷請(qǐng)求STI(EOI)IRET(EOI)IRETSTISTI(EOI)IRET開中斷IR1中斷清除IR2中斷清除正常優(yōu)先級(jí)方式下的典型中斷序列IR1中斷請(qǐng)求五、中斷處理程序主程序(1)設(shè)置中斷向量(2)設(shè)置設(shè)備的中斷屏蔽位(3)設(shè)置CPU的中斷允許IF位(開中斷)硬件(4)外設(shè)接口送中斷請(qǐng)求給CPU(5)當(dāng)前指令執(zhí)行完后,CPU送響應(yīng)信號(hào)給外設(shè)接口(6)CPU接收中斷類型號(hào)(7)當(dāng)前的FLAGS,CS和IP保存入棧(8)清除IF和TF(9)中斷向量送IP和CS例8.5編寫一個(gè)中斷處理程序,要求在主程序運(yùn)行過程中,每隔10秒鐘響鈴一次,同時(shí)在屏幕上顯示出信息“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)和打印機(jī)輸出(中斷類型0FH)兩種外部設(shè)備的80X86中斷系統(tǒng)中,要求從鍵盤上接收字符,同時(shí)對(duì)32字節(jié)的輸入緩沖區(qū)進(jìn)行測(cè)試,如果緩沖區(qū)已滿,則鍵盤掛起,(禁止鍵盤中斷輸入),有打印機(jī)輸出一個(gè)提示信息..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除數(shù)為0時(shí)的軟件中斷.MODELSMALL.STACK.CODEMAINPROCNEARMOVAX,SEGZDIVMOVDS,AXMOVDX,OFFSETZDIVMOVAL,0MOVAH,25HINT21HMOVAX,@CODEMOVDS,AXMOVDX,OK_MSGMOVAH,9

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。

評(píng)論

0/150

提交評(píng)論