Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
ВМСиС_лаборАА.doc
Скачиваний:
0
Добавлен:
01.04.2025
Размер:
272 Кб
Скачать
☆

Задание

Требуется разработать и отладить программу, обеспечивающую преобразование, вид которого выбирается из списка, представленного ниже.

1. Вставить в строчку символ после заданного символа.

2. Сравнить две строки одинакового размера и создать новую строчку, из несовпадающих элементов.

3. Удалить заданный элемент в строке.

4. Найти заданное слово в строке.

5. Подсчитать количество отличий в двух строках одинакового размера.

6. Определить есть ли в строке повторяющиеся символы.

7. Сравнить две строки одинакового размера и создать новую строчку, из совпадающих элементов.

8. Подсчитать количество пробелов в строке.

9. Удалить повторяющиеся символы в конце строки.

Приложение

Таблица ASCII кодов

Основная таблица ASCII

Расширенная таблица ASCII (cp866)

Лабораторная работа 12. Создание программы обработки текстового файла.

Цель: освоение инструкций обработки строк.

Справочный материал.

5bH: создать новый файл.

Вход

AH = 5bH

DS:DX = адрес строки ASCIIZ с именем файла

CX = атрибут файла.

Выход

AX = код ошибки, если CF установлен или дескриптор файла если ошибок нет.

3dH: открыть файл.

Вход

AH = 3dH

DS:DX = адрес строки ASCIIZ с именем файла

AL = режим открытия

AL = 0 чтобы открыть для чтения

AL = 1 чтобы открыть для записи

AL = 2 чтобы открыть для чтения и записи

Выход

AX = код ошибки если CF установлен и дескриптор файла если нет ошибки.

3fH: читать файл.

Вход

AH = 3fH

BX = дескриптор файла

DS:DX = адрес буфера для чтения данных

CX = число считываемых байт

Выход

AX = код ошибки, если CF установлен или число действительно прочитанных байт,

CX байт данных считываются из файла или устройства с дескриптором, указанным в BX. Данные читаются с текущей позиции указателя чтения/записи файла и помещаются в буфер вызывающей программы, адресуемый через DS:DX.

Всегда нужно сравнивать возвращаемое значение AX (число прочитанных байт) с CX (запрошенное число байт):

если AX = CX, (и CF сброшен) - чтение было корректным без ошибок

если AX = 0, достигнут конец файла (EOF)

если AX < CX (но ненулевой):

при чтении с устройства - входная строка имеет длину AX байт

при чтении из файла - в процессе чтения достигнут EOF.

40H: писать в файл.

Вход

AH = 40H

BX = дескриптор файла

DS:DX = адрес буфера, содержащего записываемые данные

CX = число записываемых байт

Выход

AX = код ошибки, если CF установлен

AL = число реально считанных байт (лучший тест для ошибок)

CX байт данных записывается в файл или на устройство с дескриптором, заданным в BX. Данные берутся из буфера, адресуемого через DS:DX. Данные записываются, начиная с текущей позиции указателя чтения/записи файла.

Необходимо всегда сравнивать возвращаемое значение AX (число записанных байт) с CX (запрошенное число байт для записи).

если AX = CX, запись была успешной

если AX < CX, встретилась ошибка (например, переполнение).

Пример чтения из последовательного файла в буфер, созданный в программе.

Пусть на диске создан файл, местоположение которого следующее: D:\GR\text.txt. Требуется прочесть из файла 100 байт. Алгоритм программы чтения из файла предусматривает следующие действия.

Необходимо выделить буфер памяти размером 100 байт.

Выделить два байта для хранения FM (номера файла).

В сегменте данных определить переменную, содержащую описание местоположения файла на диске.

Открыть файл (функция 3D DOS вызывается командой int 21h).

Задать режим доступа к файлу (чтение).

Осуществить чтение данных (функция 3F DOS вызывается командой int 21h).

Закрыть файл (функция 3E DOS вызывается командой int 21h).

Обработать возможные ошибки манипулирования файлом.

Завершить программу обработки файла.

TITLE file

.model small

.stack 100h

.data

buf db 100 dup(?)

FM dw ? ; для хранения номера файла, получаемого от DOS

Name1 db ‘D:\group\text.txt’, 0 ; местоположение файла

file proc

mov ax, @data

mov ds, ax

mov ax, 3D00h ; в ah номер функции открытия файла, в al режим доступа

lea dx, Name1 ;в ds:dx адрес строки, содержащей идентификацию файла

int 21h ; вызов функции открытия файла

mov dl,'O' ; символ для идентификации ошибки, которая могла возникнуть

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

jc _ERR ; если ошибка возникает при открытии файла, то осуществляется

; переход (ближний) к обработке ошибки

;выполнение дальнего перехода осуществляется так: jnc mm

;jmp _ERR

;mm:

mov FM, ax ; если нет ошибок, то FM сохраняется

;чтение данных из файла

mov ah, 3Fh ; в ah задан номер функции чтения из файла

mov bx, FM ; регистр bx должен содержать логический номер файла

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

lea dx, buf ; в ds:dx указывается адрес буфера для ввода данных из файла

int 21h ; вызов функции чтения

mov dl, ‘R’

jc _ERR

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

mov ah, 3Eh ;в ah задан номер функции закрытия файла.

mov bx, FM

int 21h

mov dl, ‘C’

jc _ERR

jmp exit

_ERR: mov ah, 02h ; вывод символа, идентифицирующего возможную ошибку.

int 21h

exit: ret

file endp

end