NASM x86 16位寻址模式

时间:2012-09-18 09:21:44

标签: assembly x86 nasm x86-16 addressing-mode

我无法指向一个地址,并在我的情况下写入一个大小为byte的变量。这给了我错误“错误:无效的有效地址”:

mov byte[AX], byte 0x0

经过一些跟踪和错误后,我测试了相同但使用EAX。编译得很好:

mov byte[EAX], byte 0x0

我在这里缺少什么?

1 个答案:

答案 0 :(得分:11)

[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手册。