Не могу понять почему это происходит! Вообщем имею следущий свой код в первом секторе (тобиш загрузочном) партиции (активная партиция) и с нее пытаюсь загружатся Код (Text): .586 _Text segment public use16 assume cs:_Text, ds:_Text org 0h main proc far EntryPoint: ;Entry point jmp AfterData db "NTFS " ; OEM dw 0200h ; Bytes per sector db 08h ; Sectors per cluster dw 0h ; Reserved Sectors db 2 dup(0) ; undefined - always 0 dw 0h ; not used db 0F8h ; Media Type dw 0h ; undefined - always 0 dw 03Fh ; Sectors per track dw 0FFh ; Heads dd 03fh ; Hidden Sectors dd 0h ; not used dd 80008000h ; not used dq 0h ; Total Sectors dq 04h ; MFT start cluster dq 0h ; MFT mirror start cluster dd 0F6h ; Clusters per FRS dd 01h ; Clusters per index dq 0h ; Volume serial number dd 0h ; CRC extended_mode db 0 ; reserved, don't tuch ;Structure for read sectors align 4 ;if this structure would not been aligment than function int13 will failed! packet_size dw 10h number_of_blocks dw 1 transfer_buffer dd 0 abs_block_numberlow dd 0 abs_block_numberhigh dd 0 ;end structure abs_address dd 0 ConfigAbsOffset dq 0 ;absolute config offset in sectors BootStrapAddress dq 0 ;absolute bootstrap address in sectors ;Boot Loader Code ====================================================================== ============== AfterData: cli pusha push ds mov ax, 07C0h mov ds, ax sti mov si, offset packet_size mov word ptr [packet_size], 10h mov word ptr [number_of_blocks], 1 mov dword ptr [transfer_buffer], 50000000h mov dword ptr [abs_block_numberlow], 707137D mov dword ptr [abs_block_numberhigh], 0 mov ah, 42h mov dl, ds:24h int 13h jc ErrorRead1 mov si, offset packet_size mov word ptr [packet_size], 10h mov word ptr [number_of_blocks], 1 mov dword ptr [transfer_buffer], 50000000h mov dword ptr [abs_block_numberlow], 707137D mov dword ptr [abs_block_numberhigh], 0 mov ah, 42h mov dl, ds:24h int 13h jc ErrorRead2 jmp EndRead тут я два раза подряд читаю один и тот же сектор, который находится по смещению в 707137 секторов от начала диска. И что бы вы думали!? На одной машине чтение происходит нормально и выполнение доходит до EndRead, а на другой выполняется только первое чтение, второе же вызывает ошибку!!!!!! В чем такое недоразумение? Может неправильно использую int13? У меня уже крыша едет!!!!! >8( Работа горит ааааааа....
винт один и тот же, я просто с ним перехожу от одной тачки на другую и вот такая вот лажа! тут читается там не читается ;(
Godness А причем тут винт. Тут биус либы поддерживает это расширение либы нет. Я имею ввиду функци 40-4x/
Дык ты невнимательно прочитал пост! Первое чтение всегда происходит нормально ошибка на втором! Ща смотрю как там системном буте это сделано может чего и найду, хотя пока никаких отличий не видно, тот же инт13
Фууууухххх!!!!!!!!! )) пофиксил багу! Оказывается дело в том, что я не настроил сегмент стека! Я использовал Код (Text): mov ax, 9000h mov ss, ax а оказывается некоторые биосы используют эту область! поэтому и валилось на отдельных тачках. надо так как в системном буте - Код (Text): mov ax, 07C0h mov ss, ax зразу все заработало! дело вовсе не в инт13 аЖ полегчало!