Удалить пробелы в строке - 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
Объяснение кода листинга программы
lea si,msg
- инициализируем регистр SI адресной переменной MSGmov di,si
- копируем значение регистра SI в регистр DIlp: lodsb
- заносим в AL байт из строки, на которую указывает SI (проверяем, не является ли он нулевым), и повторяем этот шаг до тех пор, пока не встретим нулевой байтcmp al,' '
- сравниваем байт в AL со значением пробела (символ ' ')jz lp
- если байт в AL равен значению пробела, то переходим к следующему шагу, иначе продолжаемstosb
- записываем в байт по адресу DI байт из AL (в котором уже не должно быть пробелов)cmp al,0
- сравниваем байт в AL с нулемjnz lp
- если байт в AL не равен нулю, то переходим к шагу 3, иначе переходим к следующему шагуmov ax,4c00h
- выводим в AX код завершения программы (4C00h)int 21h
- вызываем функцию завершения программы ...msg db 'Мы все умрем',0
- объявляем переменную MSG как строку с текстомМы все умрем
и символом 0 в конце (для указания на конец строки)
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д