Сборник по задачам и примерам Assembler



         

Чтение из файла или устройства



Чтение из файла или устройства

Чтение из файла в область памяти осуществляется функцией 3Fh.

Вход: АН = 3Fh; BX = дескриптор файла; СХ = количество байтов для чтения; DS-.DX — указатель на область памяти, в которую помещаются прочитанные байты. Выход: CF = 0 — АХ = число действительно прочитанных байтов из файла; CF = 1 — АХ = код ошибки: 5 — в доступе отказано; 6 — недопустимый дескриптор.

Чтение данных производится начиная с текущей позиции в файле, которая после успешного чтения смещается на значение, равное количеству прочитанных байтов. Если в качестве файла используется стандартная консоль (клавиатура), то чтение производится до первого символа CR (carriage return) с кодом 0dh, соответствующего нажатию клавиши Enter. Это, кстати, еще один способ ввода " Данных с клавиатуры в программу. Кроме символов введенной строки в ее конец помещаются символы 0dh и Oah. Это необходимо учитывать при задании размера буфера для ввода. Способ ввода данных с экрана с помощью функции 3Fh . стрирует приведенный ниже пример программы.

:prg07_10.asm - программа демонстрации ввода данных с экрана с помощью функции 3Fh.

.data

string db 80 dup Г ") 1en_string=$-string point_fname dd string

.code

:.........вводим с экрана......-----.....----------------

movbx.O стандартный дескриптор - клавиатура

mov cx.len_string

Ids dx.point_fname:формируем указатель на строку string

movah,3fh ;номер функции DOS

int 21h

jc exit :переход в случае ошибки ;---------выводим на экран---------------------...........

movbx.l стандартный дескриптор - экран :две строки ниже в данном случае можно опустить

mov ex.len_string

Ids dx.point_fname;0opMnpyeM указатель на строку string

movah.40h ;номер функции DOS

int 21h открываем файл

jc exit :переход в случае ошибки

Для демонстрации работы функции с дисковым файлом приведем программу чтения и вывода на экран содержимого файла, имя которого вводится в командной строке. Побочная цель этой программы — научиться обрабатывать в программе командную строку DOS. Поясним последний момент. Содержимое командной строки, следующее за именем программы при ее вызове и называемое хвостом команды, помещается в префикс программного сегмента (PSP) со смещением 80h от его начала и максимально имеет размер 128 байт. Первый байт этой области содержит длину хвоста команды, а первый символ хвоста, при его наличии, располагается со смещением 81h от начала PSP. Последний символ хвоста команды — всегда 0dh. Начало PSP найти очень легко — когда программа загружается в память для исполнения, то загрузчик устанавливает регистры ES и DS равными адресу PSP.




Содержание  Назад  Вперед