在實模式下,可通過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...