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
仅执行偏移算法