Удалить пробелы в строке - Assembler

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

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

Попросили в универе сделать задание на ассемблере. Препод дал виртуалку DOS. Надо предоставить листинг программы и объяснить как он работает. Я заочник и препод объяснять не сильно хочет. Можете мне написать максимально просто и понятно программку по заданию, чтобы она была именно под DOS? Задание: "Удалить все пробелы в строке{mov ah,10}. (Пример: Мы все здесь.-> Мывсездесь.)"

Решение задачи: «Удалить пробелы в строке»

textual
Листинг программы
lea si,msg
mov di,si
lp: lodsb
cmp al,' '
jz lp
stosb
cmp al,0
jnz lp
mov ax,4c00h
int 21h
...
msg db 'Мы все умрем',0

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

  1. lea si,msg - инициализируем регистр SI адресной переменной MSG
  2. mov di,si - копируем значение регистра SI в регистр DI
  3. lp: lodsb - заносим в AL байт из строки, на которую указывает SI (проверяем, не является ли он нулевым), и повторяем этот шаг до тех пор, пока не встретим нулевой байт
  4. cmp al,' ' - сравниваем байт в AL со значением пробела (символ ' ')
  5. jz lp - если байт в AL равен значению пробела, то переходим к следующему шагу, иначе продолжаем
  6. stosb - записываем в байт по адресу DI байт из AL (в котором уже не должно быть пробелов)
  7. cmp al,0 - сравниваем байт в AL с нулем
  8. jnz lp - если байт в AL не равен нулю, то переходим к шагу 3, иначе переходим к следующему шагу
  9. mov ax,4c00h - выводим в AX код завершения программы (4C00h)
  10. int 21h - вызываем функцию завершения программы ...
  11. msg db 'Мы все умрем',0 - объявляем переменную MSG как строку с текстом Мы все умрем и символом 0 в конце (для указания на конец строки)

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


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

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

9   голосов , оценка 4.333 из 5
Похожие ответы