2012-11-11 94 views
0

我可以在裝配mov eax, [ax]中進行此操作,還是必須指定尺寸mov eax, dword [ax]裝配說明mov

+0

取決於彙編程序,那麼,您正在使用哪個彙編程序? – harold

+0

使用Nasm,並在32位模式工作 –

回答

3

[ax]不是有效的16位尋址模式。將其更改爲mov ebx, [bx]並且您可以執行此操作。 ebx決定了操作的大小,所以你不需要說dword。在32位模式下,[bx]不太可能是「有用」地址,但它是「有效」的代碼。在32位模式下,mov al, [eax],mov ax, [eax]mov eax, [eax]都是有效的,大小由目標寄存器的大小決定,但爲清晰起見,您可能想說「字節」,「字」或「雙字」。在這個(!)情況下,大小不必匹配。

FWIW,可以在16位代碼中使用32位指令和32位尋址模式。整個地址需要在分段限制內 - 通常是64k - 但mov eax, [eax + ecx * 4]是有效的代碼。 Nasm(或其他「合格的」彙編程序)將生成所需的「操作數大小覆蓋前綴」和「地址大小覆蓋前綴」(0x66和0x67)。

不要害怕嘗試這些東西......雖然它可能不是很清楚爲什麼NA​​SM被拒絕,如果NASM真的接受它,這並不意味着它會做你想要什麼......

+0

所以洞問題是[ax]不是有效的16位尋址模式? –

+0

對。無論如何,這是「大部分」問題。 –

+0

我只是一直忘記什麼是有效的16位尋址模式..哦,以及 – harold

3

不,這些操作數不匹配。在可以訪問EAX的32位系統上,您還必須使用相同的地址大小。

mov eax, [eax] 

將用它指向的值替換EAX中的指針。

+0

。感謝您的知識,現在我也知道:) –