Ввести строку и взамен пробелов поместить запятую с пробелом - 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:
, а затем результирующая строка. - Завершающая команда, необходимая для корректного завершения работы программы.
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д