Код (Text): dseg segment handle dw 0 buffer db 200 dup(?) eof db 0 file db 'file.asm', 0 text db 'Operation complete','$' dseg ends stkseg segment stack db 30 dup(?) stkseg ends code segment ASSUME CS:code,DS:dseg,SS:stkseg begin: mov ax, dseg mov DS, ax mov ax, stkseg mov SS, ax ; Open the file. xor ax, ax mov ah, 03Dh lea dx, file int 21h jc er mov [handle], ax mov bx, ax mov cx, 200 lea dx, buffer cikl: mov ah,03Fh int 21h jc close cmp cx, ax jz not_eof mov eof, 1 mov cx, ax not_eof: mov ah,040h mov bx, 1 int 21h cmp eof, 1 mov bx, handle jz close jmp cikl close: ;Close the file mov ah,3Eh int 21h er: mov ah, 04Ch int 21h code ends end begin Возник вопрос. Где храниться значения, которые указывают с какой позиции делать захват 200 байт? Т.е. я открываю файл, сохраняю адрес буффера, в который копирую. 1 Шаг он считывает с 0 байта(из файла) и записывает c начального адреса буфера, но на основе чего делается 2 шаг. я запустил под отлатчиком, и посмотрел, что на протяжении всего копирования(файл->stdout) адрес буффера не меняется...как тогда функция узнает, что надо начать следующий щаг скажем с 200 байта файла и записать в буфер со смщением 200 байт, если это не где в регистрах и в памяти не отражается.(хотя 100% отражается просто я не нащел.) В общем как?
Это называется файловым указателем и хранится в System File Table (SFT) - внутренней таблице DOS. Для управления файловым указателем используется функция 42h 21-го прерывания.