1

我一直在寻找一个开始学习嵌入式系统设计/编程的好地方,虽然所有人都建议使用 Arduino 和 RaspberryPi 等初学者设备,但我从未见过任何关于汇编级别编程的建议。我最近完成了我的计算机科学学士学位,但我越来越被硬件而不是软件编程所吸引。我参加了一门硬件设计课程,我们在 Logism 中为 68k 和逻辑设计进行了汇编编程。我有一个 Raspberry Pi,并且已经弄乱了一些,但是用于这些设备的语言仍然是更高级别的(C、C++、Python)。

所以我有几个问题,因为我对芯片/计算机硬件的低级设计非常感兴趣:

汇编语言在当今的硬件设计中有哪些应用?它仍然被广泛使用还是大部分被高级语言抽象了?

如果它仍然被广泛使用,什么类型的工作涉及汇编编程?最流行的汇编编程平台有哪些(68k、x86 等)?

最后,如果上述适用,现代汇编编程有哪些资源?

谢谢,我再次查看了有关深入嵌入式系统的其他一些问题,所以我希望我的问题足够不同,但如果我的问题已经得到解答,请随时标记!

4

3 回答 3

8

汇编语言在当今的硬件设计中有哪些应用?它仍然被广泛使用还是大部分被高级语言抽象了?

汇编语言用于特定用例。它在嵌入式系统软件的特定用例中仍然是最常见的,但它仍然存在于其他低级项目中,如 Linux 内核。它在这里和那里使用是因为有些事情只能在汇编中完成,并且因为汇编会产生更快和更小的代码。我会给你一个现实生活中的例子,让你更清楚。智能卡固件的一些关键部分是用汇编语言编写的,以保护软件执行免受不同类型的攻击,而汇编是您完全控制程序二进制表示的唯一语言。编译器可能会在固件中留下安全漏洞,这可能是攻击者的入口点。

如果它仍然被广泛使用,什么类型的工作涉及汇编编程?

这里有几个需要高级汇编语言知识的示例工程职位:

  • 编译工程师。
  • 固件工程师。
  • 安全固件工程师。
  • 恶意软件分析师。

最流行的汇编编程平台有哪些(68k、x86 等)?

查看这些时代最流行的 CPU 架构,您就会得到答案(剧透 Intel x86/x64,ARM)。

最后,如果上述适用,现代汇编编程有哪些资源?

谷歌

于 2015-08-07T21:05:06.623 回答
1

汇编语言在当今的硬件设计中有哪些应用?它仍然被广泛使用还是大部分被高级语言抽象了?

使用汇编程序进行设备级编程的理由很少。诸如 C 和 C++ 之类的系统级语言可以在资源很少且没有操作系统的独立裸机系统上运行。过去通常求助于汇编程序来实现时间关键的代码部分(根据我的经验,通常几乎没有必要的证据),但现代优化编译器很少需要,并且编译器封装了指令集专业知识,需要人工仅仅学习一个架构就需要很多小时 - 所以编译器通常会在性能上击败人类。

花了数年时间为一种架构磨练汇编技能的开发人员可能为他们的成就感到自豪,但通常不愿考虑新架构,因为他们的架构特定技能可能会击败编译器是多余的,而且通常不愿意承认现代编译器通常可以总体上获得更好的结果,因为这会使他们以前的辛勤工作无效。如果您必须快速行动(并且通常有商业需要这样做),那么汇编程序不是这样做的方法,我会警惕开发人员提倡使用汇编程序而不首先未能获得必要的结果在 C 或 C++(或 ADA 或 Forth - 除了汇编程序之外的任何东西)中。

我可能不会把汇编开发人员写成恐龙(实际上我会 - 但我试图保持礼貌;-)),但在最低级别的系统引导、中断处理或上下文切换(通常由现有的代码或库),汇编程序是您在必要时使用的东西,而不是从一开始就计划使用的东西 - 这通常是“过早的优化”

如果它仍然被广泛使用,什么类型的工作涉及汇编编程?最流行的汇编编程平台有哪些(68k、x86 等)?

它不是。很少。在超过 25 年的实时系统嵌入式开发中,我很少编写任何汇编程序,但有时需要能够阅读它——通常是编译器生成的汇编程序。

需要汇编代码的地方是高级语言无法到达的区域,这适用于访问非内存映射的核心 CPU 寄存器。例如,为了在 RTOS 中实现上下文切换,这种访问是必要的——但该代码可能非常小并且“样板”被复制——您不必自己编写这样的代码。例如,请参见此处,其中在大部分 C 代码中使用内联汇编程序的一小部分来影响 ARM Cortex-M 上的任务调度程序。

在具有非内存映射 I/O 的体系结构上,通常有需要汇编程序来实现的 inp/outp 指令,尽管这通常由目标库或编译器内部的 C 函数接口提供。对于内存映射 I/O,C 或 C++ 中没有任何内容可以阻止访问任意内存地址。然而,目标硬件可以实现限制此类访问的特权级别或内存保护,管理此类保护可能需要无法以高级语言实现的代码;但通常会再次提供库或内在支持。

在 ARM Cortex-M 上,可以直接从复位向量运行 C 代码,并完全用 C 代码实现中断处理程序,无需汇编程序胶水——因此在某些情况下越来越不需要汇编程序。

最后,如果上述适用,现代汇编编程有哪些资源?

大多数 C 和 C++ 工具链包括一个独立的宏汇编器并支持内联汇编(混合 C 和汇编代码),并且相关的源代码级调试器也支持指令级调试。

于 2015-08-09T18:34:26.507 回答
1

汇编语言在当今的硬件设计中有哪些应用?它仍然被广泛使用还是大部分被高级语言抽象了?

它在低级电子设计中仍然很常见,通常意味着嵌入式微控制器而不是微处理器。

如果它仍然被广泛使用,什么类型的工作涉及汇编编程?最流行的汇编编程平台有哪些(68k、x86 等)?

电子硬件设计人员仍然经常将汇编用于时间确定性或速度关键型操作(通常是大型高级语言应用程序的一小部分,作为从闪存加载到微控制器的固件运行)。

一些仍然常用汇编语言编程的芯片是 Atmel、Microchip PIC、Cypress、Parallax、Renesas、MSP430。我会惊讶地看到在大型应用程序(例如英特尔处理器或运行非 RTOS 的任何设备)上大规模使用汇编语言。

“当纳秒很重要时使用组装,否则坚持高水平。” 是业内的大致经验法则。

于 2015-08-11T10:27:36.410 回答