- •Им.В.И.Ульянова (Ленина)» (сПбГэту)
- •По дисциплине
- •140400.62 – “Электроэнергетика и электротехника" Санкт-Петербург
- •Методические указания к проведению лабораторного практикума по дисциплине “Вычислительные машины системы и сети” автор доц. Каф. Вт а.А. Валов
- •Необходимые пояснения.
- •Необходимые пояснения.
- •Необходимые пояснения.
- •Задание
- •Задание
- •Задание
- •Необходимые пояснения.
- •Необходимые пояснения.
- •Необходимые пояснения.
- •Задание
- •Задание
Задание
Требуется разработать и отладить программу, обеспечивающую преобразование, вид которого выбирается из списка, представленного ниже.
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
