Int 13/AH=02h:讀扇區
入口引數:
AH=02H
AL=扇區數
CH=柱面
CL=扇區
DH=磁頭
DL=驅動器, 00H~7FH:軟盤; 80H~0FFH:硬碟
ES:BX=緩沖區的地址
出口引數:
CF=0:操作成功,AH=00H,AL=傳輸的扇區數;否則,AH=狀態代碼
實際上,試圖訪問跨越64K邊界或者大于0x80(128)個扇區的話,就會報錯,提示:
data boundary error (attempted DMA across 64K boundary or >80h sectors)
這種情況下,CF標志位置位,AH暫存器置為0x09.。
但在實際實驗中,在試圖讀取57個扇區的時候就出現了錯誤,在除錯的時候發現CF標志位置位,AH暫存器置為0x09.。
這是為什么?
另外還遇到過在試圖讀取56個扇區的時候,在最后呼叫中斷的時候,即int $0x13的時候,程式卡死在這個地方一直執行不下去,中斷也不回傳。
這又是為什么?
代碼如下:
mov $0x02, %ah
#mov $0x81, %dl
mov $0x00, %dl # drive 0
# the sector begin to read
mov $0x00, %dh
mov $0x00, %ch
mov $0x02, %cl
mov $k_kernel_size_in_sector, %al
mov $0x00, %bx
int $0x13
## if read success, cf would be cleard, or elsed cf would be set.
##
## so, if cf is cleard, display "load setup ok."
jnc bprint_setup_load_ok
這段代碼時在bochs下模擬的, 讀的是軟盤。
轉載請註明出處,本文鏈接:https://www.uj5u.com/qita/42450.html
標籤:驅動開發/核心開發
下一篇:AT89C51 十字路口交通燈程式 東西方向路口紅燈30s 綠燈35s,黃燈要求以0.5s的頻率閃爍共閃爍5s 南北方向的黃燈也需要閃爍
