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.