FCB - File control block - метод доступа к файлам не через указатель (как сейчас), а через своеобразную структуру длинной 25h байт. В которой указывался диск, имя файла, дата время создания файла, размер файла хранились указатели на текущую позицию чтения/записи в файле, а также размер блока записи/чтения при блочном доступе. Для каждой функции (открытия, закрытие, чтение, запись) требовалось DS:DX указывать на эту структуру, а её саму заботливо хранить.
(Сейчас при доступе через handle, вероятннее всего такуюже структуру хранит сама система, а мы имеем её адрес.)
Для начала работы с FCB необходимо было задать диск имя файла (в формате 11 символов - 8 ися 3 расширение без точки) и открыть файл. Все остальные поля заполнялись системой.
CSEG segment
assume cs:CSEG, ds:CSEG, ss:CSEG, es:CSEG
org 100h
start:
mov ah,0fh ;<<<<
mov dx,offset booz
int 21h
mov ah,1ah ; установить DMA (за размером сам следи)
mov dx,offset buf
int 21h
mov ah,27h ; чтение CX байт
mov dx,offset booz
mov bx,dx
mov word ptr [bx+0eh],1;размер записи - 1 байт чтобы было проще
mov cx,3
int 21h
mov bx,offset buf
mov [bx],13ebh; вставляем свой jmp
mov bx,offset booz
mov word ptr [bx+21h],0 ;сбрасываем номер записи в 0 DWORD
mov word ptr [bx+21h+2],0 ;
mov ah,28h ; записываем CX (3) байта - т.е. наш JMP
mov dx,offset booz
mov cx,3
int 21h
mov ah,10h ; закрываем файл (до этого можно изменить дату, время, и даже размер файла в FCB - и это все сохранится... файл урежется или увеличится)
int 21h
int 20h
BOOZ db 0 ; диск = 0 - текущий, 1=дискета, 3-C, 4-D и так далее
name db 'PRET EXE' ;файл PRET.EXE
db 25h-12 dup (0) ; остальное система заполнит сама
buf db 512 dup (0) ; буффер для чтения записи т.н. DMA по умолчанию 128 байт по адресу cs:80h
ends cseg
end start
вот примерно так.
Ответ отправил: Стас (статус: Практикант)
Отправлен: 10.08.2005, 01:46 Оценка за ответ: 5