【问题标题】:Assembly offset calculation rule装配偏移计算规则
【发布时间】:2015-02-17 12:27:09
【问题描述】:

所以...偏移量计算规则在我的课本中指出:

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)

【问题讨论】:

    标签: assembly x86 offset x86-16


    【解决方案1】:

    “互联网规则”是正确的。您可以拥有 1 个基址寄存器(bpbx)和 1 个索引寄存器(sidi)。您不能同时拥有bp + bxsi + di。请参阅表 2-1。 Intel Instruction Set Reference中带有 ModR/M 字节的 16 位寻址格式

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

    【讨论】:

    • 感谢您的回答和参考:)
    • 请注意,使用 bp 作为基址寄存器会将用于引用的默认段从 ds 更改为 ss。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2020-01-01
    • 1970-01-01
    • 2020-08-25
    • 2018-04-13
    • 1970-01-01
    • 2016-09-11
    • 1970-01-01
    相关资源
    最近更新 更多