組合語言 埠和外中斷

2021-07-07 01:41:45 字數 3778 閱讀 4708

和cpu通過匯流排相連的晶元除了各種儲存器外,還有一些其他的晶元,例如網絡卡顯示卡等。從cpu的角度,將這些暫存器都當作埠,對它們進行統一編址,從而建立了乙個統一的埠位址空間,每乙個埠的位址空間都有乙個位址。

在訪問埠的時候,cpu通過埠位址來定位埠。因為埠所在的晶元和cpu通過匯流排相連,所以,埠位址和記憶體位址是一樣的,都是通過位址匯流排相連傳輸資料的。

in al,60h ;

從60h號埠讀入乙個位元組到記憶體

執行時與匯流排相關操作cpu通過位址線將位址資訊60h發出

cpu通過控制線發出埠讀命令,選中儲存晶元,並通知它,將要從中讀取資料

埠所在的晶元將60h埠中的資料通過資料線送入cpu中

out

60h,al

從記憶體讀出乙個位元組到60h號埠

執行時與匯流排相關操作和in指令相似

在in 和out 指令中, 只能使用al或ax來存放從埠中讀入的資料或要傳送到埠中的資料

shl和shr是邏輯移位指令

功能:將乙個暫存器或記憶體單元中的資料向左移位

將最後移出的移位寫入cf中

最低位用0 補充

mov al, 01001000b

shl al, 1 ;將 al中資料左移一位

執行後 (al) =10010000b, cf=0

功能:

將乙個暫存器或記憶體單元中的資料向右移位

將最後移出的移位寫入cf中

最高位用0 補充

mov al, 01001000b

shr al, 1 ;將 al中資料右移一位

執行後 (al) =00100100b, cf=0

cpu除了有運算能力外,還要有i/o(input/output)功能外設的輸入不直接送入記憶體和cpu中,而是送入相關的介面晶元的埠中;cpu向外設的輸出也不是直接送入外設,而是先送入埠中,再由相關晶元送到外設。cpu還可以向外設輸出控制命令,而這些控制命令也是先送到相關晶元的埠中,然後由晶元送到外設實施控制。所以cpu是通過埠和外部裝置進行聯絡。

外中斷資訊

外設隨時都可能發生需要cpu即使處理的事情,cpu是如何即使得知並進行處理的呢?

cpu提供中斷機制來滿足這樣需要。當cpu內部有需要處理的事情發生的時候,將產生中斷資訊,引發中斷過程。這種中斷資訊**cpu內部當cpu外部有需要處理的事情發生的時候,如外設的輸入到達,相關晶元將想cpu發出響應的中斷資訊。cpu在執行完當前指令後,可以檢測到傳送過來的中斷資訊,引發中斷過程,處理外設的輸入。

中斷分為兩種:可遮蔽中斷和不可遮蔽中斷

可遮蔽中斷是cpu可以不響應的外中斷。cpu是否響應可遮蔽中斷,要看標誌暫存器if位的設定

當cpu檢測到可遮蔽中斷資訊時

如果if = 1,則cpu 執行完當前指令後響應中斷,引發中斷過程;

如果if = 0,則cpu 不響應可遮蔽中斷

不可遮蔽中斷是cpu必須響應的外中斷。當cpu 檢測到不可遮蔽中斷時,在執行完當前指令後,立即響應,引發中斷過程。

幾乎所有的由外設引發的外中斷,都是可遮蔽中斷,當外設有需要處理的事件發生時,相關晶元向cpu發出可遮蔽中斷。

不可遮蔽中斷是在系統中必須處理的緊急情況發生時,用來通知cpu 的中斷資訊。

下面**作用:在螢幕中間依次顯示「a」~「z」,並停留一段時間。在顯示過程中,按下esc按鍵之後,可以改變顯示的顏色。

assume cs:code

stack segment

db 128 dup(0)

stack ends

data segment

dw 0,0

data ends

code segment

start:

;堆疊段

mov ax,stack

mov ss,ax

mov sp,128

;儲存系統int9中斷例程,cs和ip位置

mov ax,data

mov ds,ax

mov ax,0

mov es,ax

push es:[9*4]

pop ds:[0]

push es:[9*4+2]

pop ds:[2]

;重寫系統int9中斷例程

mov word ptr es:[9*4],offset int9

mov es:[9*4+2],cs

;將if設定為1

pushf

pop bx

and bh,11111111b

push bx

popf

;迴圈寫入a~z字元

mov ax,0b800h

mov es,ax

mov ah,'a'

s:mov es:[160*12+40*2],ah

call delay;設定空迴圈,讓字元可以在螢幕上保留一段時間

inc ah

cmp ah,'z'

jna s

;恢復系統int9中斷例程

mov ax,0

mov es,ax

push ds:[0]

pop es:[9*4]

push ds:[2]

pop es:[9*4+2]

;結束,退出程式

mov ax,4c00h

int 21h

;設定空迴圈,讓字元可以在螢幕上保留一段時間

delay:

push ax

push dx

mov dx,10h

mov ax,0

s1: sub ax,1

sbb dx,0

cmp ax,0

jne s1

cmp dx,0

jne s1

pop dx

pop ax

ret;新的int9中斷程式

int9:

push ax

push bx

push es

in al,60h;通過埠,獲取鍵盤中鍵入的按鍵

;執行系統int9中斷例程

pushf

call dword ptr ds:[0]

;判斷是否為esc按鍵

cmp al,1

jne int9ret

;是esc按鍵,改變顯示字元的顏色

mov ax,0b800h

mov es,ax

inc byte ptr es:[160*12+40*2+1]

int9ret:

pop es

pop bx

pop ax

iret

code ends

end start

當我們按下鍵盤中按鍵時,系統會發出乙個外中斷,此外中斷會呼叫int9中斷例程。我們可以直接編寫int9中斷例程達到想要的效果

通過in 和 out指令,可以獲取埠中的資訊。例如:in al,60h,就可以獲得鍵盤中鍵入的按鍵的資訊

效果圖

組合語言 埠

在pc機系統中,和cpu通過匯流排相連的晶元除各種儲存器外,還有以下3種晶元。各種介面卡 比如,網絡卡 顯示卡 上的介面晶元,它們控制介面卡進行工作 主機板上的介面晶元,cpu通過它們對部分外設進行訪問 在這些晶元中,都有一組可以由cpu讀寫的暫存器。這些暫存器,它們在物理上可能處於不同的晶元中,但...

組合語言 埠

在pc機系統中,和cpu通過匯流排相連的晶元除了各種儲存器外,還有以下3中晶元。各種介面卡 比如,網絡卡,顯示卡 上的介面晶元,它們控制介面卡進行工作 主機板上的介面晶元,cpu通過它們對部分外設進行訪問 這些晶元中,都有一組可以由cpu讀寫的暫存器。這些暫存器,它們在物理上可能處於不同的晶元中,但...

組合語言 內中斷

內中斷 在執行完當前正在執行的指令之後,檢測到從cpu內部發過來的或內部產生的一種特殊資訊,並且可以立即對所接收到的資訊進行處理 中斷資訊可以 於cpu外部和內部 內中斷的產生 1除法錯誤 0 2單步執行 1 3執行into指令 4 into 溢位中斷 4執行int指令,該指令格式 int n 指令...