【发布时间】:2016-05-19 04:11:16
【问题描述】:
我在开发操作系统时遇到了一些奇怪的错误。我正在使用outb 和inb 制作一个IO 驱动程序。我的outb函数如下:
static inline void outb(uint16_t port, uint8_t val)
{
__asm("outb %0, %w1" //<--Error
:
: "a"(val), "Nd"(port));
}
我在 Visual Studio 中收到此错误:
C2400:“操作码”中的内联汇编语法错误;找到'('
有人知道我为什么会收到这个错误吗?如何修复此错误?有什么建议吗?
【问题讨论】:
-
“VS”?就像在 Visual Studio 中一样?您发布的代码没有使用 Microsoft 的内联汇编语法。它看起来像是为 GCC 准备的。
-
确实是GCC的内联汇编语法,不是 Visual Studio的。对于 Visual Studio,我认为没有将特定变量分配给特定寄存器的好方法,因此您可能只想在汇编源文件中编写整个函数。
-
我之前帮助您时,您使用的是 GNU 汇编程序,而不是 Microsoft。正如@Michael 指出的那样,VS 中的内联 Visual C++ 的语法与 GNU 汇编程序完全不同。 VC++ 不支持作为 GCC 扩展的汇编器模板,在 MS 产品中不可用。
标签: visual-c++ x86 port inline-assembly osdev