Сжатие строки символов путем удаления пробелов из исходной строки - Assembler
Формулировка задачи:
Помогите пожалуйста, нужен только текст кода программы ассемблера, а то с Англ.языком вообще плохо, да и вообще ассемблер не понимаю.
Задача:
Написать программу формирования сжатой строки символов. Сжатие заключается в удалении пробелов из исходной строки при просмотре ее справа налево.
Решение задачи: «Сжатие строки символов путем удаления пробелов из исходной строки»
textual
Листинг программы
format PE GUI 4.0 entry Start include 'win32a.inc' section '.text' code readable executable Start: mov esi,mesage+len mov edi,esi mov ecx,len+1 std @0: lodsb cmp al,' ' je @1 stosb @1: loop @0 cld inc edi invoke MessageBox, NULL, edi, title, MB_OK invoke ExitProcess,0 section '.data' data readable writeable title db 'FASM_WIN_32', 0 mesage db 'V i k t o r 0 7 9 0 ', 0 len = $-mesage section '.idata' import data readable writeable library kernel32, 'KERNEL32.DLL',user32, 'USER32.DLL' include 'api\kernel32.inc' include 'api\user32.inc'
Объяснение кода листинга программы
Код выполняет сжатие строки символов путем удаления пробелов из исходной строки. Список действий:
- Переменная
esi
получает адрес строкиmesage
, а переменнаяedi
копирует этот адрес. - Переменная
ecx
устанавливается равной сумме длины строкиlen
и 1. - В цикле до тех пор, пока не будет найден пробел (оператор
lodsb
загружает вal
следующий символ из строки, аcmp
сравнивает его со пробелом), выполняетсяstosb
(записывает символ в строку). - После нахождения пробела, цикл продолжается до тех пор, пока не будет найден следующий пробел.
- После окончания цикла, переменная
edi
увеличивается на 1, чтобы перейти к следующему символу после последнего пробела. - Вызывается функция
MessageBox
с аргументами (не включая последний):NULL
(0),edi
(адрес строки после последнего пробела),title
(строкаFASM_WIN_32
). - Вызывается функция
ExitProcess
с аргументом 0.
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д