Копирование строки - Assembler

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

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

Есть некая функция onLog(char), которая в свою очередь передает параметры другой функции. Если статично задать msg db "Hello World", 0 то строка передается полностью, а если взять строку из rcx(сюда передается строка из параметров onLog("Hello world")) то слово обрезается и получается "Hello wo" Как это можно исправить?В асм всего пару дней.. заранее спасибо за ответы
Листинг программы
  1. .const
  2. Init dq 140019EA8h
  3. Sendmsg dq 140009148h
  4. .data?
  5. msg db ?
  6. .code
  7. onLog proc
  8. mov rax, [rcx]
  9. mov [offset msg], rax
  10. xor ecx, ecx
  11. call Init
  12. mov rcx, rax
  13. lea rdx, msg
  14. call Sendmsg
  15. ret
  16. onLog endp
  17. end

Решение задачи: «Копирование строки»

textual
Листинг программы
  1. .const
  2. Init dq 140019EA8h
  3. Printf dq 140009148h
  4. .code
  5. onLog proc
  6. mov rbp, [rcx]
  7. xor     ecx, ecx
  8. call Init
  9. mov     rcx, rax
  10. mov     rdx, rbp
  11. call Printf
  12. ret
  13. onLog endp
  14. end

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

.const - это сегмент, в котором хранятся константы. Init - это функция, которая инициализирует сегмент стека и регистры. Printf - это функция, которая выводит строку на экран. onLog - это процедура, которая вызывает функцию Init, сохраняет в стеке адрес возврата, затем вызывает функцию Printf.

  1. onLog proc - процедура, которая выполняет действия при вызове.
  2. mov rbp, [rcx] - перенос в rbp адреса из rcx.
  3. xor ecx, ecx - обнуление ecx.
  4. call Init - вызов функции Init.
  5. mov rcx, rax - перенос в rcx содержимого rax.
  6. mov rdx, rbp - перенос в rdx содержимого rbp.
  7. call Printf - вызов функции Printf.
  8. ret - завершение процедуры.
  9. onLog endp - завершение определения процедуры.
  10. end - конец программы.

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


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

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

14   голосов , оценка 4 из 5

Нужна аналогичная работа?

Оформи быстрый заказ и узнай стоимость

Бесплатно
Оформите заказ и авторы начнут откликаться уже через 10 минут