8086pc機當中,鍵盤的輸入將會引發9號中斷,bios提供了int 9的中斷例程。cpu在9號中斷發生之後,會去執行int 9中斷例程,然後從60h埠當中讀取出掃瞄碼,並且將其轉換為相應的ascii碼和狀態資訊,儲存在記憶體的指定的空間(鍵盤緩衝區或狀態位元組)當中
一般的鍵盤輸入,在cpu執行完int 9 中斷例程之後都放到了鍵盤緩衝區當中,鍵盤緩衝區有16個字單元,可以儲存15個按鍵掃瞄碼和對應的ascii碼,這裡之所以只能放15個是因為鍵盤緩衝區是用環形佇列結構管理的記憶體區域,雖然緩衝區的本身長度為16個字,但出於判斷「對列滿」的考慮,它最多只能儲存15個鍵盤資訊。環形佇列的關鍵是判斷隊列為空,還是為滿。當tail追上head時,隊列為滿時,當head追上tail時,隊列為空。要知道是滿還是空,可以根據下面的方法來判斷上面提到了我們使用shift+a的時候,其實輸出到螢幕的是大寫字母a,我在mac下面試驗也是一樣的,說明其實大致的機制都是差不多的
程式如下所示
執行結果如下所示assume cs:code
code segment
start:
mov ah,0
int 16h
mov ah,1
cmp al,'r'
;要是輸入的是r,就跳到red處
je red
cmp al,'g'
;如果輸入的是g,那麼就跳到green處
je green
cmp al,'b'
;如果輸入的是b,那麼就跳到blue處
je blue
jmp short sret
red: shl ah,1
green: shl ah,1
blue:
mov bx,0b800h ;設定要改變的字元位址處
mov es,bx
mov bx,1
mov cx,2000
s:and byte ptr es:[bx],11111000b ;要改變的是第0、1、2位
or es:[bx],ah
add bx,2
loop s
sret:
mov ax,4c00h
int 21h
code ends
end start
int 9中斷例程優化分析
上篇文中我們已經實現了int9中斷例程的編寫,根據課後檢測點我們對上文 做出優化。如下 assume cs code stack segment db 128 dup 0 stack ends data segment dw 0,0 data ends code segment start mov ...
組合語言 實驗十五 安裝新的int9中斷例程
安裝乙個新的int 9 中斷例程,功能 在dos下,按下 a 鍵後,除非不再鬆開,如果鬆開,就顯示滿螢幕的 a 其他的鍵照常處理。首先要安裝新的中斷處理程式到0 0204h,然後改變入口位址。新的int 9中斷例程中仍要呼叫原來的int 9中斷,pushf call dword ptr cs 200...
Mysql中,int 10 和int 11 的區別
int m m指示最大顯示寬度。最大有效顯示寬度是255。顯示寬度與儲存大小或型別包含的值的範圍無關 首先說一下mysql的數值型別,mysql支援所有標準sql數值資料型別。這些型別包括嚴格數值資料型別 integer smallint decimal和numeric 以及近似數值資料型別 flo...