Assembly 如何使用汇编中的printf?
我有一个MSVC++项目,用于编译和运行汇编代码 总而言之,c:Assembly 如何使用汇编中的printf?,assembly,include,x86,Assembly,Include,X86,我有一个MSVC++项目,用于编译和运行汇编代码 总而言之,c: #include <stdio.h> void go() ; int main() { go() ; // call the asm routine } 但当我编译并运行时,go.asm中会出现一个错误: 错误A2006:未定义的符号:puts 如何在中为项目中的.asm文件定义符号?我认为这比我能更好地解释它 粗略地说,汇编程序在go.asm中找不到符号(函数)。你必须告诉它它是一个外部符号 链接文章从使用
#include <stdio.h>
void go() ;
int main()
{
go() ; // call the asm routine
}
但当我编译并运行时,go.asm中会出现一个错误:
错误A2006:未定义的符号:puts
如何在
中为项目中的.asm文件定义符号?我认为这比我能更好地解释它
粗略地说,汇编程序在go.asm
中找不到符号(函数)。你必须告诉它它是一个外部符号
链接文章从使用汇编作为主要语言的角度来构建混合代码应用程序,包括运行main
例程。如果您使用的是基于C
的主例程,那么所做的大部分工作都是不必要的,您只需要:
使用/Mx组装组装模块
保留非局部的情况
名字。如果使用MASM版本6.0或
稍后,使用/Cx保留
非本地名称
以及:
在汇编模块中包含语句.MODEL、c以
确保C命名和调用
使用约定,并且
模块使用相同的默认段。
将是小型、中型、,
紧凑的或大的
和EXTERN
指令,用于您希望以以下格式调用的每个函数:EXTERN printf:proc
以下是我所拥有的
它起作用了
.586
.model flat,c
printf PROTO C :VARARG ; The secret sauce.. a prototype of printf
.data
msgHello1 BYTE "GREETINGS AND WELCOME TO EARTH!",0
.code
go PROC
push OFFSET msgHello1
call printf
add esp, 4 ; Stack cleaning
RET
go ENDP
end
.586
.模型公寓,c
printf协议C:VARARG;秘方。。printf原型
.数据
msgHello1字节“欢迎来到地球!”,0
.代码
去进程
推送偏移量msgHello1
调用printf
添加esp,4;烟囱清理
RET
结束
结束