2013-06-20 68 views
0

考慮下面的代碼:ASM符號常量行爲

data segment 
    v1 dw 1, 2, 3, 4, 5, 6 
    v2 dw 10, 5, 4, 3, 2, 1 
    E equ v2 
ends 

E是9,因爲E是v2的其表示v2的陣列中的第一個值。

如果我這樣寫:

data segment 
    v1 dw 1, 2, 3, 4, 5, 6 
    v2 dw 10, 5, 4, 3, 2, 1 
    E equ v2/2 
ends 

我期待E至爲5(10除以2),但它實際上是6.我想這是6,因爲現在V2意味着數組的偏移,這是12(= 6個字)。

我正在使用emu8086。

有人可以解釋我的邏輯嗎?

回答

2

我很驚訝地發現E在第一個例子中等於9。這將是瘋狂。 E應該是12,這是從數據段開始的v2的偏移量。你應該回去驗證你的結果。

無論如何,當您以這種方式使用equ時,您正在使用偏移量。

equ是一個編譯時(好的,程序集時,無論)構造。因此,它不能有史以來訪問內存。鑑於您的例子:

v2 dw 10, 5, 4, 3, 2, 1 

沒有辦法(我知道的)寫一個equ表達式引用存儲在v2內容。也就是說,你不能有:

E equ (some expression that results in getting the value 10 from v2) 

永遠不會發生。

equ只做偏移算術。