我正在開發一個小型OS引導裝載程序。我正在使用int 0x13函數來讀取硬盤的第一個扇區。問題是,如果我將它作爲緩衝區傳遞到地址0x7e00,我會從0x7d71開始獲取數據。Int 13h在緩衝區之前調用數據放置
出於測試目的,硬盤驅動器是2 KB填充字母'A'。我正在使用Qemu來測試我的引導程序。
以下是一段我的代碼:
mov ax, 0x7e00 ; Address to place data.
shr ax, 4 ; Shift right for es index instead of bx
mov es, ax ; Put buffer address into es
xor bx, bx ; Zero out bx, because it is not needed
mov ah, 0x02 ; Sub function to read disks
mov al, 0x01 ; Read 1 sector
xor ch, ch ; At cylinder 0
mov cl, 0x01 ; At sector 1
xor dh, dh ; At head 0
mov dl, 0x80 ; On hard drive 0
int 0x13
後來,當我碰巧讀0x7d71:
mov al, byte [0x7d71] ; Get the character at 0x7d71
mov ah, 0x0e ; Sub function to teletype print al
xor bx, bx ; On page 0
mov cx, 0x00001 ; 1 time
int 0x10
我得到的字母 'A'。而且我可以繼續沿着地址往上走,仍然可以得到'A'。
我在緩衝區發送到es:bx錯了嗎?這個bios搞砸了嗎? (我使用Qemu來模擬,nasm來組裝,而magiciso來產生iso)
只是澄清,你沒有得到'0x7E00'的一個扇區長度所需的數據'AAAA ...'嗎? 「INT 0x13」指令執行後,AX寄存器的值是多少? –