Assembly 汇编语言是如何编译的?

Assembly 汇编语言是如何编译的?,assembly,compilation,cpu,low-level,machine-code,Assembly,Compilation,Cpu,Low Level,Machine Code,我正在从事一个涉及组装的项目:目标是研究低水平的计算。到目前为止,我了解大多数事情是如何工作的(寄存器、指令、堆栈等等),但有些事情让我感到怀疑。据我所知,指令是以位编码的,包含操作码和一些附加参数。但是,进一步搜索,我看到汇编语言中的其他特性,我不理解处理器如何解释这些特性,例如if语句、标签和导入。我能想到的最合乎逻辑的解释是,这些特性的存在只是为了让程序员的生活更轻松,充当快捷方式。那么,编译汇编代码是如何工作的呢?采取了哪些步骤?有没有办法逐一查看它们?汇编是由汇编程序组装的,而不是编译

我正在从事一个涉及组装的项目:目标是研究低水平的计算。到目前为止,我了解大多数事情是如何工作的(寄存器、指令、堆栈等等),但有些事情让我感到怀疑。据我所知,指令是以位编码的,包含操作码和一些附加参数。但是,进一步搜索,我看到汇编语言中的其他特性,我不理解处理器如何解释这些特性,例如if语句、标签和导入。我能想到的最合乎逻辑的解释是,这些特性的存在只是为了让程序员的生活更轻松,充当快捷方式。那么,编译汇编代码是如何工作的呢?采取了哪些步骤?有没有办法逐一查看它们?

汇编是由汇编程序组装的,而不是编译的。你是对的,标签和指令不存在于最终的程序中,它们只是供汇编程序和链接程序使用的元数据。请提供你感兴趣的代码类型的示例。Ifs和ELSE最终转化为机器代码。一条或几条指令将某个值与某个值进行比较,然后根据条件,它将继续运行某些代码,或者它将跳过某些代码,然后根据if和else运行其他代码。大多数汇编程序都没有if语句,您看到哪一条语句具有该值?如果您正在谈论MASM的“高级别”像its和
这样的垃圾,而
指令,组装它(如果它支持MASM或JWASM),然后反汇编生成的对象文件以查看它实际使用了哪些指令。通常,您会在中看到类似的内容,或者从C编译器中看到的内容。()具有重定位元数据的对象文件是汇编和最终可运行机器代码之间的中间步骤之一。绝对地址,以及到未定义符号的相对跳转/置换,将只包含一个占位符
0
-4
或其他内容,以及告诉链接器填写内容的元数据。还有一些
objdump-drwC
在显示符号元数据时输出。