0

我在大学里学过8086 Intel处理器的Assembly编程。我现在正在尝试修改它。

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

修改 8086 的组装真的有帮助吗?还是迁移到 32 位 x86 程序集会更好?

谢谢你。

4

1 回答 1

7

你的标题提出了一个与正文完全不同的问题。一般来说,你应该问一个直截了当的问题。

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

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

或类似的。

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

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

修改 8086 的组装真的有帮助吗?还是转向 32 位汇编之类的东西更好?

很少使用16 位8086 汇编器(在您的情况下教学之外),如果您对此感兴趣,x86 通常不是汽车设备。“32 位汇编”不是一回事,除非您特指 32 位 x86 程序集。

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

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

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

在大型代码库中,现代优化编译器在制作高效汇编方面可能比人类做得更好,除了几个重要的循环,你可以回来调整(通过调整 C 或重写那个循环)在 asm 中循环)。内联和常量传播在 asm 中很难,但编译器在这方面表现出色。对于作为良好编译器目标并且编译器开发人员花费大量时间在 x86 或 ARM 上的处理器来说尤其如此。

于 2018-11-17T00:07:30.610 回答