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



         

Чтение из файла или устройства - часть 2


:prg07_ll.asm - программа чтения и вывода на экран содержимого файла. ;имя которого вводится в командной строке.

.data

filejiame db 128 dup (" ") ;буфер, в который будет помещен путь к файлу

point_fname dd file_name

string db 80 dup (" ")

len_stnng=$-string

point_string dd string

>handle dw 0 дескриптор файла

[size_f dd 0 :размер файла

.code

main: :копируем командную строку в filejiame

;вначале уберем (установкой указателя) ведущие пробелы в командной строке
:перед путем к файлу: movdi ,81h mov al," " mov ex. 128 repe scasb

dec di push di pop si

movax.@data -.адрес сегмента данных - в регистр АХ
mov es.ax :ax в es iTOvcl.ds:[80h] deccl

lea di .filejiame rep movsb push es pop ds

:--------открываем файл--......-----------------.........

moval.OOh :режим доступа - только чтение

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

movah.3dh ;номер функции DOS

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

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

mov handle.ax

;--------определяем размер файла-------------------------

raovbx.ax -.дескриптор файла - в bх mov al .2 xor ex. ex

xordx.dx :CX:DX =0 - нулевое смещение mov ah.42h

int 21h ;в DX:AX возвращается длина файла в байтах jc exit

:если ошибка :формируем полную длину в
edx shl eax.16 shld edx.eax.16 mov size_f.edx сохраним как условие выхода из программы при достижении снизу

;--------устанавливаем указатель на начало файла---.......

mov Ьх.handle :дескриптор файла - в Ьх

mov al .0

xor ex.ex

xordx.dx ;CX:DX =0 - нулевое смещение

mov ah,42h

int 21h :текущий указатель в начале файла

jc exit :если ошибка

;.........читаем файл по lenjstring байт................---

cycl: mov bx.handle :дескриптор файла в Ьх mov cx.lenjsthng

Ids dx.pointjstring :формируем указатель на строку string movah.3fh
:номер функции DOS int 21h :открываем файл jc exit ;переход в случае ошибки

;.........выводим на экран целиком.....---------.......----------

movbx.l стандартный дескриптор - экран

mov cx.len_string

Ids dx.point_string .формируем указатель на строку string movah.40h

;номер функции DOS

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

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

cwde расширяем количество выведенных байт

sub size_f.eax cmp size_f.О

jleexit :достигли конца файла

. jmp cycl

exit: :выход из программы

mov al .1 int 21h

.......

He забывайте после определения размера файла возвращать файловый указатель в нужное место файла.




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