代码之家  ›  专栏  ›  技术社区  ›  Pyjong

MASM段指令

  •  1
  • Pyjong  · 技术社区  · 12 年前

    我正在阅读MASM的一些汇编,我很难理解分段指令的目的。在汇编过程中,它与地址计算中的标签有何不同?假定form指令为 name segment at addr ,我不太关心它的其他选择。什么是

    BootSeg segment at 0x7c0
    BootSeg end
    

    如果里面什么都没有就好吗?

    如果你这样做了,你的斧头会有什么价值

    mov ax, BootSeg
    

    ?

    1 回复  |  直到 12 年前
        1
  •  6
  •   Alexey Frunze    12 年前

    这个 segment 指令有点多用途。

    第一个用途是将事物组合成片段。

    第二种用法是正确地引用(=计算)各个段中的对象。根据代码中正在访问的对象段,汇编程序可以插入适当的 segment override prefixes ( es: , ss: , cs: , fs: , gs: )转换为生成的代码。同样,当调用 procedure 从不同的代码段,汇编程序可以生成 far call 指令而不是 near call 。AFAIR,为此您实际上需要标记 程序 本身作为 far (这一切都会迎刃而解 rets 进入 far rets 也在例程中)。

    然后,这些段由链接器处理,并转化为操作系统使用的重新定位信息。

    为什么我们有这些细分市场?因为中央处理器有它们,我们不能总是忽视它们的存在。有些DOS.COM程序将其代码、数据和堆栈放入一个单独的段中,在这种情况下,程序不必因段的概念而变得复杂(除了那些需要访问某些“外部”代码/数据而不是从自己的段访问的情况)。

    是的 AT 事物基本上将一个物体叠加在另一个物体之上。所以 mov ax, BootSeg 应该得到你 ax =0x7c0,与任何其他段一样,除了这里的段在“编译”时已知。

    使用调试器,进行实验。