輸入輸出中斷

2022-04-06 17:37:51 字數 1269 閱讀 5150

每一種輸入裝置都要通過硬體介面或控制器與cpu相連,程式利用i/0指令,訪問介面上的暫存器,獲得外部裝置的狀態資訊,從而實現輸入輸出

i/o指令

輸入指令:in

埠位址可以採用直接表示的方式,也可以採用間接表示的方式,當採用直接表示的方式是,埠位址僅僅是8位,採用簡潔表示埠位址是,埠位址存放在dx中,可以存放16位

例如mov dx,2fch

in ax,dx

輸出指令:out

埠位址可以採用直接表示的方式,也可以採用間接表示的方式,當採用直接表示的方式是,埠位址僅僅是8位,採用簡潔表示埠位址是,埠位址存放在dx中,可以存放16位

例如:mov dx,2fch

out dx,ax

cpu 與外部裝置之間進行資訊交換,

包括資料,控制盒狀態資訊,儘管他們的性質不同,但他們都是通過in和out指令在資料匯流排上進行傳遞,通常採用分配不同的埠的方法將他們加以區分

資料是cpu和外設真正想要交換的資訊,資料通常是8位或者是16位,可以分為不同的型別,不同的外設輸出的資料型別也不同

控制資訊輸出到i/o口,是烤熟裝置要做什麼工作

從介面輸入的狀態資訊表示i/o裝置當前的狀態,這也就是我們經常要判 』忙『

資料傳送的方式

(1)無條件傳送方式

這種方式是已經知道外設已經準備好,這種方式軟體實現簡單,只要在指令中指明埠位置,就可指定外設進行輸入輸出

無條件傳送方式是方便的,但是要就外設工作能夠與cpu同步,否則就可能出錯

(2)查詢方式

查詢方式適合cpu與外設不同步的情況,也就是要進行判 「忙」,通常外設速度遠遠忙於cpu速度,於是查詢過程將花費大量時間

(3)中斷方式

為了提高cpu的效率,可採用中斷方式,當外設準備號,外設向cpu傳送中斷請求,cpu轉入中斷處理程式,完成輸入與輸出工作

(4)直接儲存方式

由於高速i/o裝置,如磁碟機準備的時間段,要求傳送的速度快,所以一般採用位元組儲存方式,高速裝置與記憶體儲存器直接進行資料交換,這種方式傳送資料是分組的

其過程是:先把資料在高速外設中存放的起始位置,資料在記憶體中存放的起始位址,傳送資料長度等引數輸出到連線高速外設的介面,然後啟動外設,裝置準備開始直接傳送資料,當高速外設位元組傳送準備好之後,向處理機傳送乙個直接傳送的資料請求,處理機以最短的時間批准進行位元組傳送,並讓出匯流排控制權,高速裝置在控制器下交換資料,資料交換完畢之後,有高速裝置發出完成中斷請求,並交出匯流排控制權,處理機響應上述中斷,由對應的中斷處理程式對告訴裝置進行控制或對已經傳送的資料進行處理,中斷返回後,源程式繼續執行

常用技巧 輸入輸出優化 輸入輸出外掛程式

我們知道cin cout是比較慢的,不過它們可以加速。在 中加入這兩句即可 std ios sync with stdio false std cin.tie 0 加速過後cin的速度與scanf的速度近似 當然,加速過後就不要混用print和cout,scanf和cin了。因為不同步,後果會很嚴重...

uva oj java輸入輸出

真難的題目 狗屁演演算法 測資很機車 測驗結果 x.xx0 ms 測驗日期 200y mm dd author raymond wu 小璋丸 publicclassmain 載入單字的字元 while bytedata 1 else bytedata system.in.read catch exc...

檔案輸入 輸出

13.1 和檔案進行通訊 文字檢視和二進位制檢視 在文字檢視中,程式看到的內容和二進位制的內容可能不同,例如ms dos文字檔案用回車符和換行符的組合 r n來表示行尾,macintosh用乙個回車符 r來表示行尾。c程式使用乙個 n表示行尾。所以,如果c程式以文字檢視模式處理乙個ms dos文字檔...