Assembler. Лабораторная работа №6. (4 часа).
“Организация ввода-вывода данных.
Обработка строк с использованием цепочечных команд”.
Цели:
Ход работы:
1. Изучить (повторить) теоретический материал:
Тема 13. Использование системных ресурсов. Организация ввода-вывода данных.
Тема 14. Цепочечные команды. Обработка строк.
2. Получить (уточнить) у преподавателя номер своего варианта.
3. Выбрать из списка номер своего варианта:
4. Внимательно прочитать условие задачи, если возникли вопросы по условию, задайте их преподавателю.
5. Внимательно изучить пример и скачать файл rw.asm с процедурами ввода-вывода численной информации.
6. Разработать программу.
7. Протестировать программу.
8. Оформить отчет по лабораторной работе - в начале asm-файла записать как комментарий:
9. Сдать преподавателю выполненную работу: скопировать папку с файлами проектов (asm, obj, exe) в папку "Рабочий стол\ЛР-сдача\№группы_Фамилия_№ЛР", например, 29в_Петров_6. Оценки по проверенным работам можно посмотреть в электронном журнале.
;Дана строка текста. Заменить в нем символ 'и' на 'i'.
;Подсчитать количество замен. Организовать ввод данных с клавиатуры
;и вывод результатов на экран.
;====================================
.model small
.stack 100h
extrn write:proc ;внешняя процедура для вывода чисел
.data
;параметры для поля ввода:
Enter_String db 80 ;максимальная длина
Len_S db ? ;реальная длина
Str_Field db 80 dup(' ') ;поле ввода - цепочка
Ns db ' $' ;поле для размещения числа в строковом представлении для последующего вывода на экран
S2 db 13,10,'Введите строку: $'
S3 db 13, 10, 'Обработанная строка:',13,10,'$'
S4 db 13,10,'Для завершения нажмите <Enter>.$'
S5 db 13,10,'Количество произведенных замен <и> на <i> = $'
k dw 0
public Enter_String,Len_S,Str_Field,Ns
;==================================
.code
begin:
mov ax,@data ;инициализация сегментных регистров
mov ds,ax
mov es,ax
mov ah,9 ;вывод подсказки ввода
lea dx,S2
int 21h
mov ah,10 ;ввод строки
lea dx,Enter_String
int 21h
cld ;направление обработки по возрастанию адресов
lea di,Str_Field ;адрес цепочки
mov cl,Len_S ;длина цепочки
for: ;начало цикла
mov al,'и' ;образец поиска
jcxz vyvod ;если в сх ноль, то переход на вывод
repne scasb ;сканирование цепочки
je zamena ;если символ-образец найден в цепочке, то перейти на блок обработки (замены)
vyvod: ;вывод результата
mov al,'$' ;запись ограничителя вывода в конец цепочки
stosb
mov ah,9 ;вывод 'Обработанная строка:'
lea dx,S3
int 21h
mov ah,9 ;вывод обработанной строки-цепочки
lea dx,Str_Field
int 21h
mov ah,9 ;вывод'Количество произведенных замен <и> на <i>='
lea dx,S5
int 21h
mov ax,k
call write ;вывод числа k
mov ah,9 ;вывод 'Для завершения нажмите <Enter>.'
lea dx,S4
int 21h
mov ah,10 ;ожидание нажатия клавиши <Enter>
lea dx,Str_Field
int 21h
jmp exit ;переход на выход из программы
zamena: ;замена найденного символа
inc k
dec di
mov al,'i'
stosb
jmp for ;переход на начало цикла
exit: ;выход из программы
mov ah,4ch
int 21h
end begin
Индивидуальные задания
Составить программу, определяющую в строке количество заданных символов. Организовать ввод исходных данных (исходную строку и символ) с клавиатуры и вывод результата (количество символов) на экран. Для вывода численного значения можно использовать процедуру write из файла c:tasm/bin/primery/rw.asm.
Составить программу, заменяющую в строке один заданный символ на другой и определяющую количество произведенных замен. Организовать ввод исходных данных (исходную строку и два символа) с клавиатуры и вывод результатов (обработанную строку и количество замен) на экран. Для вывода численного значения можно использовать процедуру write из файла c:tasm/bin/primery/rw.asm.
Составить программу, заменяющую в строке два заданных символа (идущих подряд) на два других и подсчитывающую количество произведенных замен. Организовать ввод исходных данных (исходную строку и две пары символов) с клавиатуры и вывод результатов (обработанную строку и количество замен) на экран. Для вывода численного значения можно использовать процедуру write из файла c:tasm/bin/primery/rw.asm.
Составить программу, заменяющую в строке два заданных символа на один другой и подсчитывающую количество произведенных замен. Организовать ввод исходных данных (исходную строку, пару заменяемых символов и символ для замены) с клавиатуры и вывод результатов (обработанную строку и количество замен) на экран. Для вывода численного значения можно использовать процедуру write из файла c:tasm/bin/primery/rw.asm.
Составить программу, заменяющую в строке один заданный символ на два других и подсчитывающую количество произведенных замен. Организовать ввод исходных данных (исходную строку, заменяемый символ и пару символов для замены) с клавиатуры и вывод результатов (обработанную строку и количество замен) на экран. Для вывода численного значения можно использовать процедуру write из файла c:tasm/bin/primery/rw.asm.
Составить программу, удаляющую в строке заданный символ и подсчитывающую количество удалений. Организовать ввод исходных данных (исходную строку и удаляемый символ) с клавиатуры и вывод результатов (обработанную строку и количество удалений) на экран. Для вывода численного значения можно использовать процедуру write из файла c:tasm/bin/primery/rw.asm.
Составить программу, удаляющую в строке два, идущих подряд заданных символа и подсчитывающую количество удалений. Организовать ввод исходных данных (исходную строку и пару удаляемых символов) с клавиатуры и вывод результатов (обработанную строку и количество удалений) на экран. Для вывода численного значения можно использовать процедуру write из файла c:tasm/bin/primery/rw.asm.
Составить программу, вставляющую в строку за заданным символом другой заданный символ и подсчитывающую количество произведенных вставок. Организовать ввод исходных данных (исходную строку и два символа) с клавиатуры и вывод результатов (обработанную строку и количество вставок) на экран. Для вывода численного значения можно использовать процедуру write из файла c:tasm/bin/primery/rw.asm.
Составить программу, вставляющую в строку перед заданным символом два других заданных символа и подсчитывающую количество произведенных вставок. Организовать ввод исходных данных (исходную строку, символ и пару символов) с клавиатуры и вывод результатов (обработанную строку и количество вставок) на экран. Для вывода численного значения можно использовать процедуру write из файла c:tasm/bin/primery/rw.asm.
Составить программу, определяющую является ли заданная строка "перевертышом" (читается одинаково слева - направо и справа - налево). Организовать ввод исходных данных (исходную строку) с клавиатуры и вывод результата (сообщение "да" или "нет") на экран.
Составить программу, определяющую количество слов в заданной текстовой строке. Слова разделяются между собой одним, или несколькими пробелами. Организовать ввод исходных данных (исходную строку) с клавиатуры и вывод результатов (количество слов в строке) на экран. Для вывода численного значения можно использовать процедуру write из файла c:tasm/bin/primery/rw.asm.
Составить программу, определяющую количество предложений в заданном тексте. Предложения разделяются между собой точкой, вопросительным, или восклицательным знаком. Организовать ввод исходных данных (исходный текст) с клавиатуры и вывод результа (количество предложений в тексте) на экран. Для вывода численного значения можно использовать процедуру write из файла c:tasm/bin/primery/rw.asm.