ASM + C++ Как вывести в консоль ? - Assembler

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

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

Прикрепил файл .asm к проекту на с++ а в примере, который скачал указан лишь вывод в окно windows. А как вывести на консоль ? Вот код файла асм и файла с++ с++
Листинг программы
  1. #include "stdafx.h"
  2. extern "C"
  3. {
  4. void hello_world_asm();
  5. };
  6. int main(int argc, char** argv)
  7. {
  8. hello_world_asm();
  9. _getch();
  10. return 0;
  11. }
asm
Листинг программы
  1. PUBLIC hello_world_asm
  2. _TEXT SEGMENT
  3. EXTERN MessageBoxA: PROC
  4. EXTERN GetForegroundWindow: PROC
  5. hello_world_asm PROC
  6. push rbp ; save frame pointer
  7. mov rbp, rsp ; fix stack pointer
  8. sub rsp, 8 * (4 + 2) ; allocate shadow register area + 2
  9. call GetForegroundWindow
  10. mov rcx, rax
  11. mov rdx, offset hello_msg
  12. mov r8, offset info_msg
  13. mov r9, 0 ; MB_OK
  14. and rsp, not 8 ; align stack to 16 bytes prior to API call
  15. call MessageBoxA
  16. mov rsp, rbp
  17. pop rbp
  18. ret
  19. hello_world_asm ENDP
  20. _TEXT ENDS
  21.  
  22. _DATA SEGMENT
  23. hello_msg db "HELLO ASM WORLD", 0
  24. info_msg db "Info", 0
  25. buf dw 2048 DUP ('eb')
  26. _DATA ENDS
  27. END

Решение задачи: «ASM + C++ Как вывести в консоль ?»

textual
Листинг программы
  1. .686P
  2. .MODEL Flat,StdCall
  3. OPTION CASEMAP:NONE
  4.  
  5. INCLUDE         \MASM32\INCLUDE\WINDOWS.INC
  6. INCLUDE         \MASM32\INCLUDE\KERNEL32.INC
  7. INCLUDE         \MASM32\INCLUDE\USER32.INC
  8. INCLUDE         \MASM32\INCLUDE\MSVCRT.INC
  9.  
  10. INCLUDELIB      \MASM32\LIB\KERNEL32.LIB
  11. INCLUDELIB      \MASM32\LIB\USER32.LIB
  12. INCLUDELIB      \MASM32\LIB\MSVCRT.LIB
  13.  
  14. .DATA
  15.  
  16. Text            DB      'Hello world!',0
  17.  
  18. .CODE
  19.  
  20. Start:
  21.  
  22.                 invoke  crt_printf, ADDR Text
  23.                 invoke  ExitProcess, NULL
  24.  
  25. END             Start

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

В данном коде происходит следующее:

  1. Определение модели и настройка опций для сборки.
  2. Подключение необходимых файлов заголовков, содержащих объявления функций и структур.
  3. Подключение библиотек, которые будут использоваться при сборке.
  4. Определение секции .DATA, где объявляется переменная Text типа DB (байтовая строка) и инициализируется со значением Hello world!.
  5. Определение секции .CODE, содержащей исполняемый код программы.
  6. Метка Start, которая является точкой входа в программу.
  7. Вызов функции crt_printf с аргументом - адресом переменной Text. Эта функция используется для вывода форматированной строки в стандартный поток вывода.
  8. Вызов функции ExitProcess с аргументом NULL для завершения программы.
  9. Завершение программы и метка END Start.

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


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

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

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

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

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

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