【发布时间】:2011-03-25 08:03:45
【问题描述】:
谁能给我一个关于 ORG 指令的全面描述?
何时以及为何在汇编编写的应用程序中使用它?
在 x86 或 AMD64 上使用 Nasm。
【问题讨论】:
-
提示:有不止一种 CPU 架构被广泛使用,至少其中一些架构有不止一种汇编程序。如果您为哪种机器语言指定哪个汇编器,我们可能会更有帮助。
标签: assembly x86 nasm directive
谁能给我一个关于 ORG 指令的全面描述?
何时以及为何在汇编编写的应用程序中使用它?
在 x86 或 AMD64 上使用 Nasm。
【问题讨论】:
标签: assembly x86 nasm directive
ORG 用于设置汇编器位置计数器。这可能会或可能不会在链接时转换为加载地址。它可用于定义绝对地址,例如在定义诸如可能需要位于固定地址的中断向量之类的东西时,或者它可用于引入填充或为以下代码生成特定的对齐方式。
【讨论】:
ORG 指令的含义可能因汇编程序而异。例如,使用它来生成 Paul 提到的填充将适用于 MASM,但 not on NASM.
ORG 只是指示在哪里放置与当前段相关的下一段代码/数据。
将它用于固定地址是没有用的,因为最终地址取决于在汇编时未知的段。
【讨论】:
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 指令。
【讨论】:
ORG 表示起源 ORG 用于微处理器和微控制器编程中的特定寻址。
例如:
.org 0000H
这意味着我们要从0000H 地址开始我们的程序。
【讨论】:
它是您希望将二进制程序加载到的内存位置(如果有)。
我不喜欢使用 org,而是直接向硬件发出操作码/值。 您始终可以将值存储在 ax 中并在 bx、cx、dx 之间传输。
我正在编写自己的汇编程序来输出操作码/值,而不必担心在执行之前先将其发送到内存,
在读取操作码时就地执行操作码要快得多,而不是试图将它们缓存到内存中,否则可能会导致堆栈过载而烧毁你的 CPU
【讨论】:
org的使用无关。您是否知道 CPU 中的指令指针总是指向 memory 位置?并且 CPU 总是从内存或缓存中读取操作码?