[英]How to write on hard disk with bios interrupt 13h
我想將引導加載程序復制到自身內部硬盤的第一個扇區(512)中(我應該使用BIOS中斷13h),發現以下代碼:
mov bx, buffer1 ; set BX to the address (not the value) of BlahBlah
mov ah,03h ;When ah=, int13 reads a disk sector
mov al,5 ;Al is how many sectors to read
mov cl,0 ;Sector Id
mov dh,0 ;Head
mov dl,80h ;Drive (0 is floppy)
mov cx,512 ;One sector /2
mov ah, 0x3 ; set function 2h
int 0x13
埠它不起作用!
您的代碼非常混亂。 為了正確使用AH = 3
int 13h
,還需要設置ES
( BX
所在的段,例如ES:BX
是應讀寫到硬盤的緩沖區的地址)和CX
到柱面和扇區號的組合( cylinder = CL[7:6] || CH
, sector = CL[5:0]
)。
假設您要從物理地址5000h
向硬盤0上的CHS 0:0:1寫入一個扇區(512字節),您的代碼將如下所示:
xor ax, ax
mov es, ax ; ES <- 0
mov cx, 1 ; cylinder 0, sector 1
mov dx, 0080h ; DH = 0 (head), drive = 80h (0th hard disk)
mov bx, 5000h ; segment offset of the buffer
mov ax, 0301h ; AH = 03 (disk write), AL = 01 (number of sectors to write)
int 13h
您還應該記得執行中斷后檢查是否已設置了進位標志。 很明顯,該功能是否已正確執行。 如果已設置,則AH
寄存器將包含錯誤代碼。
BIOS函數具有輸入參數。 如果您沒有正確輸入所有輸入參數,則BIOS函數將無法猜測您的意思。 有關您使用的BIOS功能的信息,請訪問: http : //www.ctyme.com/intr/rb-0608.htm
據我所知,您缺少CH和ES的合理值,因此BIOS可以將數據從完全不同的地址寫入完全不同的扇區。 還要注意,CL是CX寄存器的最低部分-將值加載到CL然后通過將某些內容加載到CX來覆蓋它是沒有意義的。
BIOS函數也返回值。 在您的情況下,BIOS可能會返回狀態代碼,告訴您出了什么問題,並且由於您不進行檢查,所以您不知道是否出了什么問題或出了什么問題。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.