遞增64位內存有效地址我使用的中斷0x13
與擴展驅動器0x42
的功能讀取從我的擴展驅動器部門在實模式。如何在實模式
我定義DAP是在下面的結構的16個字節:
DAP:
db 0x10 ; size of DAP
db 0 ; Reserved zero
dw 0x0001 ; Number of sectors to read
dd 0x00000200 ; Memory Location to load the sector (s)
dq 0 ; Start of the sectors to be read
的DAP段是8字節長的,你可以注意到。在尋找我的部門(循環部門)時,我增加了部分並將其與我的驅動器的實際大小進行比較。我使用遞增錯誤的代碼被限制在16位模式:
mov ax, [DAP+0x08]
inc ax
mov [DAP+0x08], ax
我不想使用幾種通用寄存器在複雜的尋址模式來實現我的目的,我想你有一些簡單而有效的方式。
段不是8字節(64位值)。您列出的8字節值是LBA(邏輯塊地址)。細分市場。實際上是你列爲'offset'的第二個2字節。您列爲'offset'的四個字節值實際上是一個實模式片段:偏移量對。 –
@MichaelPetch,你對我的代碼評論是正確的。這是由於從某處複製部分代碼的錯誤所致。無論如何,我修改了代碼評論。 –
4字節值在0x200實際上是相同的0x00000200其轉換爲一個段偏移對0×0000:0200。我希望這不是你開始讀扇區的內存中的地方,因爲它恰好位於運行從0x0000到0x3fff的較低內存中的中斷向量表之上。之後是從0x400到0x4ff的BIOS數據區。在古代硬件上,保留字節從0x500開始。我建議開始讀取0x0000:0x0600 –