首页 文章

用于编程硬件的汇编语言在哪里?

提问于
浏览
1

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

所以我有一些问题,因为我真的对芯片/计算机硬件的低级设计感兴趣:

汇编语言在今天的硬件设计中有哪些应用?它是否仍被广泛使用或大多数是由更高级别的语言抽象出来的?

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

最后,如果上述情况适用,现代大会节目的一些资源是什么?

谢谢,我再次看了一些关于深入嵌入式系统的其他问题,所以我希望我的问题有很大的不同,但如果我的问题已经得到解答,请随时提出这个问题!

3 回答

  • 0

    汇编语言在今天的硬件设计中有哪些应用?它是否仍被广泛使用或大多数是由更高级别的语言抽象出来的?

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

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

    在这里,您需要几个需要高级汇编语言知识的工程职位:

    • 编译工程师 .

    • 固件工程师 .

    • 安全固件工程师 .

    • 恶意软件分析师 .

    最流行的汇编编程平台(68k,x86等)是什么?

    在这些时间检查最流行的CPU架构,您将得到答案(扰流器Intel x86 / x64,ARM) .

    最后,如果上述情况适用,现代汇编节目有哪些资源?

    谷歌

  • 7

    汇编语言在今天的硬件设计中有哪些应用?它是否仍被广泛使用或大多数是由更高级别的语言抽象出来的?

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

    花费数年时间为一个体系结构磨练其汇编技能的开发人员可能有理由为他们的成就感到自豪,但是他们通常不愿意考虑新体系结构,因为他们的体系结构特定技能可能会使编程器失败,并且通常不愿意承认现代编译器总体上可以获得更好的结果,因为这会使他们以前的努力无效 . 如果你必须快速移动(并且通常有商业上的必要性),汇编程序不是这样做的方式,我会担心开发人员提倡使用汇编程序而不首先没有达到必要的结果在C或C(或ADA或Forth - 除汇编程序之外的任何东西) .

    我不会把汇编程序开发人员写成恐龙(实际上我会 - 但我想要礼貌;-)),但是在最低级别的系统引导程序,中断处理或上下文切换之外(通常由现有的在任何情况下代码或库),汇编程序是你在必要时求助的东西,而不是计划从一开始就使用 - 通常是"premature optimisation" .

    如果它仍然被广泛使用,那么什么类型的工作涉及装配编程?什么是最流行的汇编编程平台(68k,x86,等等 . )?

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

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

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

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

    最后,如果上述情况适用,现代汇编节目有哪些资源?

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

  • 0

    汇编语言在今天的硬件设计中有哪些应用?它是否仍被广泛使用或大多数是由更高级别的语言抽象出来的?

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

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

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

    一些通常用汇编语言编程的芯片是Atmel,Microchip PIC,Cypress,Parallax,Renesas,MSP430 . 我很惊讶地看到大量使用汇编语言用于大型应用程序(例如Intel处理器或任何运行非RTOS的大型应用程序) .

    “当纳秒很重要时使用装配,否则坚持高水平 . ”是行业中的近似经验法则 .

相关问题