Сжатие строки символов путем удаления пробелов из исходной строки - 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'

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

Код выполняет сжатие строки символов путем удаления пробелов из исходной строки. Список действий:

  1. Переменная esi получает адрес строки mesage, а переменная edi копирует этот адрес.
  2. Переменная ecx устанавливается равной сумме длины строки len и 1.
  3. В цикле до тех пор, пока не будет найден пробел (оператор lodsb загружает в al следующий символ из строки, а cmp сравнивает его со пробелом), выполняется stosb (записывает символ в строку).
  4. После нахождения пробела, цикл продолжается до тех пор, пока не будет найден следующий пробел.
  5. После окончания цикла, переменная edi увеличивается на 1, чтобы перейти к следующему символу после последнего пробела.
  6. Вызывается функция MessageBox с аргументами (не включая последний): NULL (0), edi (адрес строки после последнего пробела), title (строка FASM_WIN_32).
  7. Вызывается функция ExitProcess с аргументом 0.

ИИ поможет Вам:


  • решить любую задачу по программированию
  • объяснить код
  • расставить комментарии в коде
  • и т.д
Попробуйте бесплатно

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

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