чтение сектора

Тема в разделе "WASM.ASSEMBLER", создана пользователем dps86, 19 мар 2009.

  1. dps86

    dps86 New Member

    Публикаций:
    0
    Регистрация:
    16 янв 2009
    Сообщения:
    28
    объясните, плиз, чем отличается чтение сектора через int13h от int25h(абсолютное чтение )
     
  2. MirrorBlack

    MirrorBlack Алексей

    Публикаций:
    0
    Регистрация:
    21 июн 2008
    Сообщения:
    249
    Адрес:
    Moscow
    Дык собственно int 13h - функция bios, а int 25h досовская.
    Для того чтоб использовать int 25h должен быть загружен DOS.
    Отличие в нумерации устройств (см. замечания от Pavia)
     
  3. Pavia

    Pavia Well-Known Member

    Публикаций:
    0
    Регистрация:
    17 июн 2003
    Сообщения:
    2.409
    Адрес:
    Fryazino
    dps86
    Первое сервис BIOS вторая сервис Dos.
     
  4. cppasm

    cppasm New Member

    Публикаций:
    0
    Регистрация:
    18 июл 2006
    Сообщения:
    923
    Плюс через int 13h сектора номеруются относительно начала физичекого диска, а у int 25h - относительно начала раздела.
     
  5. Memphis

    Memphis New Member

    Публикаций:
    0
    Регистрация:
    23 окт 2008
    Сообщения:
    104
    MirrorBlack
    Также не помешает AH = 48h (получить параметры дисковода) - напомню батеньке, что функции ah=4xh для int 13h не будут работать для флопа (сразу видно, никогда не заглядывал отладчиком/дизассемблером в Int 13 для флопа).
     
  6. dps86

    dps86 New Member

    Публикаций:
    0
    Регистрация:
    16 янв 2009
    Сообщения:
    28
    мне не нужен флоп. мне нужно читать с винта.
    поюзал поисковики, по 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 es:lol: GROUP
    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 так до конца и не понял. кстати вывод инфы на экран тоже почему то не пашет. пробовал выводить хотя бы один символ, записанный мной в ручную. не работает
     
  7. Phantom_84

    Phantom_84 New Member

    Публикаций:
    0
    Регистрация:
    6 июн 2007
    Сообщения:
    820
    Модуль ROM? :)

    DAP_BufSegment:lol: AP_BufOffset - это адрес буфера, в который читаются данные - без него ничего "пахать" не будет.
     
  8. dps86

    dps86 New Member

    Публикаций:
    0
    Регистрация:
    16 янв 2009
    Сообщения:
    28
    да, расширение ром-биоса. (все вопросы с запуском решены, все запускается нормально, но только лишь запускается, не более)
    в чем косяк то, почему может не работать чтение?

    а почему
    mov ax,seg BUF
    mov Packet.DAP_BufSegment,ax

    почему бы не написать
    mov ax, offset BUF
    или
    lea ax, BUF
    (это какая-то специфическая особенность?)
     
  9. Phantom_84

    Phantom_84 New Member

    Публикаций:
    0
    Регистрация:
    6 июн 2007
    Сообщения:
    820
    Сегментный адрес и внутрисегментное смещение - это разные вещи. Неужели это не понятно?! Нужно писать и то, и другое. Или, если адрес буфера заранее известен, прописать его непосредственно в образе DAP.
     
  10. Memphis

    Memphis New Member

    Публикаций:
    0
    Регистрация:
    23 окт 2008
    Сообщения:
    104
    dps86
    мне не нужен флоп. мне нужно читать с винта - вам виднее. Только в упор в вашем фрагменте не вижу, какое устройство/железо юзать собираетесь по Int 13h?
    Код (Text):
    1.  mov     cx,cs
    2. ;        assume  es:DGROUP
    3.         mov     es,cx                   ; Устанавливаем сегмент данных равным сегменту кода
    4.         mov     ds,cx                   ; Устанавливаем сегмент данных равным сегменту кода
    5.        
    6.  
    7.         mov ax,offset BUF
    8.         mov Packet.DAP_BufOffset,ax
    9.         xor ax,ax
    10.         mov ax,seg BUF
    11.         mov Packet.DAP_BufSegment,ax
    12.         xor ax,ax
    13.  
    14.         mov ah,42h
    15.         mov si,offset Packet
    16.         int 13h
     
  11. dps86

    dps86 New Member

    Публикаций:
    0
    Регистрация:
    16 янв 2009
    Сообщения:
    28
    структура
    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. согласен, не заметил косяк с устройством, с которого читать. так а где его прописать то?
     
  12. Phantom_84

    Phantom_84 New Member

    Публикаций:
    0
    Регистрация:
    6 июн 2007
    Сообщения:
    820
    В регистре dl. Внимательнее нужно читать доки по прерываниям BIOS.