ASM + C++ Как вывести в консоль ? - Assembler
Формулировка задачи:
Прикрепил файл .asm к проекту на с++ а в примере, который скачал указан лишь вывод в окно windows. А как вывести на консоль ? Вот код файла асм и файла с++
с++
asm
#include "stdafx.h" extern "C" { void hello_world_asm(); }; int main(int argc, char** argv) { hello_world_asm(); _getch(); return 0; }
PUBLIC hello_world_asm _TEXT SEGMENT EXTERN MessageBoxA: PROC EXTERN GetForegroundWindow: PROC hello_world_asm PROC push rbp ; save frame pointer mov rbp, rsp ; fix stack pointer sub rsp, 8 * (4 + 2) ; allocate shadow register area + 2 call GetForegroundWindow mov rcx, rax mov rdx, offset hello_msg mov r8, offset info_msg mov r9, 0 ; MB_OK and rsp, not 8 ; align stack to 16 bytes prior to API call call MessageBoxA mov rsp, rbp pop rbp ret hello_world_asm ENDP _TEXT ENDS _DATA SEGMENT hello_msg db "HELLO ASM WORLD", 0 info_msg db "Info", 0 buf dw 2048 DUP ('eb') _DATA ENDS END
Решение задачи: «ASM + C++ Как вывести в консоль ?»
textual
Листинг программы
.686P .MODEL Flat,StdCall OPTION CASEMAP:NONE INCLUDE \MASM32\INCLUDE\WINDOWS.INC INCLUDE \MASM32\INCLUDE\KERNEL32.INC INCLUDE \MASM32\INCLUDE\USER32.INC INCLUDE \MASM32\INCLUDE\MSVCRT.INC INCLUDELIB \MASM32\LIB\KERNEL32.LIB INCLUDELIB \MASM32\LIB\USER32.LIB INCLUDELIB \MASM32\LIB\MSVCRT.LIB .DATA Text DB 'Hello world!',0 .CODE Start: invoke crt_printf, ADDR Text invoke ExitProcess, NULL END Start
Объяснение кода листинга программы
В данном коде происходит следующее:
- Определение модели и настройка опций для сборки.
- Подключение необходимых файлов заголовков, содержащих объявления функций и структур.
- Подключение библиотек, которые будут использоваться при сборке.
- Определение секции .DATA, где объявляется переменная
Text
типа DB (байтовая строка) и инициализируется со значениемHello world!
. - Определение секции .CODE, содержащей исполняемый код программы.
- Метка
Start
, которая является точкой входа в программу. - Вызов функции
crt_printf
с аргументом - адресом переменнойText
. Эта функция используется для вывода форматированной строки в стандартный поток вывода. - Вызов функции
ExitProcess
с аргументомNULL
для завершения программы. - Завершение программы и метка
END Start
.
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д