Копирование строки - Assembler
Формулировка задачи:
Есть некая функция onLog(char), которая в свою очередь передает параметры другой функции.
Если статично задать msg db "Hello World", 0 то строка передается полностью, а если взять строку из rcx(сюда передается
строка из параметров onLog("Hello world")) то слово обрезается и получается "Hello wo"
Как это можно исправить?В асм всего пару дней..
заранее спасибо за ответы
Листинг программы
- .const
- Init dq 140019EA8h
- Sendmsg dq 140009148h
- .data?
- msg db ?
- .code
- onLog proc
- mov rax, [rcx]
- mov [offset msg], rax
- xor ecx, ecx
- call Init
- mov rcx, rax
- lea rdx, msg
- call Sendmsg
- ret
- onLog endp
- end
Решение задачи: «Копирование строки»
textual
Листинг программы
- .const
- Init dq 140019EA8h
- Printf dq 140009148h
- .code
- onLog proc
- mov rbp, [rcx]
- xor ecx, ecx
- call Init
- mov rcx, rax
- mov rdx, rbp
- call Printf
- ret
- onLog endp
- end
Объяснение кода листинга программы
.const - это сегмент, в котором хранятся константы. Init - это функция, которая инициализирует сегмент стека и регистры. Printf - это функция, которая выводит строку на экран. onLog - это процедура, которая вызывает функцию Init, сохраняет в стеке адрес возврата, затем вызывает функцию Printf.
- onLog proc - процедура, которая выполняет действия при вызове.
- mov rbp, [rcx] - перенос в rbp адреса из rcx.
- xor ecx, ecx - обнуление ecx.
- call Init - вызов функции Init.
- mov rcx, rax - перенос в rcx содержимого rax.
- mov rdx, rbp - перенос в rdx содержимого rbp.
- call Printf - вызов функции Printf.
- ret - завершение процедуры.
- onLog endp - завершение определения процедуры.
- end - конец программы.
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д