核心程式設計 保護模式下讀取磁碟絕對扇區

2021-04-17 22:05:31 字數 1736 閱讀 4547

在實模式下,可通過13號bios中斷讀取磁碟扇區。

但保護模式下,中斷方式發生改變。中斷處理程式的段基址通過idt表中的描述符得到,而非實模式下的中斷向量表。

故保護模式下,已無法使用實模式下的中斷處理程式。

磁碟讀寫屬於i/o,可通過直接的io讀寫來完成,實際上bios的中斷處理程式也是這樣完成的。

以下是讀取磁碟扇區的demo**:

#include 

"../plib.h

"#define

cs 0

#define

hs 0

#define

ss 1

#define

readsector_timeout 10000;

unsigned 

intreadsector(unsigned 

long

partitionoffset, unsigned 

long

drivenumber, unsigned 

long

lba, unsigned 

char

*data, 

intlimit)

else

if(limit 

<

512)  

else

//print("numberofsector=%u ",numberofsector);

outport(

0x1f2

, numberofsector);

outport(

0x1f3

, lba);

outport(

0x1f4

, lba 

>>8);

outport(

0x1f5

, (lba 

>>

16) 

&0xff

);outport(

0x1f6

, 0xe0

|(drivenumber 

<<

4));

outport(

0x1f7

, 0x20

);//

print("end outport ");

//sleep(1);

//print("readsector 2 ");

unsigned 

char

status =0

;int

timeout 

=readsector_timeout;

do} 

while

((status 

&0x8

) !=

0x8);

//} while ((status & 0x89) != 0x8);

//print("end while ");

for(unsigned 

shortx =

0; x 

<

numberofsector 

*512

; x +=2

)  else

if(x +1

<

limit 

||limit ==-

1) }}

//print("end for ");

//print("   readsector end, limit=%d ",limit);

if(limit !=-

1)  

else}

Window核心學習之保護模式基礎

段暫存器有6個分別是 cs,ss,ds,es,fs,gs。這些段暫存器包含16位的可見部分和80位的隱藏部分,共90位。16位的可見部分就是我們知道的cs等段暫存器的值,我們可以在od中檢視。這16位可見部分也稱為是段選擇子,其16位的結構的最低兩位是rpl即此段訪問的請求許可權級別,再往前一位是t...

linux核心學習之保護模式 一

這一章涉及intel8086系列cpu的保護模式程式設計,應該是學習核心程式設計,驅動程式設計及嵌入式程式設計一些基礎知識。不過對於沒接觸過底層程式設計的我來說,感覺還是好複雜 不過裡面也有許多以前彙編學過的東西,大部分還是能看懂的 我覺得圖表就能說明大部分內容了,細節東西,不能都做筆記,所以大部分...

保護模式下的分段記憶體定址

段選擇符 段暫存器中的值 32位彙編中16位段暫存器 cs ds es ss fs gs 中不再存放段基址,而是段描述符在段描述符表中的索引值,d3 d15位是索引值,d0 d1位是請求特權級 rpl 用於特權檢查,d2位是描述符表引用指示位ti,ti 0指 示從全域性描述表gdt中讀取描述符,ti...