繁体   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