有通用ISA可以学吗?如果不是,我应该学哪一个?

Is there a general Assembly ISA to learn? If not, which one I should learn?

在大学学习了8086 Intel处理器的汇编编程。我现在正在尝试修改它。

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

修改8086的汇编真的有用吗? 或者 迁移到 32 位 x86 程序集之类的东西更好?

谢谢。

您的标题提出的问题与 body 完全不同。通常你应该问一个直截了当的问题。

不,没有通用的汇编语法——或者实际上有,但你可能不是这个意思,汇编语法通常是:

[<label>:] <opcode> <operands> [<comment>]

或类似。

对于 x86 实际上有两种常见语法 - Intel 和 AT&T(来自不同汇编器的 Intel 语法的多种变体,包括完全不同的非指令行指令),但它们或多或少那种形式。

不过你的意思可能是有没有通用的汇编语言指令集。如果是这样,那么 no 就没有了。这与 syntax 不同。与自然语言一样,机器语言具有句法、词汇和语义——单词的排序方式、可用的单词以及它们的含义。汇编语言的要点在于汇编助记符和machine-code指令集之间存在one-to-one关系。因此,有多少种处理器架构,就有多少种汇编语言。

Does revising the Assembly of the 8086 really help? Or moving to something like the 32-bit Assembly is better?

16 位 很少使用 8086 汇编程序(在您的情况下进行教学之外),如果您感兴趣的话,x86 通常不是汽车设备in. "32-bit Assembly" 不是东西,除非你特指 32-bit x86 assembly.

学习汇编语言对于理解计算机工作原理很有用——这可能就是为什么要教你一套过时的指令集的原因,因为目标不是能够用它编写代码,而是理解基本原则。这反过来会导致编写更好的 high-level 语言代码,编译成更小、更快的机器语言代码。它在调试 high-level 代码时也很有用 - 有时您需要单步执行指令级别才能理解为什么 compiler-generated 代码没有按照您的预期执行。但是为此你只需要能够读取程序集,而不是写入它。

可以在 系统级 语言(例如 C 或 C++)中实现的大量代码的汇编语言是不必要的,而且效率低下。编译器不仅是目标机器代码指令集的专家,所以你不必是,而且 high-level 语言也更有可能得到广泛的测试、验证工具的支持,静态分析、安全分析、性能分析和错误检测。代码也将更易于维护、更可重用,并且能够从更广泛的 third-party 库中受益。

也这么看,比如你是PIC汇编专家,但下一份工作是ARMCortex-M,现在你已经不是专家了,会写的更差代码比编译器生成的要长得多,并且需要更长的时间。那你失业了。

在大型代码库上,现代优化编译器在制作高效 asm 方面可能比人类做得更好,除了一些您可以返回并调整的重要循环(通过调整C 或在 asm 中重写那个循环)。内联和 constant-propagation 在 asm 中很难,但编译器非常擅长。对于作为良好编译器目标且编译器开发人员已花费大量时间的处理器尤其如此,例如 x86 或 ARM。