和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 指令...