【问题标题】:MASM32 What does 'default code distance mean'?MASM32“默认代码距离”是什么意思?
【发布时间】:2009-11-24 13:45:56
【问题描述】:

MASM32 中使用的这个符号:

@CodeSize 返回一个表示默认代码距离的整数。

我想了解“默认代码距离”是什么意思?

托尼

【问题讨论】:

    标签: assembly x86 masm32


    【解决方案1】:

    默认代码距离是 NEAR 或 FAR。

    @CodeSize 可以取两个值,0 或 1,它决定跳跃、呼叫等是在 NEAR 还是 FAR 距离。

    如果您使用的是 TINY、SMALL、COMPACT 或 FLAT 内存模型,则所有跳转等都是 NEAR,并且@CodeSize == 0。 如果您使用的是 HUGE、LARGE、MEDIUM 内存模型,则 als 跳转等是 FAR 和 @CodeSize == 1。

    【讨论】:

    • NEAR 和 FAR 到底是什么意思?是在当前段内还是在当前段外?
    • 是的,但是对于保护模式,它要复杂得多,因为涉及到选择器。基本上 NEAR 和 FAR 是不同的寻址模式,有一个额外的 16 位组件用于 FAR 跳转,根据操作模式的不同,这可能具有非常不同的含义。确切的规范在intel.com/Assets/PDF/manual/253666.pdf 中。在“JMP FAR”下查看。
    【解决方案2】:

    很可能是两个最远的代码之间的最大距离(以字节为单位,在内存中)。这可能会影响跳转的生成方式,因为可能有不同的指令能够实现不同的跳转长度。更短的跳转可以用更短(更小,通常更快)的指令进行编码。

    This page 提到了人们可以期待的整数值:

    0 代表 TINY、SMALL、COMPACT 和 FLAT 型号,1 用于中型、大型和 巨大的模型(数值相等)。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2020-08-13
      • 1970-01-01
      • 1970-01-01
      • 2013-06-04
      • 2018-04-11
      • 1970-01-01
      • 1970-01-01
      • 2015-01-03
      相关资源
      最近更新 更多