體系架構 x86 A20位址線的操作

2021-07-10 06:47:08 字數 1719 閱讀 8391

/*

* 關閉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或...