请考虑以下代码:
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。
有人能解释我的逻辑吗?
答案 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
仅对算术进行偏移。