我已经设置了一个MSVC ++项目来编译和运行汇编代码。
在main.c中:
#include <stdio.h>
void go() ;
int main()
{
go() ; // call the asm routine
}
在go.asm中:
.586
.model flat, c
.code
go PROC
invoke puts,"hi"
RET
go ENDP
end
但是当我编译并运行时,我在go.asm中遇到错误:
错误A2006:未定义的符号:puts
如何在<stdio.h>
中为项目中的.asm文件定义符号?
答案 0 :(得分:1)
这就是我所拥有的。
它有效!!
.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
答案 1 :(得分:0)
我认为article比我更好地解释了它。
粗略地说,汇编程序在go.asm
中找不到符号(函数)。你必须告诉它它是一个外部符号。
链接文章从使用程序集作为主要语言(包括运行main
例程)的角度来构建混合代码应用程序。如果您使用的是基于C
的主程序,那么大部分工作都是不必要的,您应该只需要:
使用/ Mx组装装配模块 保留非本地的情况 名。如果使用MASM 6.0或 以后,使用/ Cx来保存 非本地名称。
和
您希望以格式在汇编模块中包含语句.MODEL,c 确保C命名和调用 使用的约定和 模块使用相同的默认段。 将是小,中, 紧凑的,或大的。
EXTERN
调用的每个函数的和EXTERN printf:proc
指令。