Assembler. Лабораторная работа №6. (4 часа).

“Организация ввода-вывода данных.

Обработка строк с использованием цепочечных команд”.

Цели:

 

Ход работы:

1. Изучить (повторить) теоретический материал:

Тема 13. Использование системных ресурсов. Организация ввода-вывода данных.

Тема 14. Цепочечные команды. Обработка строк.

2. Получить (уточнить) у преподавателя номер своего варианта.

3. Выбрать из списка номер своего варианта:

1 2 3 4 5 6 7 8 9 10 11 12

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


Индивидуальные задания

Вариант 1.

  Составить программу, определяющую в строке количество заданных символов. Организовать ввод исходных данных (исходную строку и символ) с клавиатуры и вывод результата (количество символов) на экран. Для вывода численного значения можно использовать процедуру write из файла c:tasm/bin/primery/rw.asm.

Вариант 2.

  Составить программу, заменяющую в строке один заданный символ на другой и определяющую количество произведенных замен.  Организовать ввод исходных данных (исходную строку и два символа) с клавиатуры и вывод результатов (обработанную строку и количество замен) на экран. Для вывода численного значения можно использовать процедуру write из файла c:tasm/bin/primery/rw.asm.

Вариант 3.

  Составить программу, заменяющую в строке два заданных символа (идущих подряд) на два других и подсчитывающую количество произведенных замен. Организовать ввод исходных данных (исходную строку и две пары символов) с клавиатуры и вывод результатов (обработанную строку и количество замен) на экран. Для вывода численного значения можно использовать процедуру write из файла c:tasm/bin/primery/rw.asm.

Вариант 4.

  Составить программу, заменяющую в строке два заданных символа на один другой и подсчитывающую количество произведенных замен. Организовать ввод исходных данных (исходную строку, пару заменяемых символов и символ для замены) с клавиатуры и вывод результатов (обработанную строку и количество замен) на экран. Для вывода численного значения можно использовать процедуру write из файла c:tasm/bin/primery/rw.asm.

Вариант 5.

   Составить программу, заменяющую в строке один заданный символ на два других и подсчитывающую количество произведенных замен. Организовать ввод исходных данных (исходную строку, заменяемый символ и пару символов для замены) с клавиатуры и вывод результатов (обработанную строку и количество замен) на экран. Для вывода численного значения можно использовать процедуру write из файла c:tasm/bin/primery/rw.asm.

Вариант 6.

   Составить программу, удаляющую в строке заданный символ и подсчитывающую количество удалений. Организовать ввод исходных данных (исходную строку и удаляемый символ) с клавиатуры и вывод результатов (обработанную строку и количество удалений) на экран. Для вывода численного значения можно использовать процедуру write из файла c:tasm/bin/primery/rw.asm.

Вариант 7.

  Составить программу, удаляющую в строке два, идущих подряд заданных символа и подсчитывающую количество удалений. Организовать ввод исходных данных (исходную строку и пару удаляемых символов) с клавиатуры и вывод результатов (обработанную строку и количество удалений) на экран. Для вывода численного значения можно использовать процедуру write из файла c:tasm/bin/primery/rw.asm.

Вариант 8.

   Составить программу, вставляющую в строку за заданным символом другой заданный символ и подсчитывающую количество произведенных вставок. Организовать ввод исходных данных (исходную строку и два символа) с клавиатуры и вывод результатов (обработанную строку и количество вставок) на экран. Для вывода численного значения можно использовать процедуру write из файла c:tasm/bin/primery/rw.asm.

Вариант 9.

   Составить программу, вставляющую в строку перед заданным символом два других заданных символа и подсчитывающую количество произведенных вставок. Организовать ввод исходных данных (исходную строку, символ и пару символов) с клавиатуры и вывод результатов (обработанную строку и количество вставок) на экран. Для вывода численного значения можно использовать процедуру write из файла c:tasm/bin/primery/rw.asm.

Вариант 10.

 Составить программу, определяющую является ли заданная строка "перевертышом" (читается одинаково слева - направо и справа - налево). Организовать ввод исходных данных (исходную строку) с клавиатуры и вывод результата (сообщение "да" или "нет") на экран.

Вариант 11.

Составить программу, определяющую количество слов в заданной текстовой строке. Слова разделяются между собой одним, или несколькими пробелами. Организовать ввод исходных данных (исходную строку) с клавиатуры и вывод результатов (количество слов в строке) на экран. Для вывода численного значения можно использовать процедуру write из файла c:tasm/bin/primery/rw.asm.

Вариант 12.

Составить программу, определяющую количество предложений в заданном тексте. Предложения разделяются между собой точкой, вопросительным, или восклицательным знаком. Организовать ввод исходных данных (исходный текст) с клавиатуры и вывод результа (количество предложений в тексте) на экран. Для вывода численного значения можно использовать процедуру write из файла c:tasm/bin/primery/rw.asm.