ORG汇编指令是用来设置程序中下一条指令的地址。

62

有人能给我一个关于ORG指令的全面描述吗?
在编写汇编语言应用程序时,何时以及为什么要使用它?

在x86或AMD64上使用Nasm。


5
提示:目前有多种CPU架构在广泛使用,某些架构至少有一种汇编语言。如果您能指明哪种汇编语言用于哪种机器语言,我们可以更好地提供帮助。 - David Thornley
7个回答

51

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


5
请注意,ORG 指令的含义可能因汇编器而异。例如,像 Paul 所述使用它来生成填充在 MASM 上是可行的,但在 NASM 上则不行。 - bcat
38
"ORG"是"origin"的缩写。 - starblue
@starblue 对的,“2.6.15 ORG - 定义起始地址”来自 MACRO-80 汇编器手册。 - roolebo
这整个时间我一直以为它代表“组织”,就像“组织我的代码以从指定地址开始”。 - puppydrum64

12

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

它不能用于固定地址,因为最终的地址取决于在汇编时不知道的段。


4
      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 ORG TAB+240
000194 F0F1F2F3F4F5F6F7 91 DC C'1234567'

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


1
如果NASM能够这样工作就好了... :q 但是不行,在NASM中,org只能使用一次。不能以这种方式“重置”MLC,这很糟糕 :q 它使得编写自重定位代码比它本来可以更难。 - SasQ
@SasQ:在NASM的-f bin输出格式中,您可以使用多个节(section),并使用 start=follows= 来控制它们的布局,还可以设置要计算的节(section)以支持通过使用 vstart=vfollows= 进行重定位。 - ecm

4

ORG的意思是原点。

在微处理器和微控制器编程中,使用ORG进行特定寻址。

例如:

.org 0000H

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

8
请翻译以下英文内容为中文,这是与IT有关的内容。请仅返回翻译后的文本:请不要全用大写字母回答,看起来像是在大声喊叫。 - Sabito stands with Ukraine

0

ORG xxxx

ORG 不是汇编语言指令,而是汇编器指令。它告诉汇编器从这里开始的指令应该放置在位置 xxxx。


0

ORG(ORiGin的缩写)是一种汇编指令,而不是指令。它定义了机器码(翻译后的汇编程序)在内存中的位置。至于ORG 100H,这涉及到80x86 COM程序格式(COMMAND),它只包含一个最大为64k字节的段。此外,它可以用于定义绝对地址,引入填充或生成特定的对齐方式...


-6

它是二进制程序在内存中加载的位置,如果有需要。

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

我正在编写自己的汇编器,无需担心在执行前先将操作码/值发送到内存中。

当读取时,直接在现场执行操作码要快得多,而不是尝试将它们缓存到内存中,存在过载栈的风险,可能会烧毁您的CPU。


1
这是RAM内存中程序加载的偏移量,从0x00000000h开始。ORG 100h = 将我的二进制代码放入内存位置0x00000000h + 100h或64位机器上的0x00000100h。 - Jason
12
第一句话是正确的。对我来说,剩下的内容看起来像无意义的话。无论使用寄存器还是内存来存储值都与使用“org”没有关系。您是否知道cpu中的指令指针总是指向一个内存位置?而且cpu总是从内存或缓存中读取操作码吗? - Gunther Piez

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接