汇编语法和平台之间的关系是什么
What is the relation between assembly-syntax and platform
在这个 youtube video 中,这个人解释说有两种类型的汇编语法 - Intel 和 AT&T。汇编语法和平台之间是否有关系,(例如英特尔平台汇编器只接受英特尔汇编语法)?
我会回答以防其他人犯了那个错误。正如 Cody Gray 评论的那样,Intel 和 AT&T 实际上都是 Intel X86 汇编语言。
资源:
没有任何联系。汇编语言语法由汇编器定义,汇编器是解析它的程序。机器代码是唯一必须遵守的真正标准。例如,尽管人们喜欢谈论两种 x86 语法,但实际上还有很多,因为语法涵盖了所有文本,而不仅仅是操作数的顺序。出于同样的原因,ARM 有多种语法,其他语法也有。
定义指令集符合芯片或 ip 供应商的利益,同时符合他们的利益,以汇编语言语法或至少相对于指令(有对于汇编语言来说,不仅仅是指令,在 x86 的情况下,指令本身的变化不仅仅是操作数的排序),并且这些供应商至少根据需要为他们制造或已经制造了一个汇编器和链接器(在他们的最大利益)。他们的文档和这个特定的汇编器完美匹配(符合他们的最大利益)。但标准化就此止步,下一个 person/team 使汇编程序只需要符合机器代码,并且通常会至少进行细微的更改使代码不兼容(有意或无意,为什么要制作一个完美的克隆) .无论出于何种原因,gas 实现往往会从 chip/ip 供应商创建不兼容的语言,除非 gas 版本是供应商驱动的初始版本(例如 risc-v)
语法连接和二进制文件格式(elf、coff 等)对于工具链很重要。出于显而易见的原因,编译器输出汇编语言然后启动汇编器,因此编译器生成的代码需要与该链中汇编器的语法相匹配。同样,汇编器输出的目标文件格式需要与链接器的格式相匹配,我假设像 gnu ld 这样的链接器实际上并不依赖汇编器来修补链接期间使用的机器码,只是直接修改机器码(或添加机器码根据需要编写代码,尽管在那种情况下可能确实使用汇编语言,但没有亲自 inspected/tested/confirmed).
有人可能会争辩说,因为汇编器先于编译器,编译器符合汇编器,如果是同一个人,那么可能会将项目添加到汇编器以帮助整体工具链解决方案,但会期望汇编器因此汇编语言作为一个整体排在第一位。
最后,作为程序员,我们希望安装的编译器能够为 system/platform 生成程序。 linux 机器上的 gcc 使工作程序 gcc hello.c -o 你好。我们不必为该平台做 bootstrap 和链接,这通常来自 C 库,但取决于工具链的设计,从头到尾的每个人都可能必须了解系统。
在这个 youtube video 中,这个人解释说有两种类型的汇编语法 - Intel 和 AT&T。汇编语法和平台之间是否有关系,(例如英特尔平台汇编器只接受英特尔汇编语法)?
我会回答以防其他人犯了那个错误。正如 Cody Gray 评论的那样,Intel 和 AT&T 实际上都是 Intel X86 汇编语言。
资源:
没有任何联系。汇编语言语法由汇编器定义,汇编器是解析它的程序。机器代码是唯一必须遵守的真正标准。例如,尽管人们喜欢谈论两种 x86 语法,但实际上还有很多,因为语法涵盖了所有文本,而不仅仅是操作数的顺序。出于同样的原因,ARM 有多种语法,其他语法也有。
定义指令集符合芯片或 ip 供应商的利益,同时符合他们的利益,以汇编语言语法或至少相对于指令(有对于汇编语言来说,不仅仅是指令,在 x86 的情况下,指令本身的变化不仅仅是操作数的排序),并且这些供应商至少根据需要为他们制造或已经制造了一个汇编器和链接器(在他们的最大利益)。他们的文档和这个特定的汇编器完美匹配(符合他们的最大利益)。但标准化就此止步,下一个 person/team 使汇编程序只需要符合机器代码,并且通常会至少进行细微的更改使代码不兼容(有意或无意,为什么要制作一个完美的克隆) .无论出于何种原因,gas 实现往往会从 chip/ip 供应商创建不兼容的语言,除非 gas 版本是供应商驱动的初始版本(例如 risc-v)
语法连接和二进制文件格式(elf、coff 等)对于工具链很重要。出于显而易见的原因,编译器输出汇编语言然后启动汇编器,因此编译器生成的代码需要与该链中汇编器的语法相匹配。同样,汇编器输出的目标文件格式需要与链接器的格式相匹配,我假设像 gnu ld 这样的链接器实际上并不依赖汇编器来修补链接期间使用的机器码,只是直接修改机器码(或添加机器码根据需要编写代码,尽管在那种情况下可能确实使用汇编语言,但没有亲自 inspected/tested/confirmed).
有人可能会争辩说,因为汇编器先于编译器,编译器符合汇编器,如果是同一个人,那么可能会将项目添加到汇编器以帮助整体工具链解决方案,但会期望汇编器因此汇编语言作为一个整体排在第一位。
最后,作为程序员,我们希望安装的编译器能够为 system/platform 生成程序。 linux 机器上的 gcc 使工作程序 gcc hello.c -o 你好。我们不必为该平台做 bootstrap 和链接,这通常来自 C 库,但取决于工具链的设计,从头到尾的每个人都可能必须了解系统。