Ввести строку и взамен пробелов поместить запятую с пробелом - Assembler
Формулировка задачи:
Требуется ввести строку символов, состоящую из отдельных слов, разделенных пробелами. В результирующей строке вставить вместо пробела запятую и пробел. Вывести на экран исходную и результирующую строки.[
Решение задачи: «Ввести строку и взамен пробелов поместить запятую с пробелом»
textual
Листинг программы
- .model small
- .stack 100h
- .data
- buf db 255, ?, 255 dup('$') ; для ввода строки с клавиатуры. Структура следующая: <ожидаемое число символов> <фактически введенное число символов> <сама строка>
- res db 255 dup ('$')
- lblSrc db 'Original string: $'
- lblRes db 'Result string: $'
- lblInp db 'Enter string: $'
- endl db 13,10,'$'
- .code
- begin:
- mov ax, @data
- mov ds, ax
- mov es, ax
- cld
- mov ah, 9
- lea dx, lblInp ; вывод сообщения о вводе строки
- int 21h
- mov ah, 0Ah ;
- lea dx, buf ; buf - буфер, куда будет помещена вводимая строка
- int 21h
- mov ah, 9
- lea dx, endl ; перевод строки (чтобы не стерлось то, что мы ввели)
- int 21h
- lea si, buf
- add si, 2 ; загружаем адрес строки в si. +2, чтобы не забирать мусор (см. коммент к buf)
- lea di, res ; загружаем адрес res в di
- mov al, [buf+1] ; для цикла. Фактически введенное кол-во символов.
- cbw ; al -> ax
- mov cx, ax ; число итераций в cx
- m: lodsb ; грузим очередной символ строки source в al
- cmp al, ' ' ; сравниваем с пробелом
- jne m2 ; если не равно пробелу - goto m2
- mov al, ',' ; иначе - в al пишем запятую
- stosb ; и эту запятую грузим в res
- mov al, ' ' ; в al записываем пробел
- m2: stosb ; грузим символ из al в res (destination)
- loop m ; цикл. goto m, пока cx != 0
- lea dx, lblSrc ; выводим все проделанное нами. "Original string: "
- mov ah, 9
- int 21h
- lea dx, buf+2 ; исходная строка
- int 21h
- lea dx, endl ; перевод строки
- int 21h
- lea dx, lblRes ; "Result string: "
- int 21h
- lea dx, res ; результирующая строка
- int 21h
- mov ah, 4ch
- int 21h
- ends
- end begin
Объяснение кода листинга программы
- В начале кода подключаются необходимые библиотеки и переменные.
- Переменная buf используется для ввода строки с клавиатуры. Её структура: <ожидаемое число символов> <фактически введенное число символов> <сама строка>.
- Переменная res будет использоваться для хранения результирующей строки.
- Затем происходит вывод сообщения о вводе строки.
- Происходит ввод строки с клавиатуры в буфер buf.
- Выводится перевод строки (чтобы не стерлось то, что мы ввели).
- Загружаются начальные адреса buf и res в si и di соответственно.
- Переменная al получает значение фактически введенного количества символов.
- Запускается цикл, который продолжается до тех пор, пока не будет достигнуто условие выхода из цикла.
- Внутри цикла происходит загрузка очередного символа строки source в al.
- Сравнивается загруженный символ с пробелом.
- Если символ не равен пробелу, то происходит переход к следующей итерации цикла.
- Если символ равен пробелу, то в al записывается запятая, а затем этот символ и запятая записываются в res.
- Затем в al записывается пробел.
- После окончания цикла происходит вывод сообщения
Original string:
, а затем исходная строка. - Выводится перевод строки.
- Выводится сообщение
Result string:
, а затем результирующая строка. - Завершающая команда, необходимая для корректного завершения работы программы.
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д