我正在查看一些代码并找到了这条指令:
mov ES : [BX], AX
它引发了编译错误:
illegal reference to 16-bit data in 'first operand'
我从未见过那种符号。有人可以向我解释一下以及如何解决这个错误吗?
代码本身来自内联汇编,是用C程序编写的。
答案 0 :(得分:0)
BX是一个16位寄存器,在编译32位代码时不能用于寻址数据。您可以将目标CPU更改为x86,并在不更改代码的情况下使其工作。
答案 1 :(得分:0)
正确的语法很大程度上取决于编译器和选定的方言。
至少在NASM上,正确的语法是
MOV [ES:BX],AX
简而言之,整个内存引用需要放在方括号中。段覆盖,即使它们确实是前缀(例如ES:
编译为26h),也需要包含在内存引用中。