Assembly 是否有一个大会ISA需要学习?如果没有,我应该学哪一个?

Assembly 是否有一个大会ISA需要学习?如果没有,我应该学哪一个?,assembly,embedded,x86-16,32-bit,automotive,Assembly,Embedded,X86 16,32 Bit,Automotive,我在大学里学过8086英特尔处理器的汇编编程。我现在正试图修改它 我听说汽车嵌入式系统需要装配,所以我想知道哪种学习方法最好?我不需要浪费时间,因为我想找份工作 修改8086的装配真的有帮助吗?或者移动到32位x86汇编之类的组件更好 谢谢。你的标题提出的问题与正文完全不同。一般来说,你应该问一个简单的问题 不,没有通用的汇编语法-或者实际上有,但你可能不是说,汇编语法通常是: 或类似的 对于x86,实际上有两种常见的语法——Intel和AT&T,它们具有来自不同汇编程序的多种Intel语法变体

我在大学里学过8086英特尔处理器的汇编编程。我现在正试图修改它

我听说汽车嵌入式系统需要装配,所以我想知道哪种学习方法最好?我不需要浪费时间,因为我想找份工作

修改8086的装配真的有帮助吗?或者移动到32位x86汇编之类的组件更好


谢谢。

你的标题提出的问题与正文完全不同。一般来说,你应该问一个简单的问题

不,没有通用的汇编语法-或者实际上有,但你可能不是说,汇编语法通常是:

或类似的

对于x86,实际上有两种常见的语法——Intel和AT&T,它们具有来自不同汇编程序的多种Intel语法变体,包括针对非指令行的完全不同的指令,但它们和其他代码或多或少都是这种形式

但你可能的意思是有一套通用的汇编语言指令集。如果是这样的话,那就没有了。这与语法不同。与自然语言一样,机器语言也有语法、词汇和语义——单词的顺序、可用单词以及它们的含义。汇编语言的要点是汇编助记符和机器代码指令集之间存在一对一的关系。因此,汇编语言和处理器体系结构一样多

修改8086的装配真的有帮助吗?或者搬到 像32位汇编这样的东西更好吗

16位8086汇编程序很少在教学之外使用,就像您的情况一样,如果您感兴趣的话,x86通常不是一个自动设备。32位汇编不是一个东西,除非您特别提到32位x86汇编

学习汇编语言有助于理解计算机工作的基本原理——这可能就是为什么你要学习一套过时的指令集,因为其目的不是为了能够在其中编码,而是为了理解基本原理。这反过来会导致编写更好的高级语言代码,从而编译成更小、更快的机器语言代码。它在调试高级代码时也很有用——有时您需要在指令级进行操作,以了解编译器生成的代码为什么不能达到预期效果。但为此,您只需要能够读取程序集,而不是编写它

大型代码体的汇编语言,可以用C或C++等系统级语言来实现,这是不必要的和没有效率的。编译器不仅是目标机器代码指令集的专家,因此您不必如此,而且高级语言也更有可能得到测试、验证、静态分析、安全分析、性能分析和错误检测等多种工具的支持。代码也将更加可维护、可重用,并且能够从更广泛的第三方库中获益

也可以这样看,例如,你是PIC汇编方面的专家,但你的下一个工作是ARM Cortex-M,现在你不再是专家了,你将编写比编译器生成的代码糟糕得多的代码,并且需要更长的时间来完成。那你就失业了


在一个庞大的代码库中,现代优化编译器在生成高效的asm方面可能比人类做得更好,也可能比人类做得更好,除了一些重要的循环之外,您可以通过调整C或在asm中重写这一个循环来返回并调整这些循环。内联和常量传播在asm中很难实现,但编译器在这方面非常出色。对于作为良好编译器目标的处理器以及编译器开发人员花费了大量时间的处理器(如x86或ARM),尤其如此。

x86很少用于嵌入式系统。它的主要优点是向后兼容,并且可以使用非常高性能的实现。在某种程度上,由于其可变长度编码,代码密度也有所提高。但这并不能补偿在嵌入式CPU中高效解码的功耗。没有通用汇编,每个CPU都是原始的,即使对于同一个CPU,也常常有几个语法稍有不同的汇编程序,尽管生成的指令当然是相同的,因为这是由硬件中的CPU定义的,但各种指令或语法可能完全不同different@PeterCordes:有很多嵌入式系统,尤其是基于80186的。该芯片有许多变体,包括跨越20-25年的SoC。虽然现在很难找到生产已经下降,但许多现有的嵌入式设备仍然使用它们。还有助于他们中的一些人是米尔斯派克·伽马洛特曼;程序集不支持
就其本身而言,它可以优化任何东西——恰恰相反,它完全满足程序员对机器指令级别的要求。这是否是最优的完全取决于程序员在特定压缩集中的技能。另一方面是你写的C代码,它将更具可移植性,而且编译器是专家,是目标指令集,它将胜过大多数程序员。真正的汇编专家程序员是编写编译器优化程序的人,也不是浪费精力去优化汇编代码的人。@GamalOthman如果你读过维基百科和其他网站上的东西,你应该包括一个链接或引用。它当然不是汽车系统所必需的,我怀疑大多数汽车代码都没有使用它。通常,当编译器优化程序生成错误代码时,这是因为输入源依赖于某些未定义的行为。虽然优化器确实是编译器最有可能出现错误的地方,因为它是最复杂的,但这些错误很少发生,而且要纠正任何不平凡的汇编代码都是一项艰巨的工作,维护起来也更困难。谢谢。我只是一个编程新手,很抱歉用错了表达式。现在,我的理解是,在我的情况下,大会不会对我有多大帮助。我宁愿深入C,那就足够了。我说的对吗?还有Plan9的汇编语法,如果您编写用于Go程序的汇编,它最为相关。
[<label>:] <opcode> <operands> [<comment>]