X86彙編8.外部中斷

最近學習了X86彙編,其實無論是古老的8086還是現在i3/5/7/9,Xeon3/5,在最基本原理上,都是相通的,只是CPU位數,尋址空間,寄存器個數,指令集的擴充等方面有所不同,對於學習,8086永不過時。

1.端口的讀寫
在PC系統中,除和CPU通過總線相連的芯片(內存芯片)之外,還有3類芯片:
(1)各接口卡(網卡、顯卡)上的接口芯片,他們控制接口卡進行工作
(2)主板上的接口芯片,CPU通過它們對部分外省進行訪問
(3)其他芯片,用來存儲相關的系統信息,或進行相關的輸入、輸出處理
這些芯片都有一組可以由CPU讀寫的寄存器,這些寄存器物理上處於不同芯片中,但是都與CPU總線相連,可以通過CPU總線對他們進行控制,從CPU角度,將這些寄存器都稱爲端口,對他們進行統一編址,從而建立了一個統一的端口地址空間,每一個端口在地址空間中都有一個地址。
總結,CPU可以直接讀寫以下三個地方的數據:
(1)CPU內部寄存器,在CPU內部
(2)內存單元,直接連在CPU上
(3)端口

端口地址和內存地址一樣,都通過地址總線來傳送。在PC系統中,最多可以定位64K個不同端口,他們的端口範圍是:0~65535。
對端口的讀寫不能用mov、push、pop,應該用in和out
in al,60h ;從60h端口讀入一個接
執行過程:
(1)CPU通過地址總線將信息60h發出
(2)CPU通過控制總線發出端口讀命令,選中端口所在芯片,並通知他讀取數據
(3)端口所在的芯片將60h端口中的數據通過數據總線送入CPU
in、out指令,只能用ax和al來讀寫端口,8位用al,16位用ax
0 ~ 255端口讀寫:
in al,20h ;從20h端口讀入一個字節
out 20h,al ;往20h端口寫入一個字節
256 ~ 65535端口讀寫:
mov dx,3f8h ;將端口號3f8h送入dx
in al,dx ;從3f8h讀取一個字節
out dx,al ;向3f8h寫入一個字節

CMOS RAM芯片:PC機上有個CMOS RAM芯片,簡稱CMOS,此芯有一個實時時鐘和一個RAM存儲器,此芯片靠電池供電,因此關機後數據不丟失,CPU用過70h,和71h訪問CMOS的RAM。CMOS RAM中存放着當前的時間:年、月、日、時、分、秒。

3.外部中斷
外部中斷源主要有2種,可屏蔽中斷和不可屏蔽中斷。
可屏蔽中斷是CPU可以不響應的外中斷,主要看flag寄存器的IF位。處理過程:
(1)取中斷號
(2)flag寄存器入棧,IF=0,TF=0
(3)CS、IP入棧
(4)(IP) = (n4) ,(CS)=(n4 + 2)
設置IF的指令:sti,設置IF=1,cli,設置IF=0
不可屏蔽中斷是CPU必須處理的中斷,中斷號固定爲2,執行過程
(1)標誌寄存器入棧,IF=0,TF=0
(2)CS、IP入棧
(3)(IP) = (8) ,(CS)=(0AH)

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章