这是整个装配程序:
.model small
.stack 256
.code
start:
call printer
mov ax, 3 ; store 3 into ax
mov ah, 76 ; back to DOS
mov al, 0 ; no errors
int 21h ; interupt -> DOS
end start
这是我定义C
函数printer
#include <stdio.h>
void printer()
{
printf("Hello!\n");
}
编译汇编代码时,出现错误:undefined symbol: printer
。在C
我会做#include "file.h"
,我如何在此处获得相同的结果?
答案 0 :(得分:5)
问题不在于编译,而在于链接。您必须链接(在Unix / Linux上使用ld
)您的可执行文件,包括带有汇编代码的目标文件和带有C代码的目标文件。
或者使用"asm"
块将汇编代码放入C文件中。
答案 1 :(得分:2)
您应该添加类似
的内容extern _printer
在程序集顶部并使用此名称调用
call _printer
正确的函数名称取决于C编译器的命名约定。编译器可能会在函数的C名称中添加一些字符。
正确的“extern”关键字取决于你的汇编程序,它可能是“.extern”左右。
编辑1: 在Turbo汇编程序中,对于没有参数的函数,它应该只是
extrn printer
或
extrn printer:NEAR
我不熟悉TASM。