2014-02-17 36 views
0

我想將值0移入存儲在ax中的地址(假設現在可寫入)。內存地址不會加載

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

但是,NASM是給我這個錯誤:

錯誤:無效的有效地址

任何想法?

+0

請嘗試使用'eax'來代替?或'mov BYTE PTR'。 – Blorgbeard

+0

謝謝!似乎正在工作.. – phyrrus9

回答

2

16位尋址模式非常有限。您可以使用(可選)偏移量(一個普通數字)和一個(可選)基址寄存器(bxbp)以及一個(可選)索引寄存器(sidi)。而已。

在32位的尋址模式,任何寄存器可以是一個基址寄存器和任何寄存器但esp可以是一個索引寄存器。 32位尋址還引入了一個(可選的)比例(1,2,4或8),以便與變址寄存器相乘。

[eax]將工作 - 即使在16位代碼。彙編程序生成一個「地址大小覆蓋前綴」字節(0x67)。如果eax中的值超過了段限制(通常爲64k),則會生成一個異常(不在真正的DOS中處理 - 它只是掛起),因此請小心。