Удаление символа из строки и перезапись в новую строку - 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'
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д