У кого-нибудь есть инфа как сделать прогу для чтения MBR с помощью функций DOS (скажем при помощи int25h)?
mov ah, 2 ; AH = Function (read sectors) mov al, 1 ; AL = Number of sectors to read (1-128) xor ch, ch ; CH = Cylinder number (0-1023) mov cl, 1 ; CL = Sector number (1-17) xor dx, dx ; DH = Head number (0-15) ; DL = Drive number (0-A:, 1-B mov dl, 80h ; 80 = first HDD mov bx, offset buffer int 13h
lol, MBR всегда первый сектор. Даже если диск на 100 терабайт, биос сможет прочитать первый сектор Читай мануалы...
Машина виснет!!!!!!!!! Bios поддерживает, но только ее расширенные сервисы, а не int13h! int 25h чтение абсолютного сектора, но как сделать?
INT 25 читает сектора _логических_ дисков. Если нужна таблица разделов, пользуйте функции BIOS. НЕ может такого быть в принципе, т.к. эти функции используются ДОС и всё работает. Читайте доки по прерываниям лучше.
Chuvaka4x подожжи, подожжи.. int 13 юзают все (которые я встречал) бутсекторы, это получаются у тя они не работают? какая тогда ось? приатач свой mbr
Код (Text): INT 13 - DISK - READ SECTOR(S) INTO MEMORY AH = 02h AL = number of sectors to read (must be nonzero) CH = low eight bits of cylinder number CL = sector number 1-63 (bits 0-5) high two bits of cylinder (bits 6-7, hard disk only) DH = head number DL = drive number (bit 7 set for hard disk) ES:BX -> data buffer Return: CF set on error if AH = 11h (corrected ECC error), AL = burst length CF clear if successful AH = status (see #00234) AL = number of sectors transferred (only valid if CF set for some BIOSes) Проверьте, всё ли так делаете
Да!Все так, но висит жестко. DOS 6.22.Win XP SP2. Но какая разница в винде?Если у кого есть рабочий исходник с int 13h - скиньте в ящик.
Код (Text): ideal model tiny codeseg org 100h start: mov bx,offset buffer mov dx,80h mov ax,0201h mov cx,1 int 13h jc error mov ah,3Ch mov dx,offset filename xor cx,cx int 21h jc error mov bx,ax mov ah,40h mov cx,200h mov dx,offset buffer int 21h ; Write file jc print mov ah,3Eh int 21h ; Close file mov dx,offset done_msg jmp print error: mov dx,offset err_msg print: mov ah,9 int 21h ret filename db 'MBR.DMP',0 done_msg db 13,10,'Done.$' err_msg db 13,10,'*** Error ***$' buffer dw 256 dup (?) end start Проверено, работает. ЗЫ! Не понимаю, как можно утверждать что эти функции не работают, если твой комп грузится, ДОС и винда работают и ты сейчас здесь.
Не может такого быть, любой бутстрап юзает int 13h с ah=02 везде, где только может дотянуться. И если только надо прочитать сектор выше 8 гигов, тогда пользует ext int13. Так что "рабочий пример" - посмотреть любой загрузчик, что внесистемный (который в MBR и лежит), что осевые бутстрапы. Глянь вот тут: http://wasm.ru/forum/viewtopic.php?id=19756