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

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

    关注

    6078

    文章

    45629

    浏览量

    675361
  • C语言
    +关注

    关注

    183

    文章

    7649

    浏览量

    146404
  • ASM
    ASM
    +关注

    关注

    1

    文章

    69

    浏览量

    19986

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

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

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

扫码添加小助手

加入工程师交流群

    评论

    相关推荐
    热点推荐

    Astrodyne TDI ASM65:65W 医疗与工业电源的卓越之选

    Astrodyne TDI ASM65:65W 医疗与工业电源的卓越之选 在电子设备的设计中,电源的性能与可靠性至关重要。特别是在医疗和工业领域,对电源的要求更为严格。今天,我们就来详细了解一下
    的头像 发表于 04-28 15:40 139次阅读

    Astrodyne TDI 400W高功率密度医疗/工业级开放式框架电源ASM400S/BSM400S评测

    Astrodyne TDI 400W高功率密度医疗/工业级开放式框架电源ASM400S/BSM400S评测 在电子设备的设计中,电源模块的性能直接影响着整个系统的稳定性和可靠性。今天我们就来详细
    的头像 发表于 04-28 11:15 316次阅读

    探秘ASM30:30瓦医疗与工业电源的卓越之选

    探秘ASM30:30瓦医疗与工业电源的卓越之选 在电子工程师的世界里,电源供应器是各类设备稳定运行的基石。今天,我们要深入了解一款专为医疗和工业应用打造的电源供应器——Astrodyne TDI
    的头像 发表于 04-28 11:15 301次阅读

    高速铜缆或被淘汰?零线缆时代真的来了吗

    风光无限的高速铜缆,正面临一场前所未有的结构性考卷。铜缆会被淘汰吗?铜缆行业又将迎来什么样的重构? 01 OEX架构无铜缆 机柜“零线缆”的核心密码 OEX(Orthogonal Electrical Exchange)正交无背板架构,是中兴首创、面向高密度算力集群的下一代整机柜互联方案,更是
    的头像 发表于 04-24 10:46 313次阅读
    高速铜缆或被<b class='flag-5'>淘汰</b>?零线缆<b class='flag-5'>时代</b>真的来<b class='flag-5'>了吗</b>?

    S32DS无法调用ghs来编译asm代码,为什么?

    将ghs集成到s32ds中,并使用S32ds IDE构建项目,如您所见,我已经导入了asm文件,但是日志显示S32DS无法调用ghs来编译asm代码,我不知道为什么。我需要一些帮助。 谢谢。 在构建日志中,我看不到要编译的 asm
    发表于 04-08 06:36

    200W高功率密度医疗与工业级电源ASM201:设计与应用解析

    200W高功率密度医疗与工业级电源ASM201:设计与应用解析 在电子设备的设计中,电源的性能和可靠性至关重要。今天,我们要深入探讨AstrodyneTDI的ASM201系列200W高功率密度医疗
    的头像 发表于 03-29 14:40 274次阅读

    ASM掉线实例难挂,数据竟这样恢复# oracle数据恢复

    ASM
    Frombyte
    发布于 :2026年03月17日 14:55:53

    Oracle数据库ASM实例无法挂载的数据恢复案例

    一个Oracle数据库故障表现为ASM磁盘组掉线,ASM实例无法挂载(mount)。数据库管理员自行进行简单修复,未能成功,随后联系北亚数据恢复中心恢复数据。
    的头像 发表于 02-24 15:19 285次阅读
    Oracle数据库<b class='flag-5'>ASM</b>实例无法挂载的数据恢复案例

    探秘Broadcom ASM3-Sxx2-NxxxH 3W 3535表面贴装LED

    探秘Broadcom ASM3-Sxx2-NxxxH 3W 3535表面贴装LED 在当今的电子世界里,LED作为一种高效、可靠的光源,被广泛应用于各个领域。今天,我们就来深入了解一下博
    的头像 发表于 12-30 11:50 747次阅读

    5G时代 无人集群控制不用考虑带宽了吗

    5G时代飞速发展应用的今天,远程控制展现出非凡的低延迟特点,利用5G控制无人设备进行远程控制是当下主流,但是这样就不用考虑带宽问题了吗?无人设备集群控制一直面临着稳定性的考验,由于设备众多,需要回传
    的头像 发表于 12-16 18:00 1912次阅读
    5G<b class='flag-5'>时代</b>  无人集群控制不用考虑带宽<b class='flag-5'>了吗</b>?

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

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

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

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

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

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

    一文读懂 ASM1042 芯片应用技巧

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

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

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