0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
会员中心
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

ASM要被时代淘汰了吗

Q4MP_gh_c472c21 来源:TopSemic嵌入式 作者:Norman Guo 2021-11-16 15:38 次阅读
加入交流群
微信小助手二维码

扫码添加小助手

加入工程师交流群

最近浏览一个挺流行的视频——X天学会单片机。内容确实通俗易懂,制作的比较用心。但其中的有个观点笔者不敢苟同,就是现在 C 语言已经强大到胜任所有任务,大家没有必要再去学习汇编语言了,直接从 C 学起就行了。

这种观点似乎有一定道理,我甚至怀疑现在是不是真的有很多同学不再学习汇编了。特别是现在大多数厂商都提供了完备的驱动代码的情况下,我们做项目基本上用不到写 ASM 代码了。

ASM 就要被时代淘汰了!可真的是这样吗?

下面我们结合两个实际工程中碰到的例子谈一下,掌握 ASM 语言对我们写出稳定高效代码的必要性。

我们看代码,主程序翻转 PORTA 的引脚 0,定时中断服务程序翻转 PORTA 的引脚 1。乍一看很难看出有什么问题。有不少同学就是这么中招儿的。这要是控制一些 LED 指示灯或蜂鸣器之类的还好,最多就是偶尔看着有点乱,或出点儿噪音。要是控制设备没准儿就要出大问题了。

有什么问题呢?因为中断发生时,主程序将在上一条正在执行中的语句执行完后中止运行。这里一定要注意,这里说的语句,不是一条 C 语句,而是一条 ASM 语句。我们在调试环境看一下反汇编。一条 C 语句被编译成了多条 ASM 语句。

LDRH r1, [r5,#0x14] (1)

EORS r1,r1,r4 (2)

STRH r1,[r5,#0x14] (3)

我们看到一条 C 语句实际上编译为 3 句 ASM,(1)把 PORTA 当前内容读进 r1,(2)最低位通过异或取反,(3)把取反后的值输出至 PORTA。如果中断恰好发生在 (1)或 (2)的执行期间,那么中断服务程序对 PORTA 引脚 1 的操作,会被主程序中语句(3)覆盖掉。

要避免这种情况,可以在操作 IO 端口(或其它类似的操作)前禁止中断,操作完之后再允许中断。在一些有位带(Bit Map)的单片机里,对单个引脚的操作可以通过位带区操作,避免各引脚之间互相影响。

汇编语言的使用,还可以大幅度的提高代码的效率。即使现在编译器的效率已经挺高了,但毕竟机器还是要比人笨一点儿。

举个例子,有不少工程里面需要用到浮点运算。如果直接调用浮点运算库,可以轻松的完成任务。但这样有一个限制,就是运算过程一直以最大的精度来运算,相当浪费 MCU 的时间。

我们的应用可能并不需要这么高的精度,而是需要尽快的完成运算并保留一定精度即可。在此情况下,如果我们用嵌入 ASM 做运算,可以通过减少迭代运算次数 (精度和迭代运算次数成正比)达到快速完成运算。在发动机控制等分秒必争的领域,有时候这样做是很有必要的。

责任编辑:haq

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • 单片机
    +关注

    关注

    6074

    文章

    45340

    浏览量

    663583
  • C语言
    +关注

    关注

    183

    文章

    7642

    浏览量

    144617
  • ASM
    ASM
    +关注

    关注

    1

    文章

    69

    浏览量

    19777

原文标题:ASM真要被扫进历史的垃圾堆了吗?

文章出处:【微信号:gh_c472c2199c88,微信公众号:嵌入式微处理器】欢迎添加关注!文章转载请注明出处。

收藏 人收藏
加入交流群
微信小助手二维码

扫码添加小助手

加入工程师交流群

    评论

    相关推荐
    热点推荐

    inline ASM(内联汇编)的细节分享

    内联汇编 基本的语法 asm volatile (\"instruction list\":OUTPUT:INPUT:(clobber/modify)); 如果
    发表于 10-31 09:11

    ASM330LHHX:汽车级六轴惯性模块与嵌入式机器学习核心的技术解析

    STMicroelectronics ASM330LHHX汽车级6轴惯性模块是一款系统级封装 (SiP),具有一个3轴数字加速度计和一个3轴数字陀螺仪,优化用于汽车非安全应用。ASM
    的头像 发表于 10-30 11:49 386次阅读
    <b class='flag-5'>ASM</b>330LHHX:汽车级六轴惯性模块与嵌入式机器学习核心的技术解析

    ASM330LHB:高精度汽车级6轴惯性模块,赋能下一代智能驾驶系统

    STMicroelectronics ASM330LHB高精度汽车级6轴惯性模块是一款系统级封装器件,配备三轴数字加速度计和三轴数字陀螺仪。提供安全手册和软件库(通过ISO26262:2018认证),支持开发采用 ASM330LHB和满足ASIL-B要求的应用。
    的头像 发表于 10-25 17:57 1293次阅读
    <b class='flag-5'>ASM</b>330LHB:高精度汽车级6轴惯性模块,赋能下一代智能驾驶系统

    ASM1042S2S芯片在轨应用性能实证与抗辐照能力验证

    摘要 随着航天技术的发展,空间电子器件面临着复杂的辐射环境挑战。CANFD协议作为一种高效通信技术,广泛应用于航天、工业和医疗等领域。本文系统分析了国科安芯推出的ASM1042S2S型CANFD芯片
    的头像 发表于 10-17 17:02 454次阅读

    国产CANFD芯片技术特性与应用前景综述:以ASM1042系列为例

    本文综述了国科安芯推出的国产CANFD芯片ASM1042系列的技术特性与应用前景。ASM1042系列作为一款高性能的CANFD收发器,支持5Mbps的高速通信和高达±70V的总线耐压,广泛应用于汽车电子、工业控制和航空航天等领域。
    的头像 发表于 08-27 18:02 810次阅读

    抗辐照与国产替代:ASM1042在卫星光纤放大器(EDFA)中的应用探索

    本文以国科安芯推出的ASM1042芯片为例,通过分析ASM1042的抗辐照性能、高速数据传输能力、可靠性以及国产化优势,结合EDFA系统的需求特点,深入探讨了其在商业卫星光纤放大器(EDFA)项目
    的头像 发表于 07-22 18:14 874次阅读

    求助,关于ASM330LHH TR调试中的问题求解

    想让各位大佬帮我看看我的ASM330LHH TR的问题,我使用SPI的模式3与陀螺仪进行通讯,一直调不通,返回的数据要么是FF要么是0,下面是我的原理图和代码,不知道是我软件的问题还是什么,
    发表于 07-11 06:09

    一文读懂 ASM1042 芯片应用技巧

    关于国科安芯 ASM1042 芯片的基础参数与规格书细节,已有大量资料可供查阅。本文聚焦应用工程师实际开发需求,从管脚接线技巧、电路防护设计到典型场景落地,拆解这款CAN FD 收发器的实战应用方法
    的头像 发表于 06-27 16:28 828次阅读
    一文读懂 <b class='flag-5'>ASM</b>1042 芯片应用技巧

    所以你做出来了吗

    所以你做出来了吗,求
    发表于 06-16 01:43

    硅基时代的黄昏:为何SiC MOSFET全面淘汰IGBT?

    革命性替代:为何SiC MOSFET全面淘汰IGBT? —— 当效率差距跨越临界点,IGBT被淘汰便是唯一结局 倾佳电子杨茜致力于推动国产SiC碳化硅模块在电力电子应用中全面取代进口IGBT模块
    的头像 发表于 05-30 16:24 804次阅读
    硅基<b class='flag-5'>时代</b>的黄昏:为何SiC MOSFET全面<b class='flag-5'>淘汰</b>IGBT?

    第一代半导体被淘汰了吗

    在半导体产业的百年发展历程中,“第一代半导体是否被淘汰”的争议从未停歇。从早期的锗晶体管到如今的硅基芯片,以硅为代表的第一代半导体材料,始终以不可替代的产业基石角色,支撑着全球95%以上的电子设备
    的头像 发表于 05-14 17:38 777次阅读
    第一代半导体被<b class='flag-5'>淘汰</b><b class='flag-5'>了吗</b>

    Altium 365平台有效解决电子元件淘汰管理难题

    倘若电子元件从未开启更新换代的进程,如今您手中的智能手机或许仍在依赖电子管艰难 “运作” 。元件的淘汰是电子领域中不可或缺的一部分。尽管这一过程是渐进的,但它代表着技术的进步。然而,元件的淘汰也会给PCB设计师带来痛点,尤其是当他们没有使用合适的元件和
    的头像 发表于 03-18 09:44 936次阅读
    Altium 365平台有效解决电子元件<b class='flag-5'>淘汰</b>管理难题

    高安全可靠CAN FD芯片ASM1042的技术特性与应用前景

    1.ASM1042简介 ASM1042是国科安芯推出的一款高性能CAN FD(CAN with Flexible Data-Rate)收发器芯片,专为高可靠性场景设计。该芯片基于ISO
    的头像 发表于 03-14 15:49 1179次阅读
    高安全可靠CAN FD芯片<b class='flag-5'>ASM</b>1042的技术特性与应用前景

    STM32CUBEIDE编译报error: expected identifier or \'(\' before \'__asm\'怎么解决?

    程序内容如下 / CMSIS compiler specific defines / ifndef__ASM define ASM asm endif / CMSIS compiler
    发表于 03-07 08:16

    EE-32:语言扩展:内存存储类型、ASM和内联构造

    电子发烧友网站提供《EE-32:语言扩展:内存存储类型、ASM和内联构造.pdf》资料免费下载
    发表于 01-14 15:03 0次下载
    EE-32:语言扩展:内存存储类型、<b class='flag-5'>ASM</b>和内联构造