Удаление символа из строки и перезапись в новую строку - 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

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

  1. l1 - начало цикла
  2. lodsb - загрузка байта из памяти в регистр AL
  3. cmp al,'D' - сравнение значения регистра AL со символом 'D'
  4. je l2 - если значение регистра AL равно 'D', то переход на метку l2
  5. stosb - запись байта из регистра AL в память
  6. l2 - начало цикла
  7. loop l1 - переход на метку l1
  8. В результате выполнения цикла, в памяти будет новая строка без символа 'D'

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

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