当我尝试从 C 程序调用汇编语言函数 (x86) 时遇到了一些问题。
我的汇编代码如下:
.model small
.code
.stack 100h
public _putchar
;---------------------
;Putchar proc
;---------------------
_putchar proc
push bp
mov bp,sp
mov dl,[bp+4]
mov ah,2
int 21h
pop bp
ret
_putchar endp
end
然后,我从 C 中调用这个过程如下:
extern void putchar(char x);
int main(void)
{
putchar('x');
return 0;
}
为了编译和链接,我使用以下命令行(按顺序)
tcc -c -ms pchar.c
tasm putchar.asm
tlink pchar putchar, pchar
到目前为止,我们从 putchar.asm 中获得了 .obj,并通过链接这两个文件获得了 .exe 文件。
我还应该提一下,我们(在类里面)使用 turbo 汇编器版本 2.01 (tasm) 和 turbo link 版本 2.0 (tlink) 以及 Turbo C 版本2.01 (tcc)
问题就在这里,当我运行 .exe 文件时,我得到了应该的输出“x”, 但它卡在那里,它没有结束。
如果有任何帮助,我将不胜感激,在此先感谢。
最佳答案
我观察到的两种可能性是调用例程可能正在使用 AX
和 DX
。
我严重怀疑这是否有帮助,但请尝试在例行程序之前和之后推送和弹出它们。
通过调试确认或反驳这一点。在调用例程之前放置一个断点,然后越过它(而不是进入它)查看编译器的代码在调用您的 ASM 之后是否要使用 AX
或 DX
子程序。
哦,我同意 Alexis Wilke 的意见,更改名称。
关于c - 将汇编语言 (x86) 例程与 C 语言连接起来,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25943219/