这个问题在这里已经有了答案:
Differences between general purpose registers in 8086: [bx] works, [cx] doesn't?
(3 个回答)
7 个月前关闭。
我无法指向一个地址并在我的情况下写入一个字节大小的变量。这给了我错误“错误:无效的有效地址”:
mov byte[AX], byte 0x0
经过一些跟踪和错误后,我测试了相同的但使用 EAX。这编译得很好:
mov byte[EAX], byte 0x0
我在这里缺少什么?
最佳答案
[AX]
是无效的内存操作数规范。
The valid 16-bit ones are :
[constant]
[BX]
[SI]
[DI]
[BX+constant]
[BP+constant]
[SI+constant]
[DI+constant]
[BX+SI]
[BX+DI]
[BP+SI]
[BP+DI]
[BX+SI+constant]
[BX+DI+constant]
[BP+SI+constant]
[BP+DI+constant]
[BP] 在形式上是无效的,但是很多汇编者会悄悄地将其转换为 [BP+0]。
有关内存操作数编码以及 ModR/M 和 SIB 字节,请参阅 CPU 手册。
关于assembly - NASM x86 16 位寻址模式,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12474010/