2013-06-20 28 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只做偏移算术。