ASM符号常量行为

时间:2013-06-20 21:15:43

标签: 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,因为现在v2表示数组的偏移量,即12(= 6个字)。

我正在使用emu8086。

有人能解释我的逻辑吗?

1 个答案:

答案 0 :(得分: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仅对算术进行偏移。