汇编访问计算机端口,汇编总结(2):中断、端口、直接定址表
1、中斷
CPU具有一種能力,可以在執行完當前指令之后,檢測從內部產生或外部發來的特殊信息,并立即對其進行處理,這種特殊的信息,叫做中斷信息。
中斷即CPU不再接著剛執行完的指令向下執行,而是轉去處理特殊信息。
中斷分為:
內中斷,CPU內部產生的特殊信息
外中斷,CPU外部產生的特殊信息
2.1.1、內中斷
中斷信息必須包含標識來源的編碼,叫做中斷類型碼。中斷類型碼為一個字節型數據,可表示256種中斷信息來源。
產生中斷信息的事件,即中斷信息的來源,叫做中斷源。
內中斷分類:
除法錯誤,類型碼0,如div指令產生溢出
單步執行,類型碼1,即單步調試
into指令,類型碼4
int指令,指令格式為int n,類型碼為n
CPU在收到中斷信息后,需要對中斷信息進行處理,這可以由我們編程來決定,我們編寫的處理中斷信息的程序叫做中斷處理程序。
CPU要想執行中斷處理程序,則必須知道這個程序的入口,即CS:IP指向這個入口,CPU用8位中斷類型碼通過中斷向量表找到對應中斷程序的入口地址。
中斷向量表在內存中保存,對于8086CPU機,其必須存放在0000:0000~0000:03FF處,這是規定好的。
中斷向量表中每個中斷類型碼對應中斷程序的段地址和偏移地址,共占2個字節。
CPU通過中斷類型碼,然后在中斷向量表中找到中斷處理程序的段地址和偏移地址,設置CS和IP,CPU開始執行中斷處理程序。這個操作是CPU自動完成的,這個過程叫做中斷過程。
具體過程如下:
從中斷信息中取得中斷類型碼N
pushf:標志寄存器的值入棧(中斷過程中會改變標志寄存器的值,所以先保存之前的值)
TF=0,IF=0:設置標志寄存器第8位TF和第9位IF的值為0
PUSH CS:CS內容入棧
PUSH IP:IP內容入棧
(IP)=(N4),(CS)=(N4+2):從內存地址為中斷類型碼4和中斷類型碼4+2的兩個字中讀取中斷處理程序入口地址,設置CS和IP
執行中斷處理程序
中斷處理程序編寫步驟:
保存用到的寄存器
處理中斷
恢復用到的寄存器
用iret指令返回
ret指令功能:
pop IP
pop CS
popf
引發中斷的具體事件:
除法錯誤:如果在執行div指令時,發生溢出錯誤,將產生中斷類型碼為0的中斷信息,CPU檢測到此信息然后引發中斷過程,轉去執行0號中斷所對應的中斷處理程序;
單步中斷:CPU執行完一條指令后,如果檢測到TF位是1,則產生單步中斷,轉去執行1號中斷處理程序,CPU提供單步中斷功能,為單步跟蹤程序執行過程提供了實現機制;
int指令引發中斷:可自定義調用中斷處理程序,例如int n將調用n號中斷處理程序;
在主板的ROM中存放的程序,叫做BIOS(基本輸入輸出系統),主要包含以下內容:
硬件系統的檢測和初始化程序;
外部中斷和內部中斷的中斷例程;
用于對硬件設備進行I/O操作的中斷例程;
其他和硬件系統相關的中斷例程;
操作系統DOS也提供了中斷例程,DOS中斷例程就是操作系統向程序員提供的編程資源。int 21h中斷例程就是DOS提供的,即程序返回功能。
在執行完向ss寄存器傳送數據指令后,即使發生中斷,CPU也不會響應。因為ss:sp聯合指向棧頂,應該持續完成,否則將發生錯誤。
1.2、外中斷
CPU能響應外設的輸入,并向它們進行輸出,這個過程叫做外中斷。
外設的輸入不直接送入內存和CPU,而是送入相關的接口芯片端口中。CPU向外設輸出也不是直接送入外設,而是先送入端口,再由芯片送到外設。CPU通過端口和外設進行聯系。
外中斷源分為2類:
可屏蔽中斷:CPU可以不響應的外中斷,由標志寄存器IF決定,如果IF=1則響應,否則屏蔽中斷;
中斷過程將IF設置為0,就是保證在進入中斷處理程序后,禁止其他的可屏蔽中斷
8086CPU提供修改IF的指令:sti:IF=1, cli:IF=0
不可屏蔽中斷:
CPU必須響應的外中斷
中斷類型碼固定為2
幾乎所有由外設引發的外中斷,都是可屏蔽中斷。
2、端口
在計算機中,各種存儲器和CPU的地址總線、數據總線、控制總線相連,CPU控制它們時,都把它們當做內存來對待。除了各種存儲器之外,還與很多芯片相連:
各種接口卡(網卡、顯卡)上的接口芯片,它們控制接口卡工作;
主板上的接口芯片,CPU通過它們對部分外設進行訪問;
其他芯片,存儲相關系統信息,或進行相關的輸入輸出處理;
這些芯片中,都有一組可以由CPU讀寫的寄存器,CPU把這些寄存器都當做端口,對它們進行統一編址,從而建立一個統一的端口地址空間。
訪問端口:
in al 60h:從60h號端口讀入一個字節
out 20h,al:往20h端口寫入一個字節
PC機中,有一個CMOS RAM芯片,一般稱為CMOS,特征如下:
包含一個實時鐘和一個有128個存儲單元的RAM存儲器;
此芯片靠電池供電,可保證實時鐘持續工作,RAM中信息不丟失;
128個字節的RAM中,內部實時鐘占用0~0dh保存時間信息,其他單元保存系統配合信息,供系統啟動時BIOS程序讀取,也可通過BIOS配置CMOS RAM中的系統信息;
此芯片內部有2個端口:70h和71h,CPU通過這2個端口讀寫CMOS RAM;
70h為地址端口,存放要訪問CMOS RAM單元的地址;71h為數據端口,存放從選定CMOS RAM單元中讀取的數據,或要寫入其中的數據;
在CMOS RAM中,存放著當前的時間:年、月、日、時、分、秒。每個長度為1個字節,這些數據以BCD碼方式存放。
BCD碼是以4位二進制數表示十進制數的編碼方法。
3、直接定址表
假如a、b標號代表2組數據空間,那么有如下寫法既可以標記存儲數據的單元地址,還可以標記其長度:
指令:mov ax,b
相當于:mov ax,cs:[8]
指令:mov b,2
相當于:mov word ptr cs:[8],2
指令:inc b
相當于:inc word ptr cs:[8]
指令:mov al,a[si]
相當于:mov al,cs:0[si]
指令:mov al,a[3]
相當于:mov al,cs:0[3]
指令:mov al,a[bx+si+3]
相當于:mov al,cs:0[bx+si+3]
通過數據能直接計算出所要找的元素的位置的表,叫做直接定址表。
直接定址表的好處:
使算法清晰簡潔
加快運算速度
程序易于擴展
如果此文章能給您帶來小小的工作效率提升,不妨小額贊助我一下,以鼓勵我寫出更好的文章!
總結
以上是生活随笔為你收集整理的汇编访问计算机端口,汇编总结(2):中断、端口、直接定址表的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 海军蚌埠士官学校官网电话?
- 下一篇: 计算机二级考试字处理表格和文字分栏,Ex