Работа с файлами на языке Ассемблер - Студенческий научный форум

XII Международная студенческая научная конференция Студенческий научный форум - 2020

Работа с файлами на языке Ассемблер

Бушуев М.В. 1, Абрамова О.Ф. 1
1ВПИ (филиал) ВолгГТУ
 Комментарии
Текст работы размещён без изображений и формул.
Полная версия работы доступна во вкладке "Файлы работы" в формате PDF

Введение

Файл – это совокупность данных, которая хранится на некотором внешнем носителе (флеш-накопитель, жесткий диск) и может загрузиться в ОЗУ по мере необходимости.

В настоящее время любая программа, будь то устаревшая или современная, использует файлы и работает с ними: файлы постоянно нужно открывать, закрывать, создавать, удалять, записывать, считывать. Программы чаще всего используют файлы в качестве хранилищ, в которые записываются произвольные данные: например, настройки программы, её данные. Они предоставляют возможность хранить данные даже после завершения работы программы, что может использоваться для передачи данных другим программам или различными запусками одной и той же программы. К тому же, данные, с которыми работает программа, могут быть очень большими и размера ОЗУ может не хватить, но файлы помогают решить эту проблему.

Инструменты для работы с файлами есть практически во всех языках программирования, и Ассемблер не исключение, пусть и инструментов меньше, и работать с ними намного сложнее.

Файлы в основном бывают 2 видов: текстовые и бинарные. В данной статье рассматривается работа именно с текстовыми файлами.

Операции по работе с файлами

Создание файла осуществляется с помощью функции 3сH прерывания 21h. В регистр DX должен лежать путь до файла в формате строки, которая заканчивается нулевым байтом (например,“C:\путь\файл”,0). Важно замечание: если файл уже существует, то он будет полностью очищен. В регистр CX можно указать атрибуты файла, но не обязательно. При возникновении ошибки создания Carry Flag примет значение единицы, а в AX будет код ошибки. Если ошибки нет, то в регистре AX будет храниться дескриптор (идентификатор) файла.

Открытие файла осуществляется с помощью функции 3dH прерывания 21h. Как и при создании файла, путь до открываемого файла должен лежать в DX. В AL записывается режим открытия файла(0 – только чтение, 1-только запись, 2 – чтение и запись). Закрытие файла, дескриптор которого находится в BX, производится функцией 3eH.

С помощью функции 40h осуществляется запись данных в файл. В BX должен храниться дескриптор файла, в DX- адрес буфера, содержащего записываемые данные, в CX- число записываемых байт. После записи в регистре AL будет храниться число считанных байт.

Функция 3FH отвечает за чтение данных из файла. Данные на вход аналогичны тем, что подаются для записи: в DX- адрес буфера для чтения данных, в CX – число считываемых байт. В результате в AX будет храниться число прочитанных байт.

Пример программы

Для демонстрации функций предположим, что имеется программа, которая позволяет работать с личными электроприборами. Пользователь вводит устройства: название, мощность, количество, время работы. Данные хранятся в оперативной памяти, и после выключение программы все данные исчезнут. Чтобы избежать этой проблемы, нужно хранить введенные пользователем устройства в файле. Рассмотрим программную реализацию ранее описанных операций с файлами в контексте данной программы:

data segment;сегмент данных

device struc ;структура прибор

device_name db 30 dup('$') ;название прибора

power dw ?;мощность прибора

num db ?;количество таких приборов

time db ?;время работы устройства в день

device ends

;устройство

lamp device <'Lampa',150,2,4>

;необходимые данные для операции с файлами

filename db 'database.txt',0;название файла

handle dw ?;дескриптор файла

buffer dw ?;буфер для записи

data ends

assume cs:code,ds:data

code segment;сегмент кода

start:

mov ax,data;инициализация сегмента данных

mov ds,ax

;создание файла

mov ah,3Ch

mov dl,filename;названиефайла

mov cx,0;без атрибутов

int 21h

mov [handle],axhandle хранится дескриптор созданного файла

;запись данных в файл

mov ah,40h

mov si,buffer;запишем в файл

mov lamp.power,si;мощность лампы

mov dx,buffer;записываемые данные

mov bx,[handle]; в bx дескриптор файла,в которой будем записывать данные

mov cx,2;размер данных(мощность имеет тип dw-2 байта)

int 21h

;закрытие файла

mov ah,3Eh

mov bx,[handle];дескриптор закрываемого файла

int 21h

;открытие файла

mov ah,3Dh

mov dl,filename;название файла

mov cx,0;атрибутов нет

mov al,0;режим открытия - только чтение

int 21h

mov [handle],ax

;считывание файла

mov ah,3Fh

mov bx,[handle];дескриптор считываемого файла

mov dx,buffer;буффер для данных

mov cx,4;количество считываемых байт

int 21h

mov ax,buffer;считали мощность лампы

mov lamp.power,ax;из файла

;снова закроем файл

mov ah,3Eh

mov bx,[handle]

int 21h

mov ax,4c00h;выход из программы

int 21h

code ends

end start

Заключение

Организацию работы с файлами на Ассемблере непросто освоить, ведь она гораздо сложнее, чем на языках высокого уровня. Однако оно того стоит, ведь это дает множество бесценных возможностей. Без использования файлов практически любая программа не имеет практического смысла. Практически все, что написано на ассемблере – драйвера, вирусы, антивирусы, элементы операционной системы - используют файлы для самых различных целей. Таким образом, любой программист, использующий язык Ассемблер для написания программ, должен владеть навыком работы с файлами.

Библиографические ссылки

Будковский, Н.В. Assembler – актуально ли это? [Электронный ресурс] / Н.В. Будковский, О.Ф. Абрамова // Студенческий научный форум – 2019 : доклады XI международной студенческой электронной научной конференции. Направление «Технические науки» (секция «Актуальные проблемы компьютерной визуализации») / РАЕ. - Москва, 2019. - Режим доступа : https://scienceforum.ru/2019/forum.

Моргунова, О.М. Есть ли будущее у Ассемблера? [Электронный ресурс] / О.М. Моргунова, О.Ф. Абрамова // Студенческий научный форум – 2019 : доклады XI международной студенческой электронной научной конференции. Направление «Технические науки» (секция «Актуальные проблемы компьютерной визуализации») / РАЕ. - Москва, 2019. - Режим доступа : https://scienceforum.ru/2019/forum.

Муравьев, Е.Г. Как я изучал Ассемблер: добрые советы будущим товарищам по несчастью [Электронный ресурс] / Е.Г. Муравьев, О.Ф. Абрамова // Студенческий научный форум – 2019 : доклады XI международной студенческой электронной научной конференции. Направление «Технические науки» (секция «Актуальные проблемы компьютерной визуализации») / РАЕ. - Москва, 2019. - Режим доступа : https://scienceforum.ru/2019/forum.

Цветков, И.А. Программное обеспечение для ассемблирования [Электронный ресурс] / И.А. Цветков, О.Ф. Абрамова // Студенческий научный форум – 2019 : доклады XI международной студенческой электронной научной конференции. Направление «Технические науки» (секция «Актуальные проблемы компьютерной визуализации») / РАЕ. - Москва, 2019. - Режим доступа : https://scienceforum.ru/2019/forum.

Просмотров работы: 1224