{Эххх - попробуй вот это :o}
Uses
Crt;
Var
Buf:array[1..512] of Char;
i:Integer;
Name:String;
Begin
ClrScr;
Name:='boot!sec.bin'#0;
WriteLn('Вставьте дискету и нажмите any key...');
asm
mov ah,0
int 16h
mov al,0 {Номер логического диска}
mov cx,1 {Количество секторов для чтения}
mov dx,0 {Номер стартового сектора}
lea bx,Buf {Смещение к нашему буферу}
int 25h {читаем}
end;
WriteLn('Прочитали...смотрим содержимое:');
{Выводим, пропуская перевод строки и возврат каретки, дабы не уехало...}
For i:=1 to 512 do If (Buf[i]<>#10) or (Buf[i]<>#13) then Write(Buf[i]);
asm
{Сохранить, прочитанный сектор на диск под именем Name}
mov ax,3D02h {Открыть файл}
lea dx,Name {Адрес имени}
inc dx {Пропускаем байт размера стринга}
int 21h
jnc @AlrExst {Уже есть}
mov ah,3Ch {Если нет - создаем}
mov cx,20h {Атрибут - архивный}
int 21h {Обращаемся к ДОС}
@AlrExst:mov bx,ax {Дескриптор}
mov ah,40h {Запись}
mov cx,512 {Кол-во байт для записи}
lea dx,Buf {Буфер с прочитанным содержимым нулевого сектора}
int 21h {пишем}
mov ah,3Eh {Закрыть файл}
int 21h
end;
WriteLn('Вставьте следующую дискету then press any key...');
{Можешь оформить в виде отдельных процедур}
{А заодно просмотреть содержимое бут-сектора на ЖД - файл boot!sec.bin}
asm
mov ah,0
int 16h
mov ax,3D02h {Открыть файл с содержимым бут-сектора}
lea dx,Name {Адрес имени}
inc dx {Пропускаем байт размера стринга}
int 21h
mov bx,ax {Сохр. дескриптор}
mov ah,3Fh {Читать из файла}
mov cx,512 {512 байт читать}
lea dx,Buf {Буфер для чтения}
int 21h {читаем}
mov ah,3Eh {Закрыть файл}
int 21h
mov al,0 {Номер логического диска}
mov cx,1 {Количество записываемых секторов}
mov dx,0 {Номер стартового сектора}
lea bx,Buf {Буфер}
int 26h {пишешь}
end;
End.
Работа с диском на физическом уровне |