Ввести строку и взамен пробелов поместить запятую с пробелом - Assembler

Узнай цену своей работы

Формулировка задачи:

Требуется ввести строку символов, состоящую из отдельных слов, разделенных пробелами. В результирующей строке вставить вместо пробела запятую и пробел. Вывести на экран исходную и результирующую строки.[

Решение задачи: «Ввести строку и взамен пробелов поместить запятую с пробелом»

textual
Листинг программы
  1. .model small
  2. .stack 100h
  3. .data
  4.     buf db 255, ?, 255 dup('$') ; для ввода строки с клавиатуры. Структура следующая: <ожидаемое число символов> <фактически введенное число символов> <сама строка>
  5.     res db 255 dup ('$')  
  6.     lblSrc db 'Original string: $'
  7.     lblRes db 'Result string: $'
  8.     lblInp db 'Enter string: $'
  9.     endl db 13,10,'$'
  10.  
  11. .code
  12. begin:
  13.     mov ax, @data
  14.     mov ds, ax
  15.     mov es, ax
  16.     cld
  17.     mov ah, 9
  18.     lea dx, lblInp ; вывод сообщения о вводе строки
  19.     int 21h
  20.     mov ah, 0Ah ;
  21.     lea dx, buf ; buf - буфер, куда будет помещена вводимая строка
  22.     int 21h
  23.     mov ah, 9
  24.     lea dx, endl ; перевод строки (чтобы не стерлось то, что мы ввели)
  25.     int 21h
  26.     lea si, buf
  27.     add si, 2 ; загружаем адрес строки в si. +2, чтобы не забирать мусор (см. коммент к buf)
  28.     lea di, res ; загружаем адрес res в di
  29.     mov al, [buf+1] ; для цикла. Фактически введенное кол-во символов.
  30.     cbw ; al -> ax
  31.     mov cx, ax ; число итераций в cx
  32. m:  lodsb ; грузим очередной символ строки source в al
  33.     cmp al, ' ' ; сравниваем с пробелом
  34.     jne m2 ; если не равно пробелу - goto m2
  35.     mov al, ',' ; иначе - в al пишем запятую
  36.     stosb ; и эту запятую грузим в res
  37.     mov al, ' ' ; в al записываем пробел
  38. m2: stosb ; грузим символ из al в res (destination)
  39.     loop m ; цикл. goto m, пока cx != 0              
  40.    
  41.     lea dx, lblSrc ; выводим все проделанное нами. "Original string: "
  42.     mov ah, 9
  43.     int 21h
  44.    
  45.     lea dx, buf+2 ; исходная строка
  46.     int 21h      
  47.    
  48.     lea dx, endl ; перевод строки
  49.     int 21h
  50.    
  51.     lea dx, lblRes ; "Result string: "
  52.     int 21h
  53.    
  54.     lea dx, res ; результирующая строка
  55.     int 21h
  56.    
  57.     mov ah, 4ch
  58.     int 21h    
  59. ends
  60.  
  61. end begin

Объяснение кода листинга программы

  1. В начале кода подключаются необходимые библиотеки и переменные.
  2. Переменная buf используется для ввода строки с клавиатуры. Её структура: <ожидаемое число символов> <фактически введенное число символов> <сама строка>.
  3. Переменная res будет использоваться для хранения результирующей строки.
  4. Затем происходит вывод сообщения о вводе строки.
  5. Происходит ввод строки с клавиатуры в буфер buf.
  6. Выводится перевод строки (чтобы не стерлось то, что мы ввели).
  7. Загружаются начальные адреса buf и res в si и di соответственно.
  8. Переменная al получает значение фактически введенного количества символов.
  9. Запускается цикл, который продолжается до тех пор, пока не будет достигнуто условие выхода из цикла.
  10. Внутри цикла происходит загрузка очередного символа строки source в al.
  11. Сравнивается загруженный символ с пробелом.
  12. Если символ не равен пробелу, то происходит переход к следующей итерации цикла.
  13. Если символ равен пробелу, то в al записывается запятая, а затем этот символ и запятая записываются в res.
  14. Затем в al записывается пробел.
  15. После окончания цикла происходит вывод сообщения Original string:, а затем исходная строка.
  16. Выводится перевод строки.
  17. Выводится сообщение Result string:, а затем результирующая строка.
  18. Завершающая команда, необходимая для корректного завершения работы программы.

ИИ поможет Вам:


  • решить любую задачу по программированию
  • объяснить код
  • расставить комментарии в коде
  • и т.д
Попробуйте бесплатно

Оцени полезность:

7   голосов , оценка 4.571 из 5

Нужна аналогичная работа?

Оформи быстрый заказ и узнай стоимость

Бесплатно
Оформите заказ и авторы начнут откликаться уже через 10 минут
Похожие ответы