Работа со строками. Удалить из строки символы в скобках inline assembler.
Формулировка задачи:
Удалить из строки символы в скобках inline assembler. Подскажите в какую сторону копать...
Решение задачи: «Работа со строками. Удалить из строки символы в скобках inline assembler.»
textual
Листинг программы
.model small .386 .stack 100h .data var db 'i love (like) asm!' len equ $-var .code start: mov ax,@data mov ds,ax mov es,ax mov al,'(' lea di,var mov cx,len repne scasb mov si,di mov al,')' repne scasb mov bx,cx dec si cld mov cx,di sub cx,si inc cx mov si,di dec di big: push cx push si push di mov cx,bx shift: lodsb stosb loop shift mov byte ptr [di],0 pop di pop si dec si dec di pop cx loop big mov ah,4Ch mov al,00h int 21h end start
Объяснение кода листинга программы
Выполняемый код на языке Assembler выполняет следующие действия:
- Задаёт модель памяти как
small
и сегментный регистр данных на начало кучи. - Выделяет стек размером 100 байт.
- Определяет строку в сегменте данных, в которой нужно удалить символы в скобках.
- Вычисляет длину строки как смещение конца строки от начала сегмента данных.
- Перемещает сегментный регистр данных в регистр es.
- Перемещает символ '(' в регистр al.
- Перемещает указатель на начало строки в регистр di.
- Перемещает длину строки в регистр cx.
- Повторяет до тех пор, пока не встретит символ ')', сдвигая указатель на следующий символ и уменьшая счётчик длины на 1.
- Перемещает в регистр bx значение счётчика длины строки.
- Уменьшает значение счётчика длины на 1 и сохраняет в отдельной переменной si.
- Устанавливает направление перебора в прямом порядке (для повторения цикла).
- Начинает цикл, пока не будут выполнены условия: счётчик длины больше или равен нулю и счётчик строки больше нуля.
- Выполняет повторное копирование строки без символов в скобках.
- Заполняет байтом нулевых значений все свободные ячейки памяти, начиная с адреса di.
- Возвращает в регистры di, si, bx значения, которые были до выполнения цикла.
- Перемещает в регистр ah код функции 4Ch (выход из программы).
- Перемещает в регистр al код завершения программы 00h.
- Вызывает функцию 21h (код выхода в BIOS).
- Конец программы.
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д