Функція АН=3Fh MS-DOS використовується для читання з файлу або пристрою. Регістр ВХ при цьому задає префікс файлу, DS:DX ‑ far-покажчик початку буферу, який приймає інформацію, СХ - число байтів які переносяться. При виході з функції прапор переносу CF дорівнює 0, якщо при читанні не виникло помилки. Значення в АХ при цьому повідомляє фактично перенесене число байтів. Якщо АХ=СХ, читання завершилося успішно. Якщо АХ<СХ, перенесено менше байтів, бо досягнуто кінець файлу. Якщо АХ=0, досягнуто кінець файлу, який функція не “побачила” під час попереднього зчитування інформації. Інформація завжди читається, починаючи із поточного положення покажчика запису-читання файлу. Якщо на виході з функції CF=1, це сигнал виникнення помилки при зчитуванні інформації. В цьому випадку MS-DOS записує в АХ код помилки.
Функція MS-DOS АН=40h використовується для запису у файл або пристрій. Як і раніше, регістр ВХ задає префікс файлу, DS:DX ‑ far-покажчик буферу, з якого передається інформація, СХ - число байтів які переносяться. Параметри при виході з функції ідентичні раніше розглянутим. Прапор переносу використовується як індикатор відсутності помилок, а АХ - як лічильник числа байтів які перенесено, або як покажчик коду помилки.
Дані функції можуть використовуватися з будь-якими префіксами, у тому числі і з префіксами, які посилаються на файли стандартного введення-виведення. При цьому вивід інформації відбувається набагато швидше порівняно зі спеціальними функціями MS-DOS консольного введення-виведення.
Фізичне перенесення інформації між комп’ютером і НМД може відбуватися тільки блоками по 512 байт за одне звернення до диску. Тому MS-DOS при файловому переносі реалізує внутрішню буферизацію даних. Це означає, що при читанні з диску зчитується один або декілька блоків по 512 байт, що розташовуються в внутрішній буфер системи. В програму ж переноситься число байтів які були в запиті. При наступній операції читання з диску, MS-DOS спочатку перевіряє, чи немає потрібних байтів у внутрішньому буфері. Якщо вони там є, звернення до диску не відбувається. Потрібні байти зчитуються з системного буферу. При записі, байти які необхідно перенести, спочатку переносяться у системний буфер. Коли там накопичується число байтів, кратне 512, цей блок відвантажується на диск. Внутрішня буферизація даних при запису на диск небезпечна втратою інформації. Наприклад, раптове вимкнення живлення призводить до руйнування частково заповненого буферу, ще не записаного на диск. Спеціальна операція відсічення (флешування) буферу викликає примусовий перенос частково заповненого буферу на диск. Цю операцію MS-DOS виконує завжди при закритті файлів, відкритих для запису. Флешування буферів, що використовуються для введення інформації, - це просто їхня очистка.
![]() |
![]() |
![]() |