Assembly NASM x86 16位寻址模式

Assembly NASM x86 16位寻址模式,assembly,x86,nasm,x86-16,addressing-mode,Assembly,X86,Nasm,X86 16,Addressing Mode,我在指向一个地址和写一个字节大小的变量时遇到了麻烦。这给了我错误“错误:无效的有效地址”: 经过一些尝试和错误后,我测试了相同的,但使用了EAX。这就很好地编译了: mov byte[EAX], byte 0x0 这里缺少什么?[AX]是无效的内存操作数规范 : [BP]在形式上是无效的,但许多汇编程序会悄悄地将其转换为[BP+0] 有关内存操作数编码以及ModR/M和SIB字节,请参阅CPU手册。当使用[bp+常量]、[bp+si+常量]或[bp+di+常量]时,最好记住bp的所有这些寻址模

我在指向一个地址和写一个字节大小的变量时遇到了麻烦。这给了我错误“错误:无效的有效地址”:

经过一些尝试和错误后,我测试了相同的,但使用了EAX。这就很好地编译了:

mov byte[EAX], byte 0x0

这里缺少什么?

[AX]
是无效的内存操作数规范

:

[BP]在形式上是无效的,但许多汇编程序会悄悄地将其转换为[BP+0]


有关内存操作数编码以及ModR/M和SIB字节,请参阅CPU手册。

当使用
[bp+常量]
[bp+si+常量]
[bp+di+常量]
时,最好记住
bp
的所有这些寻址模式的默认段是
ss
(堆栈段),而不是
ds
(数据段),与上面列出的所有其他寻址模式一样。请注意,16位寻址模式不能使用SIB字节,只能使用ModR/M,这就是为什么它们被限制为
(BP | BX)+(DI | SI)+disp0/8/16
相关:解释了为什么16位寻址模式更受限制。
mov byte[EAX], byte 0x0
[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]