装配偏移量计算规则
Assembly offset calculation rule
所以...偏移量计算规则在我的课本中指出:
offset = [bp] + [bx] + [di|si] + CONST (any part is optional, but atleast one is required)
但是在互联网上阅读我发现规则为:
offset = [bp|bx] + [di|si] + CONST
是哪一个?为什么?
(我认为第一个也应该有效,因为 bx 可以包含任意值,如 (1..F),但我倾向于认为我错了,必须有一个 BX 或 BP)
"internet rule" 是正确的。您可以有 1 个基址寄存器(bp
或 bx
)和 1 个变址寄存器(si
或 di
)。您不能同时拥有 bp + bx
或 si + di
。参见Table 2-1。 Intel Instruction Set Reference
中 ModR/M 字节 的 16 位寻址形式
然而,您的课程书是正确的,任何部分都是可选的,但至少有一个是必需的,因此您不需要基数、索引或偏移量。这些都是有效的:[const]
、[bx]
、[si]
、[bx + si]
、[bp + di + const]
。完整列表在我上面链接的手册中。
所以...偏移量计算规则在我的课本中指出:
offset = [bp] + [bx] + [di|si] + CONST (any part is optional, but atleast one is required)
但是在互联网上阅读我发现规则为:
offset = [bp|bx] + [di|si] + CONST
是哪一个?为什么?
(我认为第一个也应该有效,因为 bx 可以包含任意值,如 (1..F),但我倾向于认为我错了,必须有一个 BX 或 BP)
"internet rule" 是正确的。您可以有 1 个基址寄存器(bp
或 bx
)和 1 个变址寄存器(si
或 di
)。您不能同时拥有 bp + bx
或 si + di
。参见Table 2-1。 Intel Instruction Set Reference
然而,您的课程书是正确的,任何部分都是可选的,但至少有一个是必需的,因此您不需要基数、索引或偏移量。这些都是有效的:[const]
、[bx]
、[si]
、[bx + si]
、[bp + di + const]
。完整列表在我上面链接的手册中。