Удалить дублирующие пробелы, и заменить их одним, используя цепочные команды (masm) - Assembler

Узнай цену своей работы

Формулировка задачи:

Здравствуйте. Пытаюсь решить задачу. Суть: удалить дублирующие пробелы и заменить их одним, используя цепочные команды (MASM). Всё компилируеться без ошибок, но по результату вместо новой строки какие-то непонятные символы. Буду признателен за любую помощь. Спасибо. Вот код, который получился:
.686
.model flat, stdcall
include macroses.inc
includelib kernel32.lib
 
.data
include vars.inc
str1 DWORD 100 DUP(?)
str2 DWORD 100 DUP(?)
 
.code
include procedures.inc
WinMain PROC
 
INIT_CONSOLE
READ_STRING str1 ;edx(ecx)
 
lea edi, str1
mov esi, edi
 
nextChar:
mov al, [esi]
cmp al, ' '
jne notSpace
or ah, ah
mov ah, 1
jz copySpace
inc esi
jmp nextChar
copySpace:
movsb
jmp nextChar
notSpace:
movsb
xor ah, ah
or al, al
jnz nextChar
 
mov str2, edi
WRITE_STRING str2
 
READLN_CONSOLE
INVOKE ExitProcess, 0
 
WinMain ENDP
end WinMain

Решение задачи: «Удалить дублирующие пробелы, и заменить их одним, используя цепочные команды (masm)»

textual
Листинг программы
lea edi, str1
mov esi, edi

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

  1. str1 - это переменная, которая содержит исходную строку.
  2. edi и esi - это регистры, которые используются в коде для хранения указателей на различные части строки.
  3. lea edi, str1 - это команда, которая загружает начальный адрес строки в регистр edi.
  4. mov esi, edi - это команда, которая копирует значение регистра edi в регистр esi, то есть оба регистра теперь указывают на одну и ту же область памяти.

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

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