NASM x86 16位寻址模式

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


mov byte[AX], byte 0x0

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


mov byte[EAX], byte 0x0

我在这里错过了什么?


HUH函数
浏览 521回答 2
2回答

MM们

[AX] 是无效的内存操作数规范。有效的16位是:[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手册。

30秒到达战场

使用时[bp+constant],[bp+si+constant]或者[bp+di+constant],最好记住所有这些寻址模式的默认段bp是ss(堆栈段),而不是ds(数据段),就像上面列出的所有其他寻址模式一样。
打开App,查看更多内容
随时随地看视频慕课网APP