Assembly 符号常数行为

Assembly 符号常数行为,assembly,Assembly,考虑以下代码: 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,因为现在

考虑以下代码:

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


谁能给我解释一下逻辑吗?

在第一个例子中,
E
等于9,我会非常惊讶。那太疯狂了
E
应该是12,这是从数据段开始的
v2
的偏移量。你应该回去核实你的结果

在任何情况下,当您以这种方式使用
eq
时,您正在使用偏移

eq
是编译时(好的,汇编时,不管什么)构造。因此,它永远无法访问内存。举个例子:

v2 dw 10, 5, 4, 3, 2, 1
据我所知,没有办法编写一个引用存储在
v2
中的内容的
eq
表达式。也就是说,你不能有:

E equ (some expression that results in getting the value 10 from v2)
永远不会发生

eq
仅执行偏移算法