/*
* 關閉a20
* 返回結果:
* 成功:cf=0
* ah=0
* 失敗:cf=1
* ah=01 鍵盤控制器處於secur模式
* =86h 功能不支援
*/movw $0x2400, %ax
int0x15
/*
* 開啟a20
* 返回結果:
* 成功:cf=0
* ah=0
* 失敗:cf=1
* ah=01 鍵盤控制器處於secur模式
* =86h 功能不支援
*/movw $0x2401, %ax
int0x15
/*
* 獲取a20狀態
* 返回結果:
* 成功:cf=0
* ah=0
* al=0 已關閉
* =1 已開啟
* 失敗:cf=1
* ah=01 鍵盤控制器處於secur模式
* =86h 功能不支援
*/movw $0x2402, %ax
int0x15
/*
* 開啟
*/inb $0x92
andb $(~0x03), %al
orb $0x02, %al
outb $0x92
/*
* 關閉
*/inb $0x92
andb $(~$0x02), %al
outb $0x92
call gate_a20_flush_keyboard_buffer
movb $0xd1, %al
outb $0x64
4: inb $0x64
andb $0x02, %al
jnz 4b
movb $0xdd, %al
testb %dl, %dl
jz 5f
orb $0x02, %al
5: outb $0x60
call gate_a20_flush_keyboard_buffer
/* output a dummy command (usb keyboard hack) */
movb $0xff, %al
outb $0x64
call gate_a20_flush_keyboard_buffer
gate_a20_flush_keyboard_buffer:
inb $0x64
andb $0x02, %al
jnz gate_a20_flush_keyboard_buffer
2: inb $0x64
andb $0x01, %al
jz 3f
inb $0x60
jmp 2b
3: ret
《x86 x64體系探索及程式設計》試讀
現在正在和一些朋友研究 os 核心 基於haiku 當然,這些研究只是作為興趣 有興趣的朋友可以在iteye上發郵件給我,一起研究,編譯器方向的也熱烈歡迎!在研究的過程中,需要對像 x86 64 的底層要有一定的了解。現在還是在看的 深入理解計算機系統 intel 處理器等書還沒接觸到。在看了這本書...
x86中斷架構
x86計算機的 cpu 為中斷只提供了兩條外接引腳 nmi 和 intr。1.可程式設計中斷控制器8259a 8259a 只適合單 cpu 的情況。每個cpu都有乙個本地apic,所有本地apic連線到io apic。主要是收集來自 i o 裝置的 interrupt 訊號且在當那些裝置需要中斷時傳...
x86架構中特權級
特權級,可以分為三種 第 一 描述符中的特權級dpl,表示這個段的特權 第 二 選擇子的rpl表示請求方的特權級 第 三 當前特權級,表示正在執行的 段所具有的特權 下面有關特權級知識的總結 第一 對於資料段來說,特權級dpl表示了可以訪問該資料的最低特權。若資料段的dpl為1,那麼只有特權級為0或...