Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/assembly/6.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Assembly 在';标识符';_Assembly_X86 - Fatal编程技术网

Assembly 在';标识符';

Assembly 在';标识符';,assembly,x86,Assembly,X86,我在查看一些代码时发现了以下说明: mov ES : [BX], AX 它引发了一个编译器错误: illegal reference to 16-bit data in 'first operand' 我从未见过这种符号。有人能给我解释一下,以及如何修复这个错误吗 代码本身来自在C程序中编写的内联程序集。BX是一个16位寄存器,在编译32位代码时不能用于寻址数据。您可以将目标CPU更改为x86并使其在不更改代码的情况下工作 正确的语法在很大程度上取决于编译器和选定的方言 至少在NASM上,正

我在查看一些代码时发现了以下说明:

mov ES : [BX], AX
它引发了一个编译器错误:

illegal reference to 16-bit data in 'first operand'
我从未见过这种符号。有人能给我解释一下,以及如何修复这个错误吗


代码本身来自在C程序中编写的内联程序集。

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


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

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

MOV [ES:BX],AX

简而言之,整个内存引用需要放在方括号内。段重写,即使它们实际上是前缀(例如,
ES:
compiles to 26h),也需要包含在内存引用中。

假定代码本身在实地址模式下工作。你知道我如何在C程序中做到这一点吗?你需要把它编译成16位程序