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
.
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д