Настройка вызова С функции з asm в Visual Studio 2015 - Assembler

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

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

Здравствуйте, помогите пожайлуста решить проблему с вызовом printf или любой другой сишной функции c ассемблера. Сначала я создал пустой проект в Visual Studio 2015, добавил asm файл, сделал нужные настройки проекта, чтоб скомпилировать asm файл. Но проблема в том что я никак не можу побороть проблему
unresolved external symbol _printf@0 referenced in function _main@0
При том что функции Windows API вызываються нормально, кто-нибудь сталкивался с этим? Параметры линкера:
/OUT:"C:\Users\apple\Documents\SP_Lab7\Debug\SP_Lab7_Demo.exe" /MANIFEST /NXCOMPAT /PDB:"C:\Users\apple\Documents\SP_Lab7\Debug\SP_Lab7_Demo.pdb" /DYNAMICBASE "libcmt.lib" "kernel32.lib" "user32.lib" "gdi32.lib" "winspool.lib" "comdlg32.lib" "advapi32.lib" "shell32.lib" "ole32.lib" "oleaut32.lib" "uuid.lib" "odbc32.lib" "odbccp32.lib" /MACHINE:X86 /INCREMENTAL:NO /PGD:"C:\Users\apple\Documents\SP_Lab7\Debug\SP_Lab7_Demo.pgd" /SUBSYSTEM:WINDOWS /MANIFESTUAC:"level='asInvoker' uiAccess='false'" /ManifestFile:"Debug\SP_Lab7_Demo.exe.intermediate.manifest" /ERRORREPORT:PROMPT /NOLOGO /TLBID:1
Код программы:
.586
.model flat, stdcall
option casemap:none
 
 ExitProcess PROTO return:DWORD
  printf PROTO
 
.data
 
text BYTE "Text", 0
 
.code
main PROC
    push offset text
    call printf
    invoke ExitProcess,0
main ENDP
end main

Решение задачи: «Настройка вызова С функции з asm в Visual Studio 2015»

textual
Листинг программы
.586
.model flat, stdcall
option casemap:none
includelib msvcrt.lib
ExitProcess PROTO return:DWORD
extern printf:near
.data
 
text BYTE "Text", 0
 
.code
main PROC
    push offset text
    call printf
    add esp,4
    invoke ExitProcess,0
main ENDP
end main

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

  1. Объявлен сегмент .586
  2. Объявлен модель .model flat, stdcall
  3. Объявлено опция casemap:none
  4. Включена библиотека msvcrt.lib
  5. Детальный прототип функции ExitProcess
  6. Указатель на функцию printf
  7. Создана переменная типа data с именем text и значением Text
  8. Создана процедура main
  9. В процедуре main добавлен стек с смещением текста
  10. Вызвана функция printf
  11. Стек уменьшен на 4 после вызова функции printf
  12. Вызвана функция ExitProcess с аргументом 0
  13. Процедура main завершена

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


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

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

14   голосов , оценка 3.857 из 5
Похожие ответы