Дык собственно int 13h - функция bios, а int 25h досовская. Для того чтоб использовать int 25h должен быть загружен DOS. Отличие в нумерации устройств (см. замечания от Pavia)
Плюс через int 13h сектора номеруются относительно начала физичекого диска, а у int 25h - относительно начала раздела.
MirrorBlack Также не помешает AH = 48h (получить параметры дисковода) - напомню батеньке, что функции ah=4xh для int 13h не будут работать для флопа (сразу видно, никогда не заглядывал отладчиком/дизассемблером в Int 13 для флопа).
мне не нужен флоп. мне нужно читать с винта. поюзал поисковики, по int13 42h ничего путного не нарыл. нашел пример на этом же форуме. но так ничего и не заработало. в чем ошибка? startup segment assume cs:startup,ds:startup,es:startup,ss:startup ; ROM Head db 055h, 0AAh ; Сигнатура db 2 ; размер блока в 200h байтовых секторах jmp start db 001h,002h,003h,004h,005h,006h,007h,008h,009h,00Ah,00Bh, 00Ch ; Резерв 12 пользовательских переменных ; dw offset PIR ; Указатель на PIR структуру. BUF DB 512 DUP(' ') ;буфер CURADR DW 0101H ;начало (дорожка/сектор) SIDE DB 00 CRC DW 00 DAP struc DAP_Size db 10h ;размер пакета DAP_Reserved1 db 00h;резерв DAP_LoadSectors db 01h;количество секторов для загрузки DAP_Reserved2 db 00h; резерв DAP_BufOffset dw 00h; смещение DAP_BufSegment dw 00; сегмент DAP_NumberSector dq 00h; номер сектора DAP ends Packet DAP < 10h,00h,01h,00h,00,00,00h> start: mov cx,cs ; assume esGROUP mov es,cx ; Устанавливаем сегмент данных равным сегменту кода mov ds,cx ; Устанавливаем сегмент данных равным сегменту кода mov ax,offset BUF mov Packet.DAP_BufOffset,ax xor ax,ax mov ax,seg BUF mov Packet.DAP_BufSegment,ax xor ax,ax mov ah,42h mov si,offset Packet int 13h call G10DISP retf ; вывод сектора на экран ; ---------------------- G10DISP PROC NEAR MOV AH,13H ;записать строку знаков mov al,1 ;подслужба lea BP,RECDIN ;адрес буфера MOV BL,0AH ;атрибут знака mov dx,00h ;позиция вывода на экран MOV BH,00H ;номер страницы MOV CX,512 ;длина выводимого сообщени INT 10H RET G10DISP ENDP ends startup end start что означают DAP_BufOffset и DAP_BufSegment так до конца и не понял. кстати вывод инфы на экран тоже почему то не пашет. пробовал выводить хотя бы один символ, записанный мной в ручную. не работает
Модуль ROM? DAP_BufSegmentAP_BufOffset - это адрес буфера, в который читаются данные - без него ничего "пахать" не будет.
да, расширение ром-биоса. (все вопросы с запуском решены, все запускается нормально, но только лишь запускается, не более) в чем косяк то, почему может не работать чтение? а почему mov ax,seg BUF mov Packet.DAP_BufSegment,ax почему бы не написать mov ax, offset BUF или lea ax, BUF (это какая-то специфическая особенность?)
Сегментный адрес и внутрисегментное смещение - это разные вещи. Неужели это не понятно?! Нужно писать и то, и другое. Или, если адрес буфера заранее известен, прописать его непосредственно в образе DAP.
dps86 мне не нужен флоп. мне нужно читать с винта - вам виднее. Только в упор в вашем фрагменте не вижу, какое устройство/железо юзать собираетесь по Int 13h? Код (Text): mov cx,cs ; assume es:DGROUP mov es,cx ; Устанавливаем сегмент данных равным сегменту кода mov ds,cx ; Устанавливаем сегмент данных равным сегменту кода mov ax,offset BUF mov Packet.DAP_BufOffset,ax xor ax,ax mov ax,seg BUF mov Packet.DAP_BufSegment,ax xor ax,ax mov ah,42h mov si,offset Packet int 13h
структура DAP struc DAP_Size db 10h ;размер пакета DAP_Reserved1 db 00h;резерв DAP_LoadSectors db 01h;количество секторов для загрузки DAP_Reserved2 db 00h; резерв DAP_BufOffset dw 00h; смещение DAP_BufSegment dw 00; сегмент DAP_NumberSector dq 00h; номер сектора DAP ends это все что я нашел по 42 функции int13. согласен, не заметил косяк с устройством, с которого читать. так а где его прописать то?