【问题标题】:What does ORG Assembly Instruction do?ORG 组装说明有什么作用?
【发布时间】:2011-03-25 08:03:45
【问题描述】:

谁能给我一个关于 ORG 指令的全面描述?
何时以及为何在汇编编写的应用程序中使用它?

在 x86 或 AMD64 上使用 Nasm。

【问题讨论】:

  • 提示:有不止一种 CPU 架构被广泛使用,至少其中一些架构有不止一种汇编程序。如果您为哪种机器语言指定哪个汇编器,我们可能会更有帮助。

标签: assembly x86 nasm directive


【解决方案1】:

ORG 用于设置汇编器位置计数器。这可能会或可能不会在链接时转换为加载地址。它可用于定义绝对地址,例如在定义诸如可能需要位于固定地址的中断向量之类的东西时,或者它可用于引入填充或为以下代码生成特定的对齐方式。

【讨论】:

  • 还要注意,ORG 指令的含义可能因汇编程序而异。例如,使用它来生成 Paul 提到的填充将适用于 MASM,但 not on NASM.
  • `ORG' 是“起源”的缩写。
  • @starblue right, MACRO-80 汇编器手册中的“2.6.15 ORG - 定义原点”
【解决方案2】:

ORG 只是指示在哪里放置与当前段相关的下一段代码/数据。

将它用于固定地址是没有用的,因为最终地址取决于在汇编时未知的段。

【讨论】:

    【解决方案3】:
          During the assemble time ORG directive resets the MLC (memory location counter) to the address specified in the ORG directive.
    

    语法:ORG 注意:可以是无符号绝对值或任何符号或符号 + 。

    示例:- 要观察此指令的工作情况,您需要任何使用 ORG 指令的汇编列表。

    位置
    0000A4 00 89 TAB DC 256AL1(*-TAB)
    0001A4 00000194 90 组织标签+240
    000194 F0F1F2F3F4F5F6F7 91 直流 C'1234567'

    在上面,TAB 符号分配给 MLC 地址 0A4。在下一条指令中,ORG 将 MLC 设置为 TAB+240 地址位置,即 x'194'(~ x'A4' + 240 十进制)。 基本上这个设置是设置一个长度为 256 并从第 240 个位置存储一些字符常量的表,以便我可以将它用于 TR 指令。

    【讨论】:

    • 如果它在 NASM 中以这种方式工作就好了... :q 但是不,在 NASM 中,org 只能使用一次。不能以这种方式“重置”MLC,这很糟糕:q 这使得编写自重定位代码比它可能的要困难得多。
    【解决方案4】:

    ORG 表示起源 ORG 用于微处理器和微控制器编程中的特定寻址。

    例如:

    .org 0000H
    

    这意味着我们要从0000H 地址开始我们的程序。

    【讨论】:

    • 请不要全部大写。看起来你在喊叫
    【解决方案5】:

    它是您希望将二进制程序加载到的内存位置(如果有)。

    我不喜欢使用 org,而是直接向硬件发出操作码/值。 您始终可以将值存储在 ax 中并在 bx、cx、dx 之间传输。

    我正在编写自己的汇编程序来输出操作码/值,而不必担心在执行之前先将其发送到内存,

    在读取操作码时就地执行操作码要快得多,而不是试图将它们缓存到内存中,否则可能会导致堆栈过载而烧毁你的 CPU

    【讨论】:

    • 它是您希望程序从 0x00000000h 加载到的 RAM 内存中的偏移量。 ORG 100h = 将我的二进制代码放入内存中的位置 0x00000000h + 100h,或 64 位机器上的 0x00000100h。
    • 第一句话是对的。其余的在我看来都是无稽之谈。你使用寄存器还是内存来存储值与org的使用无关。您是否知道 CPU 中的指令指针总是指向 memory 位置?并且 CPU 总是从内存或缓存中读取操作码?
    猜你喜欢
    • 2010-11-28
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-01-28
    • 2011-07-01
    相关资源
    最近更新 更多