装配偏移量计算规则

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 个基址寄存器(bpbx)和 1 个变址寄存器(sidi)。您不能同时拥有 bp + bxsi + di。参见Table 2-1。 Intel Instruction Set Reference

中 ModR/M 字节 的 16 位寻址形式

然而,您的课程书是正确的,任何部分都是可选的,但至少有一个是必需的,因此您不需要基数、索引或偏移量。这些都是有效的:[const][bx][si][bx + si][bp + di + const]。完整列表在我上面链接的手册中。