我想在DOS程序中编写一些内联汇编程序,该程序是使用Turbo C 2.01编译的。我写的时候
asm {
nop
}
编译器声称in-line assembly is not allowed in function ...
。请参阅:
有什么想法吗?
答案 0 :(得分:4)
请参阅Turbo C user manual第430页:
不允许内联汇编
您的源文件包含内联汇编语言语句,您正在从中编译它 综合环境。您必须使用TCC命令来编译它 源文件。
我认为您还需要将-B
选项传递给TCC(第455页)。
或者,您可以使用__emit__
(第103页)将相对简单的代码作为机器代码而不是汇编程序助记符输入。
在IDE中不允许内联汇编似乎是一个奇怪的限制。您可能会考虑升级"到Turbo C ++ 3.0,我相信它确实允许它。我想象TC ++在使用.c文件时会编译C代码,或者IDE可以设置为显式编译C.那也是manual。
答案 1 :(得分:-1)
Turbo C将C代码直接转换为机器代码而不使用汇编程序阶段,因此不能在程序中包含汇编语言源。但它可以做的是使用__emit
指令插入机器代码。最简洁的方法是使用一个单独的汇编程序(或者DEBUG
)将自己感兴趣的代码自己处理成一个COM文件,然后将其中的字节值输入__emit
指令。参数以从左到右的升序存储,从BP + 4(小型,小型或紧凑型)或BP + 6(中型,大型或大型)开始。局部变量存储在BP以下的地址。
使用Turbo Pascal时,可以使用名为"内联汇编程序的方便程序"将汇编语言源转换为Turbo Pascal文字代码指令。 Turbo Pascal的指令格式与C&C(我更喜欢Pascal更好)的格式不同,并且可以用Turbo C不能的方式容纳标签。尽管如此,使用__emit
对构建时间的影响可能远小于尝试使用内联汇编代码。