版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領
文檔簡介
8086/8088和ARM核匯編語言程序設計第6章輸入/輸出程序設計
教學要求
1.了解I/O設備的數據傳送方式
2.掌握I/O程序的設計方法2/3/20231第1章匯編語言基礎知識6章輸入/輸出程序設計6.1輸入/輸出指令6.2CPU與外設傳送數據的控制方式6.3程序查詢傳送方式第6章輸入/輸出程序設計
6.4中斷傳送方式
2/3/20232第1章匯編語言基礎知識6章輸入/輸出程序設計中央處理機
CPU總線控制邏輯接口接口存儲器大容量存儲器I/O設備I/O子系統(tǒng)系統(tǒng)總線......2/3/20233第1章匯編語言基礎知識6章輸入/輸出程序設計為什么需要I/O接口(電路)?微機的外部設備多種多樣工作原理、驅動方式、信息格式、以及工作速度方面彼此差別很大它們不能與CPU直接相連必須經過中間電路再與系統(tǒng)相連這部分電路被稱為I/O接口電路多種外設2/3/20234第1章匯編語言基礎知識6章輸入/輸出程序設計多種多樣的外設工作原理不同機械、電子、機電、電磁……傳送信息類型多樣數字量、模擬量、開關量傳送速度差別極大傳送方式不盡相同串行、并行編碼方式不同二進制、BCD碼、ASCII碼……返回2/3/20235第1章匯編語言基礎知識6章輸入/輸出程序設計什么是I/O接口(電路)?I/O接口是位于系統(tǒng)與外設間、用來協(xié)助完成數據傳送和控制任務的邏輯電路PC機系統(tǒng)板的可編程接口芯片、I/O總線槽的電路板(適配器)都是接口電路CPU接口電路
I/O設備2/3/20236第1章匯編語言基礎知識6章輸入/輸出程序設計控制總線CB地址總線ABI/O接口電路數據控制狀態(tài)數據總線DBCPU外設控制寄存器狀態(tài)寄存器數據寄存器2/3/20237第1章匯編語言基礎知識6章輸入/輸出程序設計6.1.1I/O端口編址方式
6.1輸入/輸出指令(1)統(tǒng)一編址:
I/O地址空間獨立于存儲地址空間如8086/8088(2)獨立編址: 它們共享一個地址空間 如M6800接口電路占用的I/O端口有兩類編排形式2/3/20238第1章匯編語言基礎知識6章輸入/輸出程序設計第6章:⑴I/O端口單獨編址優(yōu)點:I/O端口的地址空間獨立控制和地址譯碼電路相對簡單專門的I/O指令使程序清晰易讀缺點:I/O指令沒有存儲器指令豐富內存空間I/O空間FFFFF0FFFF80x86采用I/O端口獨立編址2/3/20239第1章匯編語言基礎知識6章輸入/輸出程序設計第6章:⑵I/O端口與存儲器統(tǒng)一編址優(yōu)點:不需要專門的I/O指令I/O數據存取與存儲器數據存取一樣靈活缺點:I/O端口要占去部分存儲器地址空間程序不易閱讀(不易分清訪存和訪問外設)內存部分I/O部分存儲器空間00000FFFFF2/3/202310第1章匯編語言基礎知識6章輸入/輸出程序設計6.1.2輸入/輸出指令
6.1輸入/輸出指令輸入指令(IN:將外設數據傳送給CPU內的AL/AX)INAL,PORT ;字節(jié)輸入INAL,DX ;字節(jié)輸入INAX,PORT ;字輸入INAX,DX ;字輸入輸出指令(OUT:將CPU內的AL/AX數據傳送給外設)OUTPORT,AL ;字節(jié)輸出OUTDX,AL ;字節(jié)輸出OUTPORT,AX ;字輸出OUTDX,AX ;字輸出2/3/202311第1章匯編語言基礎知識6章輸入/輸出程序設計8088/8086的端口有64K個,無需分段,設計有兩種尋址方式直接尋址:只用于尋址00H~FFH前256個端口,操作數i8表示端口號間接尋址:可用于尋址全部64K個端口,DX寄存器的值就是端口號對大于FFH的端口只能采用間接尋址方式2/3/202312第1章匯編語言基礎知識6章輸入/輸出程序設計第6章:IN指令實例(從20H端口輸入一個字);方法1:直接尋址,字量輸入
inax,20h;方法2:間接尋址,字量輸入
movdx,20h
inax,dx2/3/202313第1章匯編語言基礎知識6章輸入/輸出程序設計第6章:OUT指令實例(向300H端口輸出一個字節(jié));唯一的方法:間接尋址,字節(jié)量輸出
mov
al,bvar
;bvar是字節(jié)變量
movdx,300h
outdx,al2/3/202314第1章匯編語言基礎知識6章輸入/輸出程序設計6.1.3
I/O端口尋址方式
6.1輸入/輸出指令1.直接I/O端口尋址方式這種尋址方式就是直接書寫端口地址,由于這種尋址方式的指令編碼是兩字節(jié)的,其中第一字節(jié)是操作碼,第二字節(jié)存放端口地址。所以這種尋址方式僅能對256個8位或16位端進行輸入/輸出。例如:
INAL,nINAX,nOUTn,ALOUTn,AX其中,n=0~255
2/3/202315第1章匯編語言基礎知識6章輸入/輸出程序設計6.1.3
I/O端口尋址方式
6.1輸入/輸出指令
2.間接I/O端口尋址方式這種尋址方式是用寄存器DX表示端口地址。采用這種尋址方式的輸入/輸出指令是單字節(jié)編碼。由于DX是16位寄存器,所以這種尋址方式可對0~65535個端口地址進行訪問:
INAL,DXINAX,DXOUT
DX,ALOUTDX,AX在程序設計中,這種尋址方式比較靈活。因為在程序中,只要修改DX的內容就可以用同一條輸入/輸出指令去訪問不同的端口,實現可變端口的輸入/輸出。2/3/202316第1章匯編語言基礎知識6章輸入/輸出程序設計6.1輸入/輸出指令6.3程序查詢傳送方式第6章輸入/輸出程序設計
6.4中斷傳送方式
6.2CPU與外設傳送數據的控制方式
2/3/202317第1章匯編語言基礎知識6章輸入/輸出程序設計6.2CPU與外設傳送數據的控制方式主機與外設之間的數據傳送(控制)方式有:●程序查詢傳送方式●程序中斷傳送方式●直接存儲器存取(DMA)方式●
I/O處理機方式(簡稱IOP協(xié)處理機方式)。2/3/202318第1章匯編語言基礎知識6章輸入/輸出程序設計1.查詢方式CPU需要先了解(查詢)外設的工作狀態(tài),然后在外設可以交換信息的情況下(就緒)實現數據輸入或輸出對多個外設的情況,則CPU按一定順序依次查詢(輪詢)。先查詢的外設將優(yōu)先進行數據交換查詢傳送的特點是:工作可靠,適用面寬,但傳送效率低2/3/202319第1章匯編語言基礎知識6章輸入/輸出程序設計查詢傳送的兩個環(huán)節(jié)⑴查詢環(huán)節(jié)尋址狀態(tài)口讀取狀態(tài)寄存器的標志位若不就緒就繼續(xù)查詢,直至就緒⑵傳送環(huán)節(jié)尋址數據口是輸入,通過輸入指令從數據端口讀入數據是輸出,通過輸出指令向數據端口輸出數據輸入狀態(tài)就緒?數據交換YN流程2/3/202320第1章匯編語言基礎知識6章輸入/輸出程序設計2.程序中斷傳送方式CPU在執(zhí)行程序中,被內部或外部的事件所打斷,轉去執(zhí)行一段預先安排好的中斷服務程序;服務結束后,又返回原來的斷點,繼續(xù)執(zhí)行原來的程序2/3/202321第1章匯編語言基礎知識6章輸入/輸出程序設計主程序與中斷服務程序主程序對外設進行處理IRET中斷服務程序斷點中斷請求中斷請求可以來自處理器外部的中斷源,也可以由處理器執(zhí)行指令引起:例如執(zhí)行INTi8指令。繼續(xù)執(zhí)行流程2/3/202322第1章匯編語言基礎知識6章輸入/輸出程序設計第6章:
中斷傳送中斷傳送是一種效率更高的程序傳送方式進行傳送的中斷服務程序是預先設計好的中斷請求是外設隨機向CPU提出的CPU對請求的檢測是有規(guī)律的:一般是在每條指令的最后一個時鐘周期采樣中斷請求輸入引腳本書主要論述中斷在輸入和輸出方面的應用中斷還有著非常廣泛的應用2/3/202323第1章匯編語言基礎知識6章輸入/輸出程序設計3.直接存儲器存取(DMA)傳送方式希望克服程序控制傳送的不足:外設→CPU→存儲器外設←CPU←存儲器直接存儲器存取DMA:外設→存儲器外設←存儲器CPU釋放總線,由DMA控制器管理2/3/202324第1章匯編語言基礎知識6章輸入/輸出程序設計第6章:DMA傳送的工作過程⑴CPU對DMA控制器進行初始化設置⑵外設、DMAC和CPU三者通過應答信號建立聯(lián)系:CPU將總線交給DMAC控制⑶DMA傳送DMA讀存儲器:存儲器→外設DMA寫存儲器:存儲器←外設⑷自動增減地址和計數,判斷傳送完成否2/3/202325第1章匯編語言基礎知識6章輸入/輸出程序設計第6章:DMA傳送流程HLDA發(fā)存儲器地址傳送數據傳送結束?DMA結束修改地址指針流程2/3/202326第1章匯編語言基礎知識6章輸入/輸出程序設計第6章:傳送方式的比較無條件傳送:慢速外設需與CPU保持同步查詢傳送:簡單實用,效率較低中斷傳送:外設主動,可與CPU并行工作,但每次傳送需要大量額外時間開銷DMA傳送:DMAC控制,外設直接和存儲器進行數據傳送,適合大量、快速數據傳送2/3/202327第1章匯編語言基礎知識6章輸入/輸出程序設計6.2CPU與外設傳送數據的控制方式圖6.2主機與外設間傳送的信息2/3/202328第1章匯編語言基礎知識6章輸入/輸出程序設計C
P
U打
印
機
控
制
器打印機DBSTBBUSYCB
DB
AB圖
打印機連接示意圖
【例】向打印機輸出字符。6.2CPU與外設傳送數據的控制方式2/3/202329第1章匯編語言基礎知識6章輸入/輸出程序設計6.1輸入/輸出指令第6章輸入/輸出程序設計
6.4中斷傳送方式
6.2CPU與外設傳送數據的控制方式
6.3程序查詢傳送方式
第十八講2/3/202330第1章匯編語言基礎知識6章輸入/輸出程序設計6.3程序查詢傳送方式
問題分析:發(fā)送給打印機的字符,暫存于控制器中的數據鎖存器。打印機的狀態(tài)存放在控制器的緩沖器中,使用查詢方式控制打印過程時,在每把一個字符送到控制器后,都要先查詢打印機的狀態(tài)信息是否為忙(BUSY為0)。如不忙,則發(fā)送選通信號,啟動打印機取走字符并打印。若為忙,則重新查詢,直到不忙時為止。例6.1
輸出字符至打印機。設打印機控制器有3個端出:數據端口的端口地址為378H,狀態(tài)端口地址為379H,控制端口地址為37AH。在PC機中,打印機通過打印控制器與CPU連接。2/3/202331第1章匯編語言基礎知識6章輸入/輸出程序設計程序如下:
MOVBX,OFFSETBUFFERMOVCX,COUNTBG:MOVAL,[BX];取字符
MOVDX,378HOUTDX,AL
;輸出字符到控制器
MOVDX,379HWT:INAL,DX;讀入打印機狀態(tài)
TESTAL,80H;判忙否
JZWT
MOVDX,37AHMOVAL,0DH;令打印機打印字符
OUTDX,ALMOVAL,0CHOUTDX,ALINCBX;指向下一個輸出字符
LOOPBG6.3程序查詢傳送方式
2/3/202332第1章匯編語言基礎知識6章輸入/輸出程序設計第6章:例2:采用查詢方式的打印字符程序BUSY
DATA0~78255APC7PC2PA0~PA7打印機STROBE2/3/202333第1章匯編語言基礎知識6章輸入/輸出程序設計第6章:打印機接口的信號與時序BUSYDATA0~7ACKSTROBE主機把數據送給引腳DATA0~DATA7同時送出數據選通信號STROBE*打印機在BUSY信號線上發(fā)出忙信號打印機處理好輸入的數據時撤消忙信號同時又送出一個響應信號ACK*2/3/202334第1章匯編語言基礎知識6章輸入/輸出程序設計第6章:例2:(續(xù));8255A初始化
mov
dx,0fffeh
;控制端口地址:FFFEH
moval,10000001b
;方式控制字:91H
outdx,al
;A端口方式0輸出,C端口上輸出、下輸入
moval,00001111b;端口C的復位置位控制字,使PC7=1
outdx,al;打印子程序:查詢Printcproc
pushaxpushdxprn:mov
dx,0fffch
;讀取端口C
inal,dx
;查詢打印機狀態(tài)
andal,04h
;PC2=BUSY=0?
jnz
prn
;PC2=1,打印機忙,則循環(huán)等待2/3/202335第1章匯編語言基礎知識6章輸入/輸出程序設計第6章:例2:(續(xù));打印子程序:輸出
mov
dx,0fff8h
;PC2=0,打印機不忙,則輸出數據
moval,ahoutdx,al;將打印數據從端口A輸出
:打印子程序:打印
mov
dx,0fffeh
;從PC7送出控制低脈沖
moval,00001110B
;置STROBE*=0outdx,al
nop
;產生一定寬度的低電平
nop
moval,00001111B
;置STROBE*=1outdx,al;最終,STROBE*產生低脈沖信號
popdxpopaxretprintc
endp2/3/202336第1章匯編語言基礎知識6章輸入/輸出程序設計問題分析:為了采集具有8個模擬量輸入的數據,通過端口4的低3位的值選通模擬量IN0,IN1至IN7中的一個,使其通過多路開關把一個被選擇的模擬量送至A/D轉換器。
A/D轉換器的啟停則由端口4的D4位加以控制,若D4=1,則啟動A/D轉換器進行轉換;若D4=0,使A/D轉換器停止轉換。
A/D轉換器的狀態(tài)信號EOC是由端口2的D0位輸入CPU的,A/D轉換后的數字量由端口3送入CPU。因此,端口4為控制端口,端口2為狀態(tài)端口,端口3為數據端口。6.3程序查詢傳送方式
例6.2采用程序查詢的數據采集程序。2/3/202337第1章匯編語言基礎知識6章輸入/輸出程序設計6.3程序查詢傳送方式
DATASEGMENTBUFFDB8DUP(?)DATAENDSCODESEGMENTASSUMECS:CODE,DS:DATASTART:MOVAX,DATAMOVDS,AXMOVDL,10H;設置AD啟動轉換
MOVDI,OFFSETBUFF;DI指向輸入緩沖區(qū)
MOVCX,8AGAIN:MOVAL,DLANDAL,0EFH;使端口4的D4為0OUT4,AL;停止A/D轉換
CALLDELAY;延時等待A/D停止操作
MOVAL,DLOUT4,AL
程序如下所示。2/3/202338第1章匯編語言基礎知識6章輸入/輸出程序設計6.3程序查詢傳送方式
A1:INAL,2;讀入狀態(tài)
TESTAL,01H;將EOC送CFJZA1;為0,則未推備好
INAL,3;讀入一個A/D轉換值
MOV[DI],AL INCDI INCDL;選擇下一個模擬量
LOOPAGAIN MOVAH,4CH INT21H CODEENDSENDSTART2/3/202339第1章匯編語言基礎知識6章輸入/輸出程序設計6.1輸入/輸出指令6.3程序查詢傳送方式第6章輸入/輸出程序設計
6.2CPU與外設傳送數據的控制方式
6.4中斷傳送方式
2/3/202340第1章匯編語言基礎知識6章輸入/輸出程序設計6.4中斷傳送方式
8088的中斷系統(tǒng)采用向量中斷機制能夠處理256個中斷用中斷向量號0~255區(qū)別可屏蔽中斷還需要借助專用中斷控制器Intel8259A實現優(yōu)先權管理2/3/202341第1章匯編語言基礎知識6章輸入/輸出程序設計6.48086的中斷分類非屏蔽中斷源中斷邏輯INTO指令單步中斷除法錯誤INTN指令CPUINTRNMI可屏蔽中斷源8259A中斷控制器IR0IR1IR2IR3IR4IR5IR6IR7外設中斷源
INTA內部中斷除法錯中斷指令中斷溢出中斷單步中斷外部中斷非屏蔽中斷可屏蔽中斷2/3/202342第1章匯編語言基礎知識6章輸入/輸出程序設計1.內部中斷內部中斷是由于8088內部執(zhí)行程序出現異常引起的程序中斷利用內部中斷,微處理器為用戶提供了發(fā)現、調試并解決程序執(zhí)行時異常情況的有效途徑例如,ROM-BIOS和DOS系統(tǒng)利用內部中斷為程序員提供了各種功能調用2/3/202343第1章匯編語言基礎知識6章輸入/輸出程序設計⑴
除法錯中斷在執(zhí)行除法指令時,若除數為0或商超過了寄存器所能表達的范圍,則產生一個向量號為0的內部中斷,稱為除法錯中斷例如:movbl,0idiv
bl
;除數BL=0,產生除法錯中斷movax,200hmovbl,1divbl
;商=200H,不能用AL表達 ;產生除法錯中斷2/3/202344第1章匯編語言基礎知識6章輸入/輸出程序設計⑵
指令中斷在執(zhí)行中斷調用指令INTn時產生的一個向量號為n(0~255)的內部中斷,稱為指令中斷其中向量號為3的指令中斷比較特別(生成一個字節(jié)的指令代碼:11001100),常用于程序調試,被稱為斷點中斷例如:DEBUG.EXE調試程序的運行命令G設置的斷點,就是利用INT3指令實現的2/3/202345第1章匯編語言基礎知識6章輸入/輸出程序設計⑶
溢出中斷在執(zhí)行溢出中斷指令INTO時,若溢出標志OF為1,則產生一個向量號為4的內部中斷,被稱為溢出中斷例如:movax,2000haddax,7000h
;2000H+7000H=9000H,溢出:OF=1into ;因為OF=1,所以產生溢出中斷2/3/202346第1章匯編語言基礎知識6章輸入/輸出程序設計⑷
單步中斷若單步中斷TF為1,則在每條指令執(zhí)行結束后產生一個向量號為1的內部中斷,稱為單步中斷例如:DEBUG.EXE調試程序的單步命令T就利用單步中斷實現對程序的單步調試2/3/202347第1章匯編語言基礎知識6章輸入/輸出程序設計2.外部中斷外部中斷是由于8088外部提出中斷請求引起的程序中斷利用外部中斷,微機系統(tǒng)可以實時響應外部設備的數據傳送請求,能夠及時處理外部意外或緊急事件外部中斷的原因是處理器外部隨機產生的,所以是真正的中斷(Interrupt)內部中斷的原因是處理器執(zhí)行程序出現異常,所以經常被稱為異常(Exception)2/3/202348第1章匯編語言基礎知識6章輸入/輸出程序設計⑴
非屏蔽中斷通過非屏蔽中斷請求信號向微處理器提出的中斷請求,微處理器無法禁止,將在當前指令執(zhí)行結束予以響應,這個中斷被稱為非屏蔽中斷8088的非屏蔽中斷的向量號為2,非屏蔽中斷請求信號為NMI非屏蔽中斷主要用于處理系統(tǒng)的意外或故障。例如:電源調電前的數據保護存儲器讀寫錯誤的處理2/3/202349第1章匯編語言基礎知識6章輸入/輸出程序設計⑵
可屏蔽中斷外部通過可屏蔽中斷請求信號向微處理器提出的中斷,微處理器在允許可屏蔽中斷的條件下,在當前指令執(zhí)行結束予以響應,同時輸出可屏蔽中斷響應信號,這個中斷就是可屏蔽中斷8088的可屏蔽中斷請求和響應信號分別是INTR和INTA*;由IF標志控制可屏蔽中斷是否允許響應;向量號來自外部中斷控制器8088通常需要配合中斷控制器8259A共同處理可屏蔽中斷可屏蔽中斷主要用于主機與外設交換數據2/3/202350第1章匯編語言基礎知識6章輸入/輸出程序設計第6章:中斷標志IF的狀態(tài)IF=0:可屏蔽中斷不會被響應關中斷、禁止中斷、中斷屏蔽系統(tǒng)復位,使IF=0任何一個中斷被響應,使IF=0執(zhí)行指令CLI,使IF=0IF=1:可屏蔽中斷會被響應開中斷、允許中斷、中斷開放執(zhí)行指令STI,使IF=1執(zhí)行指令IRET恢復原IF狀態(tài)明確IF標志的狀態(tài)是關鍵2/3/202351第1章匯編語言基礎知識6章輸入/輸出程序設計第6章:8088的中斷向量表中斷向量:中斷服務程序的入口地址(首地址)邏輯地址含有段地址CS和偏移地址IP(32位)每個中斷向量的低字是偏移地址、高字是段地址,需占用4個字節(jié)8088微處理器從物理地址000H開始,依次安排各個中斷向量,向量號也從0開始256個中斷占用1KB區(qū)域,就形成中斷向量表向量號為N的中斷向量的物理地址=N×42/3/202352第1章匯編語言基礎知識6章輸入/輸出程序設計第6章:
中斷過程NMIN軟件中斷INTRTF=1中斷響應周期讀中斷向量號下條指令現行指令IF=1NNNNYYYYY查詢中斷的順序,決定了各種中斷源的優(yōu)先權軟件中斷除法錯中斷指令中斷溢出中斷非屏蔽中斷可屏蔽中斷單步中斷高低2/3/202353第1章匯編語言基礎知識6章輸入/輸出程序設計第6章:中斷過程(續(xù))Y還有NMITEMP=1標志寄存器入棧TEMP=TF,IF=TF=0CS:IP入棧獲取中斷向量執(zhí)行服務程序彈出CS:IP彈出標志寄存器返回被中斷程序(1)(2)(3)(4)(5)NNY(6)8088各種中斷源的優(yōu)先權,實際上是指被識別出來的先后多種中斷同時請求時,最先響應的則可能是單步中斷或NMI中斷2/3/202354第1章匯編語言基礎知識6章輸入/輸出程序設計第6章:
內部中斷服務程序編寫內部中斷服務程序與編寫子程序類似利用過程定義偽指令PROC/ENDP第1條指令通常為開中斷指令STI最后用中斷返回指令IRET通常采用寄存器傳遞參數主程序需要調用中斷服務程序調用前,需要設置中斷向量設置必要的入口參數利用INTn指令調用中斷服務程序處理出口參數2/3/202355第1章匯編語言基礎知識6章輸入/輸出程序設計第6章:例1:內部中斷服務程序編寫80H號中斷服務程序,并調用功能:具有顯示以“0”結尾字符串的功能,利用顯示器功能調用INT10H實現字符顯示字符串緩沖區(qū)首地址為入口參數:
DS:DX(段地址:偏移地址)傳遞參數2/3/202356第1章匯編語言基礎知識6章輸入/輸出程序設計第6章:例1:的數據段;數據段intoff
dw? ;用于保存偏移地址intseg
dw? ;用于保存段基地址intmsg db‘AInstructionInterrupt!’,0dh,0ah,0以“0”結尾回車、換行2/3/202357第1章匯編語言基礎知識6章輸入/輸出程序設計第6章:例1:的獲取原中斷向量;代碼段movax,3580h ;利用DOS功能35H號int21h ;獲取原80H中斷向量mov
intoff,bx
;保存偏移地址mov
intseg,es
;保存段基地址獲取中斷向量(DOS功能調用INT21H)功能號:AH=35H入口參數:AL=中斷向量號出口參數:ES:BX=中斷向量(段地址:偏移地址)2/3/202358第1章匯編語言基礎知識6章輸入/輸出程序設計第6章:例1:的設置新中斷向量pushdsmov
dx,offsetnew80h ;取中斷程序偏移地址mov
ax,segnew80h ;取中斷程序段地址mov
ds,axmovax,2580hint21hpopds設置中斷向量(DOS功能調用INT21H)功能號:AH=25H入口參數:AL=中斷向量號DS:DX=中斷向量(段地址:偏移地址)說明:也可以按照課本的方法來設置自己的中斷功能。2/3/202359第1章匯編語言基礎知識6章輸入/輸出程序設計第6章:例1:的中斷調用;設置入口參數: DS=段地址(已設置)
DX=偏移地址mov
dx,offset
intmsg
int80h
;調用80H中斷服務程序AInstructionInterrupt!程序功能2/3/202360第1章匯編語言基礎知識6章輸入/輸出程序設計第6章:例1:的主程序返回mov
dx,intoff
;恢復原中斷向量mov
ax,intsegmov
ds,ax
;改變DSmovax,2580hint21h ;因緊接著返回DOSmovax,4c00h ;故無需恢復DSint21h設置中斷向量(DOS功能調用INT21H)功能號:AH=25H入口參數:AL=中斷向量號DS:DX=中斷向量(段地址:偏移地址)2/3/202361第1章匯編語言基礎知識6章輸入/輸出程序設計第6章:例1:的中斷服務程序(1);80H號內部中斷服務程序:;顯示字符串(以“0”結尾);入口參數:DS:DX=緩沖器首地址new80h proc
;過程定義
sti
;開中斷
pushax
;保護寄存器
pushbx pushsi2/3/202362第1章匯編語言基礎知識6章輸入/輸出程序設計第6章:例1:的中斷服務程序(2)
mov
si,dxnew1: mov
al,[si] ;讀取欲一個顯示字符
cmpal,0 ;為結尾“0”,則結束
jznew2
movbx,0 ;采用ROM-BIOS功能調用
movah,0eh
int10h incsi
;準備顯示下一個字符
jmpnew12/3/202363第1章匯編語言基礎知識6章輸入/輸出程序設計第6章:例1:的中斷服務程序(3)new2: popsi
;恢復寄存器
popbx popax
iret
;中斷返回new80h endp
;過程(中斷服務程序)結束AInstructionInterrupt!程序功能2/3/202364第1章匯編語言基礎知識6章輸入/輸出程序設計6.4中斷傳送方式
6.4.1中斷的概念
1.中斷的引入中斷功能已經成為計算機不可缺少的組成部分。中斷的引入具有較多的優(yōu)點:(1)分時操作(2)實現實時處理(3)故障處理2/3/202365第1章匯編語言基礎知識6章輸入/輸出程序設計3.中斷系統(tǒng)的功能6.4中斷傳送方式
6.4.1中斷的概念實現中斷及返回(2)實現優(yōu)先級處理(3)中斷嵌套2.中斷源引起中斷的原因或能發(fā)出中斷申請的來源,稱為中斷源。通常中斷源有以下4種:(1)輸入/輸出設備(2)實時時鐘(3)故障源(4)為調試程序而設置的中斷源2/3/202366第1章匯編語言基礎知識6章輸入/輸出程序設計6.4中斷傳送方式
6.4.28088/8086中斷系統(tǒng)
1.中斷源非屏蔽中斷請求中斷邏輯軟中斷溢出中斷單步中斷除法錯誤2n014CPUNMIIR00IR10IR20IR30IR40IR50IR60IR70825908系統(tǒng)定時器09鍵盤0ACRT0B保留(通訊)0C串行通訊0D保留(ALT)0E軟盤0F保留(打印機)INTR2/3/202367第1章匯編語言基礎知識6章輸入/輸出程序設計8086中斷的分類:內部中斷和硬件中斷(1)內部中斷內部中斷簡稱內中斷,又稱軟件中斷。它不需要外部硬件支持。并且不受中斷標志位狀態(tài)的影響。8086/8088內部中斷有以下5種:
除數為0中斷——類型0中斷
溢出中斷——類型4中斷單步中斷——類型1中斷
斷點中斷——類型3中斷
中斷指令——指令INTn中斷由cpu的某些錯誤引起為調試程序而設置的中斷6.4中斷傳送方式
6.4.28088/8086中斷系統(tǒng)
2/3/202368第1章匯編語言基礎知識6章輸入/輸出程序設計6.4中斷傳送方式
6.4.28088/8086中斷系統(tǒng)
(2)硬件中斷:來自處理機的外條件所以又稱外中斷
硬件中斷主要有兩種來源——非屏蔽中斷NMI和可屏蔽中斷INTR。?非屏蔽中斷NMI。非屏蔽中斷來源于三方:系統(tǒng)板的RAM在讀寫時產生奇偶校驗錯;
I/O通道中的擴展選件出現奇偶校驗錯;協(xié)處理器8087的異常狀態(tài)產生的中斷。?可屏蔽中斷INTR。由外部設備通過一片8259A產生的中斷請求。2/3/202369第1章匯編語言基礎知識6章輸入/輸出程序設計外部設備向cpu發(fā)出中斷請求,cpu是否相應還與IF有關STI——開中斷指令將標志寄存器中的中斷標志位IF置1,允許CPU響應來自INTR引腳的中斷請求CLI——關中斷指令將標志寄存器中的中斷標志位IF清0,使CPU不響應來自INTR引腳的中斷請求6.4中斷傳送方式
6.4.28088/8086中斷系統(tǒng)
從外設發(fā)出的中斷請求到cpu相應中斷,用兩個控制條件起決定作用:1)外設的中斷請求是否被屏蔽,2)cpu是否允許相應中斷。2/3/202370第1章匯編語言基礎知識6章輸入/輸出程序設計2.中斷矢量表6.4中斷傳送方式
6.4.28088/8086中斷系統(tǒng)
●中斷向量表在8086系統(tǒng)中,內存最低端的1K字節(jié)地址范圍內(從00000-003FFH),放置256個中斷的中斷向量(入口地址),即稱為中斷向量表。每個中斷矢量在表中占據4個字節(jié),地址較高的兩個字節(jié)放入口地址的段地址,地址較低的兩個字節(jié)放偏移地址。中斷向量表中的存儲地址=中斷類型碼n×42/3/202371第1章匯編語言基礎知識6章輸入/輸出程序設計●中斷類型號的獲取凡與0~5號中斷類型號對應的中斷請求,一旦被響應,系統(tǒng)將自動提供中斷類型號,并自動地轉到中斷處理程序中去。對于可屏蔽的外部中斷INTR,則是經過中斷控制器8259,在CPU中斷響應的第二個周期,通過中斷響應信號,將對應的中斷類型號送至數據總線。內部中斷是通過INTn指令將中斷號直接發(fā)送給CPU。6.4中斷傳送方式
6.4.28088/8086中斷系統(tǒng)
2/3/202372第1章匯編語言基礎知識6章輸入/輸出程序設計用指令來為中斷類型N設置中斷向量:MOV AX,0MOV ES,AXMOV BX,N*4;中斷入口地址MOV AX,OFFSETINTHANDMOV ES:WORDPRT[BX],AX ;設置中斷處理程序INTHANDMOV AX,SEGINTHAND ;的入口地址MOV ES:WORDPRT[BX+2],AX
┆INTHAND: ;中斷處理程序
┆
IRET
●用戶可以為保留的中斷類型號擴充自己的需要的中斷功能,對新增加的中斷功能要在中斷向量表中建立相應的中斷向量。6.4中斷傳送方式
6.4.28088/8086中斷系統(tǒng)
2/3/202373第1章匯編語言基礎知識6章輸入/輸出程序設計6.4中斷傳送方式
6.4.28088/8086中斷系統(tǒng)
●用戶在編寫自己的中斷處理程序代替系統(tǒng)中的某個中斷處理功能時,要注意保留原來的中斷向量。程序結束時,要恢復原來的中斷向量??梢允褂胐os功能調用來存取中斷向量取中斷向量預置AH=35H,AL=中斷類型號執(zhí)行INT21H——把類型號為AL的中斷向量取出到ES:BX中設置中斷向量預置AH=25H,AL=中斷類型號,DS:DX=中斷向量執(zhí)行INT21H——把DS:DX指向的中斷向量放置到中斷向量表中類型號為AL的中斷向量處說明:也可以按照課本的方法來設置自己的中斷功能。2/3/202374第1章匯編語言基礎知識6章輸入/輸出程序設計3.中斷處理程序結構6.4中斷傳送方式
6.4.28088/8086中斷系統(tǒng)
中斷處理程序的結構與子程序(即過程)相似,可用定義過程的方式來定義中斷處理程序。所有編寫過程的一些規(guī)定和要求均適用于中斷處理程序,包括用偽指令PROC/ENDP定義過程為遠類型。中斷處理程序的典型結構
(1)現場保護(2)中斷返回(3)中斷嵌套(4)發(fā)中斷結束命令
2/3/202375第1章匯編語言基礎知識6章輸入/輸出程序設計例6.4中斷處理程序的一般結構的程序如下。INTPRGPROCFARSTIPUSHDSPUSHDXPUSHAXPUSHBXSTI;開中斷
CLI;關中斷
MOVAL,20H;發(fā)中斷結束命令EOIOUT20H,ALPOPDI;恢復現場
POPBXPOPAXPOPDXPOPDSIRET;中斷返回
INTPRGENDP由于IRET將恢復中斷前的標志,故IF也被恢復。6.4中斷傳送方式
6.4.28088/8086中斷系統(tǒng)
2/3/202376第1章匯編語言基礎知識6章輸入/輸出程序設計4.用戶軟中斷的設置6.4中斷傳送方式
6.4.28088/8086中斷系統(tǒng)
通常增加一個新的軟中斷,應完成下面一些操作?!みx擇一個可用的中斷類型號n?!ぞ帉懶碌能浿袛嗵幚沓绦颉!⑿碌能浿袛嗵幚沓绦虻娜肟诘刂穼懭氲街袛嗍噶勘淼?×n起的4個字節(jié)中。
2/3/202377第1章匯編語言基礎知識6章輸入/輸出程序設計程序如下:DATASEGMENTMESSDB‘Thisisanexampleaboutsoftinterrupt.$’ERRDB0AH,ODH,’ERROR!$’DATAENDSEXTRNINT4AHFARCODESEGMENTASSUMECS:CODE,DS:DATABG:MOVAX,SEGINT4AH;添加中斷矢量表例6.5
利用空閑中斷類型號4AH實現軟中斷設置。6.4中斷傳送方式
6.4.28088/8086中斷系統(tǒng)
2/3/202378第1章匯編語言基礎知識6章輸入/輸出程序設計6.4中斷傳送方式
6.4.28088/8086中斷系統(tǒng)
MOVDS,AXMOVDX,OFFSETINT4AHMOVAX,254AH;置AH為25H,AL為4AHINT21HMOVAX,DATAMOVDS,AXMOVAX,OFFSETMESSINT4AHCMPAH,0FFH;判超過256個字符否
JEER;超過轉ERMOVAH,4CHINT21HER:LEADX,ERR;顯示錯誤信息
MOVAH,9INT21HMOVAH,4CHINT21HCODEENDS
ENDBG2/3/202379第1章匯編語言基礎知識6章輸入/輸出程序設計INT4AH處理程序如下所示。CSEGSEGMENTASSUMECS:CSEGPUBLICINT4AHINT4AHPROCFARPUSHDX;保護現場
PUSHCXPUSHSIMOVCX,0;CX為字符數計數器
MOVSI,AX;SI為字符串首地址LP:MOVAL,[SI]CMPAL,‘$’;判是否是字符串尾
JZOVERMOVDL,AL;顯示字符
MOVAH,2INT21HINCSIINCCX;字符計數
JMPLP6.4中斷傳送方式
6.4.28088/8086中斷系統(tǒng)
2/3/202380第1章匯編語言基礎知識6章輸入/輸出程序設計OVER:MOVAX,CXCMPAH,0JEDONE;未超過256字符
MOVAH,0FFH;超過256字符DONE:POPSI;恢復現場
POPCXPOPDXIRET;中斷返回
INT4AHENDPCSEGENDSEND6.4中斷傳送方式
6.4.28088/8086中斷系統(tǒng)
2/3/202381第1章匯編語言基礎知識6章輸入/輸出程序設計6.4中斷傳送方式
6.4.3中斷傳送方式程序舉例問題分析:·本例利用中斷方式編寫中斷處理程序,類型為70H,實現打印機輸出功能。·由于編寫的是70H類型的軟中斷,因而應在主程序中將處理程序的入口地址寫入中斷矢量表中,然后利用INT70H便進入軟中斷,執(zhí)行中斷處理程序。例6.6
設打印機的數據端口地址為378H,狀態(tài)端口地址為379H,狀態(tài)D7為0時則忙,控制端口地址為37AH。當打印機不工作在中斷方式時,控制字為0CH,表示可對打印機進行讀取和輸出,啟動打印機,向打印機送數據。當控制字為0DH,給打印機送數據.選通位置1。2/3/202382第1章匯編語言基礎知識6章輸入/輸出程序設計6.4中斷傳送方式
6.4.3中斷傳送方式程序舉例SSEGSEGMENTSTACKDW100DUP(?)SSEGENDSCSEGSEGMENTASSUMECS:CSEG,SS:SSEGPRINTO PROCFARSTI PUSHESPUSHDI
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經權益所有人同意不得將文件中的內容挪作商業(yè)或盈利用途。
- 5. 人人文庫網僅提供信息存儲空間,僅對用戶上傳內容的表現方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
- 6. 下載文件中如有侵權或不適當內容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 2025年度宅基地使用權轉讓及配套基礎設施建設合同3篇
- 2024年運動鞋品牌授權區(qū)域銷售與售后服務合同3篇
- 交通設施墻紙更換服務
- 數據中心樓面節(jié)能施工協(xié)議
- 醫(yī)院專業(yè)助產士招聘合同范本
- 薪酬激勵與員工晉升機會
- 水泥制品生產企業(yè)地磅管理辦法
- 非遺項目拍賣師簽約函
- 農業(yè)科技項目招投標監(jiān)管體系
- 企業(yè)安全生產安全件管理辦法
- 2025四川宜賓市南溪區(qū)屬國企業(yè)招聘融資人員6人管理單位筆試遴選500模擬題附帶答案詳解
- 2024年度瑜伽教練與瑜伽館勞動合同3篇
- DB45T 2048-2019 微型消防站建設管理規(guī)范
- 2024年廣東省韶關市公開招聘警務輔助人員(輔警)筆試摸底備戰(zhàn)測試(3)卷含答案
- SCTP大云云計算PT2題庫【深信服】認證考試題庫及答案
- 2024年秋期國家開放大學《0-3歲嬰幼兒的保育與教育》大作業(yè)及答案
- 病例報告表(CRF)模板
- 2022年江蘇省普通高中學業(yè)水平測試生物試卷
- 湖南省長沙市2022-2023學年二年級上學期期末數學試題
- 齊魯針灸智慧樹知到期末考試答案2024年
- 公共體育(三)學習通課后章節(jié)答案期末考試題庫2023年
評論
0/150
提交評論