Assembly NASM x86 16位寻址模式
我在指向一个地址和写一个字节大小的变量时遇到了麻烦。这给了我错误“错误:无效的有效地址”: 经过一些尝试和错误后,我测试了相同的,但使用了EAX。这就很好地编译了: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的所有这些寻址模
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]