簡體   English   中英

如何使用BIOS中斷13h在硬盤上寫入

[英]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 ,還需要設置ESBX所在的段,例如ES:BX是應讀寫到硬盤的緩沖區的地址)和CX到柱面和扇區號的組合( cylinder = CL[7:6] || CHsector = 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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM