0

考虑以下代码:

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。

有人可以解释我的逻辑吗?

4

1 回答 1

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只做偏移算术。

于 2013-06-20T21:28:56.847 回答