Удалить дублирующие пробелы, и заменить их одним, используя цепочные команды (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
Объяснение кода листинга программы
str1
- это переменная, которая содержит исходную строку.edi
иesi
- это регистры, которые используются в коде для хранения указателей на различные части строки.lea edi, str1
- это команда, которая загружает начальный адрес строки в регистрedi
.mov esi, edi
- это команда, которая копирует значение регистраedi
в регистрesi
, то есть оба регистра теперь указывают на одну и ту же область памяти.