функция 3Fh, читаем в буфер данные из файла

Тема в разделе "WASM.ASSEMBLER", создана пользователем rubic_, 18 дек 2007.

  1. rubic_

    rubic_ Женя

    Публикаций:
    0
    Регистрация:
    9 июл 2007
    Сообщения:
    121
    Адрес:
    Омск
    Код (Text):
    1. dseg    segment
    2. handle  dw  0
    3. buffer  db  200 dup(?)
    4. eof     db  0
    5. file    db  'file.asm', 0
    6. text    db  'Operation complete','$'
    7. dseg    ends
    8. stkseg  segment stack
    9.     db  30 dup(?)
    10. stkseg  ends
    11. code    segment
    12. ASSUME  CS:code,DS:dseg,SS:stkseg
    13. begin:
    14.     mov     ax, dseg
    15.     mov     DS, ax
    16.     mov     ax, stkseg
    17.     mov     SS, ax
    18. ; Open the file.
    19.     xor     ax, ax
    20.     mov     ah, 03Dh
    21.     lea     dx, file
    22.     int     21h
    23.     jc      er
    24.     mov     [handle], ax
    25.     mov     bx, ax
    26.     mov     cx, 200
    27.     lea     dx, buffer
    28. cikl:
    29.     mov     ah,03Fh
    30.     int     21h
    31.     jc      close
    32.     cmp     cx, ax
    33.     jz      not_eof
    34.     mov     eof, 1
    35.     mov     cx, ax
    36. not_eof:   
    37.     mov     ah,040h
    38.     mov     bx, 1
    39.     int     21h
    40.     cmp     eof, 1
    41.     mov     bx, handle
    42.     jz      close
    43.     jmp     cikl
    44. close:
    45. ;Close the file
    46.  
    47.     mov     ah,3Eh
    48.     int     21h
    49.  
    50. er:
    51.     mov     ah, 04Ch
    52.     int     21h
    53. code    ends
    54.     end begin
    Возник вопрос. Где храниться значения, которые указывают с какой позиции делать захват 200 байт? Т.е. я открываю файл, сохраняю адрес буффера, в который копирую. 1 Шаг он считывает с 0 байта(из файла) и записывает c начального адреса буфера, но на основе чего делается 2 шаг. я запустил под отлатчиком, и посмотрел, что на протяжении всего копирования(файл->stdout) адрес буффера не меняется...как тогда функция узнает, что надо начать следующий щаг скажем с 200 байта файла и записать в буфер со смщением 200 байт, если это не где в регистрах и в памяти не отражается.(хотя 100% отражается просто я не нащел.) В общем как?
     
  2. Vov4ick

    Vov4ick Владимир

    Публикаций:
    0
    Регистрация:
    8 окт 2006
    Сообщения:
    581
    Адрес:
    МО
    Это называется файловым указателем и хранится в System File Table (SFT) - внутренней таблице DOS. Для управления файловым указателем используется функция 42h 21-го прерывания.