非法引用标识符'中的16位数据

时间:2014-06-16 04:31:45

标签: assembly x86

我正在查看一些代码并找到了这条指令:

mov ES : [BX], AX

它引发了编译错误:

illegal reference to 16-bit data in 'first operand'

我从未见过那种符号。有人可以向我解释一下以及如何解决这个错误吗?

代码本身来自内联汇编,是用C程序编写的。

2 个答案:

答案 0 :(得分:0)

BX是一个16位寄存器,在编译32位代码时不能用于寻址数据。您可以将目标CPU更改为x86,并在不更改代码的情况下使其工作。

http://msdn.microsoft.com/en-us/library/5zyca2kh.aspx

答案 1 :(得分:0)

正确的语法很大程度上取决于编译器和选定的方言。

至少在NASM上,正确的语法是

MOV [ES:BX],AX

简而言之,整个内存引用需要放在方括号中。段覆盖,即使它们确实是前缀(例如ES:编译为26h),也需要包含在内存引用中。