我已经四处寻找开始学习嵌入式系统设计/编程的好地方,虽然所有人都建议使用Arduino和RaspberryPi这样的初学设备,但我从来没有见过任何关于编译程序的建议。我最近完成了计算机科学学士学位,但我越来越多地被硬件而不是软件编程所吸引。我参加了一个硬件设计课程,我们在Logistic中进行了68k和逻辑设计的汇编编程。我有一个Raspberry Pi,并且已经搞砸了一些,但是用于这些设备的语言仍然是更高级别的(C,C ++,Python)。
所以我有几个问题,因为我对芯片/计算机硬件的低级设计非常感兴趣:
汇编语言在今天的硬件设计中有哪些应用?它仍然被广泛使用,或者大多数是由更高级别的语言抽象出来的吗?
如果它仍然被广泛使用,那么什么类型的工作涉及装配编程?什么是最流行的汇编编程平台(68k,x86等)?
最后,如果上述情况适用,现代汇编编程有哪些资源?
谢谢,我再次看了一些关于深入嵌入式系统的其他问题,所以我希望我的问题有很大的不同,但如果我的问题已经得到解答,请随时提出这个问题!
答案 0 :(得分:7)
汇编语言在今天的硬件中有哪些应用 设计?它是否仍然被广泛使用,或者大部分被更高的抽象 等级语言?
汇编语言用于特定用例。它仍然是嵌入式系统软件中特定用例中最常见的,但它仍然存在于Linux内核等其他低级项目中。 它在这里和那里使用,因为有些事情只能在汇编中完成,因为汇编会产生更快更小的代码。我会给你一个真实的例子让你更清楚。 智能卡固件的一些关键部分是用汇编语言编写的,以保护软件执行免受不同类型的攻击,汇编是唯一可以完全控制程序二进制表示的语言。编译器可能会在固件中留下安全漏洞,这可能是攻击者的入口点。
如果它仍然被广泛使用,那么什么类型的工作涉及装配 编程?
这里有几个需要高级汇编语言知识的示例工程职位:
最流行的汇编编程平台是什么(68k, x86等)?
在这些时间检查最流行的CPU架构,您将得到答案(扰流器Intel x86 / x64,ARM)。
最后,现代汇编编程有哪些资源, 如果以上适用?
谷歌
答案 1 :(得分:0)
汇编语言在今天的硬件中有哪些应用 设计?它是否仍然被广泛使用,或者大部分被更高的抽象 等级语言?
使用汇编程序进行设备级编程的原因很少。诸如C和C ++之类的系统级语言可以在资源很少且没有操作系统的独立裸机系统上运行。在过去,使用汇编程序实现时间关键代码部分(通常在我的经验中几乎没有必要的证据)是常见的,但是现代优化编译器很少需要,并且编译器封装了需要人工的指令集专业知识只需一个架构就可以学习很多时间 - 所以编译器通常会在性能上击败人类。
花费多年时间为一个架构磨练其汇编技能的开发人员可能有理由为他们的成就感到自豪,但他们通常不愿意考虑新的架构,因为他们的架构特定技能可能会使编程器失败,并且经常是不愿承认现代编译器总能获得更好的结果,因为这会使他们以前的努力无效。如果你必须快速移动(并且通常存在这样做的商业要求),汇编程序不是这样做的方式,并且我会担心开发人员提倡使用汇编程序而不首先未能获得必要的结果在C或C ++(或ADA或Forth - 除汇编程序之外的任何东西)。
我不会把汇编程序开发人员写成恐龙(实际上我会 - 但我想要礼貌;-)),但是在最低级别的系统引导程序,中断处理或上下文切换(通常是在任何情况下由现有代码或库提供),汇编程序是您在必要时使用而非计划从一开始就使用的东西 - 通常是"premature optimisation"。
如果它仍然被广泛使用,那么什么类型的工作涉及装配 编程吗?什么是最流行的装配平台 编程(68k,x86等)?
不是。很少。在实时系统的嵌入式开发中超过25年我很少编写任何汇编程序,但有时需要能够读取它 - 通常是编译器生成的汇编程序。
需要汇编代码的地方是高级语言无法到达的区域,这适用于访问非内存映射核心CPU寄存器。这样的访问对于在RTOS中实现上下文切换是必要的 - 但是该代码可以非常小并且是锅炉板和#34;复制 - 你不必自己编写这样的代码。例如,请参阅here,其中大部分C代码中使用小型的内联汇编程序来实现ARM Cortex-M上的任务调度程序。
在具有非内存映射I / O的体系结构中,通常存在需要汇编程序实现的inp / outp指令,尽管通常由目标库或编译器内部函数由C函数接口提供。对于内存映射I / O,C或C ++中没有任何内容阻止访问任意内存地址。然而,目标硬件可以实现限制这种访问的特权级别或存储器保护,管理这种保护可能需要不能以高级语言实现的代码;但通常还会提供图书馆或内在支持。
在ARM Cortex-M上,可以直接从复位向量运行C代码,并完全用C代码实现中断处理程序,而不需要汇编程序粘合剂 - 因此在某些情况下,不需要汇编程序。
最后,现代汇编编程有哪些资源, 如果以上适用?
大多数C和C ++工具链包括独立的宏汇编程序并支持内联汇编(混合C和汇编代码),相关的源代码级调试器也支持指令级调试。
答案 2 :(得分:0)
汇编语言在今天的硬件中有哪些应用 设计?它是否仍然被广泛使用,或者大部分被更高的抽象 等级语言?
在低级电子设计中仍然很常见,这通常意味着嵌入式微控制器而不是微处理器。
如果它仍然被广泛使用,那么什么类型的工作涉及装配 编程吗?什么是最流行的装配平台 编程(68k,x86等)?
电子硬件设计人员仍然经常使用汇编进行时间确定性或速度关键型操作(通常是较大的高级语言应用程序的一小部分,作为从闪存加载到微控制器的固件运行)。
仍然通常使用汇编语言编程的一些芯片是Atmel,Microchip PIC,Cypress,Parallax,Renesas,MSP430。我会惊讶地看到大量使用汇编语言用于大型应用程序(如英特尔处理器或任何运行非RTOS的大型应用程序)。
"当纳秒很重要时使用组件,否则坚持高水平。"是行业中的近似经验法则。