Assembly 当执行地址解析时,汇编程序从哪里开始(就内存地址而言)?

Assembly 当执行地址解析时,汇编程序从哪里开始(就内存地址而言)?,assembly,Assembly,我试图理解一个现代语言的两次汇编程序的逐步分析,并逐行分解这些步骤 对于两次汇编程序,地址解析在第二次汇编时完成。然而,我不确定汇编程序在内存中具体从哪里提取 它是否只是从生成的符号表中的第一个列表开始?或者两次通过实际上意味着两次完整的代码读取(从一开始) 这个问题有意义吗?如果没有,很抱歉。通常,汇编程序会将源代码解析为其含义的某种内部表示形式,因此它只需再次循环,而不需要重新进行解析并将其与原始结果匹配 i、 第二步只是调整现有数据结构中的偏移字段 通常,汇编程序会将源代码解析为其含义的某

我试图理解一个现代语言的两次汇编程序的逐步分析,并逐行分解这些步骤

对于两次汇编程序,地址解析在第二次汇编时完成。然而,我不确定汇编程序在内存中具体从哪里提取

它是否只是从生成的符号表中的第一个列表开始?或者两次通过实际上意味着两次完整的代码读取(从一开始)


这个问题有意义吗?如果没有,很抱歉。

通常,汇编程序会将源代码解析为其含义的某种内部表示形式,因此它只需再次循环,而不需要重新进行解析并将其与原始结果匹配


i、 第二步只是调整现有数据结构中的偏移字段

通常,汇编程序会将源代码解析为其含义的某种内部表示形式,因此它只需再次循环,而不必重新进行解析并将其与原始结果匹配


i、 第二步只是调整现有数据结构中的偏移字段

这是一个很有争议的话题

one:
   j two
   nop
two:
   jmp one
在使用前,您遇到的第一个“通行证”是标签1,因此您可以辩称您已解析了该相对地址

对于jtwo,第一个过程中的汇编程序还没有看到这个标签,因此它必须在这个过程中确定它是否存在于本地,或者它是否是外部的

它看到2,然后看到j,但是已经知道1在哪里,所以在第一次通过时,它可以计算到1的相对偏移量,并完成该指令机器代码(假设该汇编语言和指令集j表示相对跳跃)

为了完成j two指令,需要第二次“通过”

现在,一些人坚持认为“pass”的定义是,在我们可以将源代码存储在内存以及符号表、部分或完全生成的机器代码等中之前,您可以像以前一样重新阅读源代码本身。今天,可能很遗憾,它都驻留在内存中(防止使用很长的机器生成的程序,如旧时代的程序,该程序可能超出您的内存)

另一些人认为,允许pass定义通过数据结构和符号表的传递来解析相对地址是完全正确的。这通常需要多次传递,具体取决于汇编语言和本地与全局标签

无论您是否将其称为过程,请解释如何不在生成的表的开头重新开始?您希望线性地从您生成的任何代码表开始到结束,并线性地遍历您为每个未解析标签生成的任何符号表

因此,有些人认为必须再次阅读源代码才能称之为两遍汇编程序。有些人认为,简单地通过原始代码生成的表进行阅读被认为是第二遍。因为在过去几十年中没有理由再次阅读源代码,但人们一直坚持这样做使用术语二次汇编程序并不断询问这个问题意味着二次汇编包括读取生成的表,而不仅仅是读取源代码

但由于这是一个基于观点的话题,你可以自由选择自己的定义


请注意,很大一部分计算机和编程术语含糊不清,缺乏具体的定义。或者更糟的是,许多人对定义有强烈的意见,但也有很大一部分人将自己附加到众多流行定义中的一个,从而使多个定义完全有效(且正确)但定义不同。

这是一个有争议的话题

one:
   j two
   nop
two:
   jmp one
在使用前,您遇到的第一个“通行证”是标签1,因此您可以辩称您已解析了该相对地址

对于jtwo,第一个过程中的汇编程序还没有看到这个标签,因此它必须在这个过程中确定它是否存在于本地,或者它是否是外部的

它看到2,然后看到j,但是已经知道1在哪里,所以在第一次通过时,它可以计算到1的相对偏移量,并完成该指令机器代码(假设该汇编语言和指令集j表示相对跳跃)

为了完成j two指令,需要第二次“通过”

现在,一些人坚持认为“pass”的定义是,在我们可以将源代码存储在内存以及符号表、部分或完全生成的机器代码等中之前,您可以像以前一样重新阅读源代码本身。今天,可能很遗憾,它都驻留在内存中(防止使用很长的机器生成的程序,如旧时代的程序,该程序可能超出您的内存)

另一些人认为,允许pass定义通过数据结构和符号表的传递来解析相对地址是完全正确的。这通常需要多次传递,具体取决于汇编语言和本地与全局标签

无论您是否将其称为过程,请解释如何不在生成的表的开头重新开始?您希望线性地从您生成的任何代码表开始到结束,并线性地遍历您为每个未解析标签生成的任何符号表

因此,有些人认为必须再次阅读源代码才能称之为两遍汇编程序。有些人认为,简单地通过原始代码生成的表进行阅读被认为是第二遍。因为在过去几十年中没有理由再次阅读源代码,但人们一直坚持这样做使用术语二次汇编程序并不断询问这个问题意味着二次汇编包括读取生成的表,而不仅仅是读取源代码

但既然这是