我四处寻找一个开始学习嵌入式系统设计/编程的好地方,虽然所有的人都推荐像Arduino和RaspberryPi这样的初学者设备,但我从未见过任何关于在组装层编程的建议。我最近完成了我的计算机科学学士学位,但我越来越被硬件而不是软件编程所吸引。我上过一门硬件设计课程,我们用Logism语言编写了68k的汇编程序和逻辑设计。我有一个Raspberry Pi,并且已经处理了一些,但是用于这些设备的语言仍然是更高级的(C,C++,Python)。
所以我有几个问题,因为我对芯片/计算机硬件的低层次设计很感兴趣:
汇编语言在当今硬件设计中的应用是什么?它是否仍然被广泛使用,还是大部分被高级语言所抽象?
如果它仍然被广泛使用,哪种类型的工作涉及汇编编程?什么是最流行的组装编程平台(68k,x86等)?
最后,如果以上所述适用,那么对于现代装配编程来说,有哪些资源?
谢谢,我再次看了一些关于深入嵌入式系统的其他问题,所以我希望我的问题有足够的不同,但是如果我的问题已经被回答了,请随时提醒我!
发布于 2015-08-07 21:05:06
汇编语言在当今硬件设计中的应用是什么?它是否仍然被广泛使用,还是大部分被高级语言所抽象?
在特定的用例中使用汇编语言。在嵌入式系统软件中,在特定的用例中,它仍然是最常见的,但是它仍然存在于其他低级项目中,比如Linux内核。之所以在这里和那里使用它,是因为有些事情只能在程序集中完成,而且程序集会导致代码更快、更小。我会给你一个真实的例子,让你更清楚。智能卡固件的一些关键部分是在程序中编写的,以保护软件执行免受不同类型的攻击,而程序组装是您完全控制程序二进制表示的唯一语言。编译器可能会在固件中留下安全漏洞,这可能是攻击者的入口点。
如果它仍然被广泛使用,哪种类型的工作涉及汇编编程?
在这里,很少有需要高级汇编语言知识的示例工程职位:
什么是最流行的组装编程平台(68k,x86等)?
检查当前最流行的CPU体系结构,您将得到答案(破坏者Intel x86/x64,ARM)。
最后,如果以上所述适用,那么对于现代装配编程来说,有哪些资源?
谷歌
发布于 2015-08-09 18:34:26
汇编语言在当今硬件设计中的应用是什么?它是否仍然被广泛使用,还是大部分被高级语言所抽象?
很少有理由使用汇编程序进行设备级编程。像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-11 10:27:36
汇编语言在当今硬件设计中的应用是什么?它是否仍然被广泛使用,还是大部分被高级语言所抽象?
在低水平的电子设计中,它仍然很常见,这意味着嵌入式微控制器而不是微处理器。
如果它仍然被广泛使用,哪种类型的工作涉及汇编编程?什么是最流行的组装编程平台(68k,x86等)?
电子硬件设计者仍然经常使用程序集进行时间确定或速度临界操作(通常是大型高级语言应用程序的小部分,作为固件从闪存加载到微控制器)。
目前仍常用汇编语言编程的芯片有Atmel、PIC芯片、Cypress、视差、Renesas、MSP430等。我会惊讶地看到,大规模使用汇编语言在大型铁板上使用更大的应用程序,如英特尔处理器或任何运行非实时操作系统的程序。
“当纳秒重要时使用组装,否则将保持在较高的水平上。”是这个行业的大致经验法则。
https://stackoverflow.com/questions/31886044
复制相似问题