有大会ISA可以学吗?如果不会的话我应该学哪一个?

问题描述 投票:0回答:1

我在大学里学过8086 Intel处理器的汇编编程。我现在正在努力修改中。

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

修改8086的Assembly真的有帮助吗? 或者 迁移到 32 位 x86 程序集会更好?

assembly embedded x86-16 32-bit automotive
1个回答
7
投票

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

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

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

或类似的。

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

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

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

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

学习汇编语言对于理解计算机工作原理非常有用 - 这可能就是为什么你会学到过时的指令集,因为目标不是能够用它编写代码,而是理解基本原理。这反过来又可以编写更好的高级语言代码,这些代码可以编译为更小、更快的机器语言代码。它在调试高级代码时也很有用 - 有时您需要单步执行指令级别以了解为什么编译器生成的代码没有执行您期望的操作。但为此,您只需要能够读取程序集,而不是写入它。

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

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

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

© www.soinside.com 2019 - 2024. All rights reserved.