Программирование на Ассемблере
Длина этого файла будет совпадать с длиной записанного
в него текста.
Теперь считаем данные из файла и убедимся, что он действительно содержит
нужный текст. Для этого, как нетрудно догадаться, можно воспользоваться
функцией Read, которая имеет такие же параметры, что и Write. Однако здесь
есть одна особенность: если в D3 указать число, большее чем длина файла, то
в буфер загрузится весь файл целиком, а в D0 возвратится количество реально
прочитанных байт. Начнем с резервирования памяти для буфера ввода: field: blk.b 100 ;резервируем 100 байт Для нашего примера 100 байт - это более чем достаточно. Однако для работы с
\"настоящими\" файлами Вам может понадобится буфер существенно большего
размера. Напишем теперь подпрограмму для чтения данных из файла. Будем использовать
регистр D2 для передачи ей указателя на буфер ввода: Read = -42 ;(6.5.2C)
...
readdata: ;* чтение из файла
move.l dosbase(PC),A6 ;база dos.library - в A6
move.l filehd(PC),D1 ;идентификатор файла - в D1
move.l #100,D3 ;читаем не больше 100 байт
;(в нашем случае прочтется
;весь файл)
jsr Read(A6)
rts ;возврат Использовать эту подпрограмму можно, например, так: move.l #mode_old,D2 ;\"старый\" режим
bsr openfile ;открываем файл
beq error ;ошибка!
move.l #field(PC),D2 ;адрес буфера ввода - в D2
bsr readdata ;вызов подпрограммы чтения
;данных из файла
move.l D0,D6 ;сохраняем число прочитанных
;байт в D6
bsr closefile ;закрываем файл
...
|