Удаление символа из строки и перезапись в новую строку - Assembler
Формулировка задачи:
Нужно написать программу которая получает две строки и символ и удаляет символ из 1 строки , записывает результат во вторую строку и выводит обе строки на экран.
Вот почти рабочий код. Только он почему-то пропускает все символы до указанного "D". Можете подсказать в чём ошибка?
Листинг программы
- TITLE Program Template (Stack.asm)
- ; Testing PUSH and POP, 16-bit and 32-bit operands
- INCLUDE Irvine32.inc
- .data
- sir1 BYTE "ABCDEFGH",0
- sir2 BYTE 100 DUP(?)
- .code
- main PROC
- mov esi,OFFSET sir1 ; Адрес 1 строки
- mov edi,OFFSET sir2
- ;sirului de scanat
- mov ecx,LENGTHOF sir1 ; счётчик
- cld ; direction = forward
- l1:
- cmp byte ptr [esi],'D' ; поиск
- jne numuta
- mov ebp,esi
- inc esi
- push esi
- push cx
- inc cx
- m:
- mov al,byte ptr [esi]
- mov byte ptr [edi],al
- inc esi
- inc edi
- loop m
- pop cx
- pop esi
- numuta:
- inc esi
- loop l1
- mov edx,OFFSET sir2 ;вывод 2 строки
- call WriteString
- exit
- main ENDP
- END main
Решение задачи: «Удаление символа из строки и перезапись в новую строку»
textual
Листинг программы
- l1:lodsb
- cmp al,'D'
- je l2
- stosb
- l2:loop l1
Объяснение кода листинга программы
l1
- начало циклаlodsb
- загрузка байта из памяти в регистр ALcmp al,'D'
- сравнение значения регистра AL со символом 'D'je l2
- если значение регистра AL равно 'D', то переход на меткуl2
stosb
- запись байта из регистра AL в памятьl2
- начало циклаloop l1
- переход на меткуl1
- В результате выполнения цикла, в памяти будет новая строка без символа 'D'
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д