ORG 组装说明有啥作用?
Posted
技术标签:
【中文标题】ORG 组装说明有啥作用?【英文标题】:What does ORG Assembly Instruction do?ORG 组装说明有什么作用? 【发布时间】:2011-03-25 08:03:45 【问题描述】:谁能给我一个关于 ORG 指令的全面描述? 何时以及为何在汇编编写的应用程序中使用它?
在 x86 或 AMD64 上使用 Nasm。
【问题讨论】:
提示:有不止一种 CPU 架构被广泛使用,至少其中一些架构有不止一种汇编程序。如果您为哪种机器语言指定哪个汇编器,我们可能会更有帮助。 【参考方案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 总是从内存或缓存中读取操作码?以上是关于ORG 组装说明有啥作用?的主要内容,如果未能解决你的问题,请参考以下文章