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

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

3天内不再提示

哪几种情况中必须使用内联汇编或嵌入型汇编

电子设计 来源:电子设计 作者:电子设计 2020-12-24 12:55 次阅读

ARM系列文章,请点击以下汇总链接:

《从0学arm合集》

一、gcc 内联汇编

内联汇编即在C中直接使用汇编语句进行编程,使程序可以在C程序中实现C语言不能完成的一些工作,例如,在下面几种情况中必须使用内联汇编或嵌入型汇编。

程序中使用饱和算术运算(Saturating Arithmetic)程序需要对协处理器进行操作在C程序中完成对程序状态寄存器的操作格式:__asm__ __volatile__("asm code"
:output
:input
:changed registers);

asm或__asm__开头,小括号+分号,括号内容写汇编指令。指令+ 用双引号引上。

参数

「asm code」主要填写汇编代码:


"mov r0, r0 "
"mov r1,r1 "
"mov r2,r2"

「output(asm->C)」用于定义输出的参数,通常只能是变量:

:"constraint" (variable)
"constraint"用于定义variable的存放位置:
r 表示使用任何可用的寄存器
m 表示使用变量的内存地址
+ 可读可写
= 只写
& 表示该输出操作数不能使用输入部分使用过的寄存器,只能用"+&"或"=&"的方式使用

「input(C->asm)」用于定义输入的参数,可以是变量也可以是立即数:

:"constraint" (variable/immediate
"constraint"用于定义variable的存放位置:
r 表示使用任何可用的寄存器(立即数和变量都可以)
m 表示使用变量的内存地址
i 表示使用立即数

Note:

使用__asm__和__volatile__表示编译器将不检查后面的内容,而是直接交给汇编器。如果希望编译器为你优化,__volatile__可以不加没有asm code也不能省略""没有前面的和中间的部分,不可以相应的省略:没有changed 部分,必须相应的省略:最后的;不能省略,对于C语言来说这是一条语句汇编代码必须放在一个字符串内,且字符串中间不能直接按回车换行,可以写成多个字符串,注意中间不能有任何符号,这样就会将两个字符串合并为一个指令之间必须要换行,还可以使用 使指令在汇编中保持整齐举例

例1:无参数,无返回值这种情况,output和input可以省略:

asm
( //汇编指令
"mrs r0,cpsr "
"bic r0,r0,#0x80 "
"msr cpsr,r0 "
);

例2:有参数 ,有返回值让内联汇编做加法运算,求a+b,结果存在c中

int a =100, b =200, c =0;
asm

add %0,%1,%2 "
: "=r"(c)
: "r"(a),"r"(b)
: "memory"
);

%0 对应变量c%1 对应变量a%2 对应变量b

例3:有参数 2 ,有返回值

让内联汇编做加法运算,求a+b,结果存在sum中,把a-b的存在d中

asm volatile

"add %[op1],%[op2],%[op3] "
sub %[op4],%[op2],%[op3] "
:[op1]"=r"(sum),[op4]"=r"(d)
:[op2]"r"(a),[op3]"r"(b)
:"memory"
);

%0 对应变量c%1 对应变量a%2 对应变量b

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

    关注

    0

    文章

    390

    浏览量

    21284
  • C程序
    +关注

    关注

    4

    文章

    254

    浏览量

    36027
收藏 人收藏

    评论

    相关推荐

    ARM汇编语言工具

    电子发烧友网站提供《ARM汇编语言工具.pdf》资料免费下载
    发表于 11-06 09:12 0次下载
    ARM<b class='flag-5'>汇编</b>语言工具

    op07c和op37的封装有哪几种

    咨询op07c和op37的封装有哪几种
    发表于 09-25 08:24

    LED驱动芯片的引脚功能主要包括哪几种

    至关重要的角色   LED驱动芯片的引脚功能主要包括哪几种?   LED驱动芯片的引脚功能主要包括以下10种:   1. 电源引脚(VCC、VDD):用于连接芯片的电源正极,提供工作电压。用户需要根据规格书指定的电源电压范围来选择合适的供电电压。  2. 接地引脚(
    的头像 发表于 08-12 10:19 1220次阅读

    断路器有哪几种

    断路器有哪几种  断路器是一种用于保护电气线路和设备的重要元件,它可以在电路发生短路过载时自动切断电源,以避免设备损坏和火灾等危险。断路器的种类繁多,根据不同的分类标准,可以分为以下几种: 1.
    的头像 发表于 06-10 16:19 2274次阅读

    STM32单片机有哪几种常见的开发环境?

    STM32单片机是一款广泛应用于嵌入式系统开发的单片机,针对其开发,有以下几种常见的方式:STM32单片机有哪几种常见的开发环境?KeilMDK是一款广泛使用的单片机集成开发环境,支持多种单片机系列
    的头像 发表于 05-18 08:04 3035次阅读
    STM32单片机有<b class='flag-5'>哪几种</b>常见的开发环境?

    降噪是什么原理 降噪方法分为哪几种

    降噪是什么原理 降噪方法分为哪几种  降噪是指通过一系列技术手段减少消除环境存在的噪声干扰,从而提高音频、图像、信号等的质量清晰度。降噪的原理主要涉及信号处理、数字滤波、统计学等
    的头像 发表于 03-14 16:55 7403次阅读

    变压器的调压方式有哪几种

    常见的大功率级别的调压方式有哪些? 变压器调压又分为哪几种形式? 调压入合调压出合调压入分调压出分这几个概念分别是什么意思?
    发表于 02-21 15:11

    熔断器有几种形式 熔断器的灭弧方法有哪几种

    熔断器有几种形式 熔断器的灭弧方法有哪几种? 熔断器是一种用来保护电路免受过电流和过负荷的损坏的电器设备。它们在电力系统和电子设备中广泛应用,也被称为电气保险丝。熔断器有多种形式,灭弧方法也有几种
    的头像 发表于 02-06 10:08 2396次阅读

    SPWM有哪几种调制方式?各有什么特点?

    SPWM有哪几种调制方式?各有什么特点? SPWM 是一种常用的调制技术,用于控制交流电压的形状和频率,以便实现电力电子设备的精确控制。SPWM可以分为基本SPWM和改进SPWM两种调制方式。下面将
    的头像 发表于 02-06 09:45 2670次阅读

    脉冲信号是指什么?常见的脉冲波形有哪几种?分别是什么?

    脉冲信号是指什么?常见的脉冲波形有哪几种?分别是什么? 脉冲信号是指信号的幅度在一个瞬时时间内从某个识别幅度快速变化的信号。这种信号常用来传递数字信息或者控制信号。脉冲信号的特点是幅度突变大、时间短
    的头像 发表于 02-05 15:52 9911次阅读

    什么是串行端口?有哪几种分类?

    什么是串行端口?有哪几种分类? 串行端口是计算机中用于进行数据传输的一种接口类型,通过单一的数据线逐位地传输数据。与串行端口相对应的是并行端口,与串行端口不同,它使用多条数据线同时传输数据。 串行
    的头像 发表于 02-02 15:40 2074次阅读

    BUCK电路的CCM模式占空比,你知道哪几种

    BUCK电路的CCM模式占空比,你知道哪几种? BUCK电路是一种常见的开关电源拓扑结构,广泛应用于各种电子设备。在控制Buck电路开关管的导通时间和关断时间时,需要根据具体应用需求选择合适
    的头像 发表于 02-01 09:08 2434次阅读

    fortran 算法汇编

    电子发烧友网站提供《fortran 算法汇编.rar》资料免费下载
    发表于 01-07 09:55 0次下载

    激光测距模块的工作原理 激光测距模块怎么用 激光测距方法有哪几种

    激光测距模块的工作原理 激光测距模块怎么用 激光测距方法有哪几种  激光测距模块,也称为激光测距仪激光测距装置,是一种利用激光技术测量目标距离的设备。它通常由激光发射器、接收器、时钟和微处理器等
    的头像 发表于 01-03 15:59 1847次阅读

    嵌入式C语言大神的进阶思路

    熟悉一种几种CPU架构,掌握几种架构的汇编语言,学会使用反汇编去分析C语言底层运行过程
    的头像 发表于 01-02 09:58 623次阅读