内存地址不会加载

时间:2014-02-17 23:53:33

标签: memory assembly

我试图将值0移动到存储在ax中的地址中(假设现在可以写入)。

mov ax, 0EC7 ; assume writable
mov BYTE    [ax], 0

但是,nasm给了我这个错误:

错误:无效的有效地址

有什么想法吗?

1 个答案:

答案 0 :(得分:2)

16位寻址模式非常有限。您可以使用(可选)偏移量(普通数字),加上(可选)基址寄存器(bxbp),以及(可选)索引寄存器(si或{ {1}})。而已。

在32位寻址模式下,任何寄存器都可以是基址寄存器,除di之外的任何寄存器都可以是索引寄存器。 32位寻址还引入(可选)标度(1,2,4或8)与索引寄存器相乘。

esp即使在16位代码中也能正常工作。汇编程序生成“地址大小覆盖前缀”字节(0x67)。如果[eax]中的值超过了段限制(通常为64k),则会生成异常(不在实际DOS中处理 - 它只是挂起),所以要小心它。