【发布时间】:2014-09-19 22:24:28
【问题描述】:
当我尝试从 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 assembler 2.01 版 (tasm) 和 turbo link 2.0 版 (tlink) 和 Turbo C 版2.01 (tcc)
问题来了,当我运行 .exe 文件时,我得到了应有的输出“x”, 但它卡在那里,它没有结束。
如果有任何帮助,我将不胜感激,在此先感谢。
【问题讨论】:
-
找不到任何明显的问题。使用调试器查看函数是否返回。另外,告诉你的学校,使用这些过时的东西会使学习变得更加困难,而且没有任何好处。