什么是"传递"在汇编编译中意味着

时间:2013-10-14 11:26:59

标签: assembly

正如我在问题中提出的那样,
什么是汇编代码编译过程中的一个过程,多亏了解释

2 个答案:

答案 0 :(得分:3)

为了生成目标文件,汇编器需要做两件事将每个指令助记符转换成指令字节,例如, add eax, ds:[eax]0x0000

其中一些很容易做到,因为所有信息都包含在指令中。但是,某些指令引用了指令之外的元素,例如:

  • 跳跃,有跳跃目标
  • 指向数据访问中的内存位置

如果已经看到跳转目标或内存位置,则没有问题。但是,程序集不会限制您访问已经看到的位置(例如C,它只允许您使用在文件中较早点定义的标识符),因此可能存在标识符不是的情况已知的。例如:

  cmp eax, 0
  jz skip_this
  add eax, edx

skip_this:
  mov ecx, eax

在此示例中,遇到skip_this时未知jz,因此汇编程序不知道放在那里的地址。

为了构建目标文件,汇编程序一次处理一行的汇编文件。它可以翻译它所能包含的内容,并跟踪它还不知道的内容。到这个阶段结束时,遇​​到了所有标识符。

当汇编程序完成此阶段时,它会再次处理汇编文件并填充空白。

现在,为了回答您的问题,从头到尾处理整个源文件的每个阶段称为传递

答案 1 :(得分:0)

“通过”意味着 - 通过源“传递”。回到打卡的日子里,你必须通过装甲/编译器所需的通道来提供卡片。

许多旧的汇编程序是“两次通过”,意味着“套牌”通过一次计算代码偏移,第二次生成代码(当然,它是在卡片上打孔)。

当然,使用更现代的设置,你不会注意到汇编程序是否是10次传递(性能不佳),因为它完全没有磁盘,并且传递之间没有用户交互。

还有“阶段”,编译器(不仅仅是汇编程序)可能是“两阶段”或“三阶段”或更多,具体取决于代码从源到最终对象的转换次数输出