linux的内嵌汇编代码

/* C语言实现MCR指令 */

#define __STRINGIFY(x) #x

#define __MCR(coproc, opcode_1, src, CRn, CRm, opcode_2) \

__ASM volatile ("MCR " __STRINGIFY(p##coproc) ", " __STRINGIFY(opcode_1) ", " \

"%0, " __STRINGIFY(c##CRn) ", " __STRINGIFY(c##CRm) ", " \

__STRINGIFY(opcode_2) \

: : "r" (src) )

"\'"表示一行未写完,启用下一行

#define __STRINGIFY(x) #x 使用#表示将参数转换为字符串表面量

如_STRINGIFY(43) 展开后为"43"

p##coproc 先将coproc的参数带入,再将p和带入后的值连接起来,如coproc为15,则最终结果为p15,且是字符串"p15".

_ASM 的宏展开为 _asm 表示这条语句是汇编语句,其中汇编语句的每一部分都有引号,

在使用 __asm 关键字插入汇编语句时,通常需要用引号将汇编语句括起来。这是因为引号告诉编译器这部分代码应该被视为汇编语句,而不是源代码中的其他内容。

使用引号括起汇编代码的好处是,它使得编译器能够正确地区分汇编指令和其他源代码部分。这有助于避免可能产生的语法冲突或混淆,因为汇编语言和高级编程语言的语法规则往往不同。通过使用引号,编译器能够准确地解析并识别汇编语句,将其传递给相应的汇编器进行处理。

此外,引号也有助于与其他代码元素进行区分,比如约束(constraints)、寄存器或变量名称等。引号可以将汇编代码与其他部分隔离开来,确保编译器能够正确解析并处理它们。

因此,使用引号将内联汇编语句括起来是一种通用的做法,以确保编译器能够正确理解和处理嵌入的汇编代码。

相关推荐
Trouvaille ~几秒前
【Linux】UDP Socket编程实战(四):地址转换函数深度解析
linux·服务器·网络·c++·udp·socket·地址转换函数
峥嵘life2 分钟前
Android16 【GSI】CtsMediaCodecTestCases等一些列Media测试存在Failed项
android·linux·运维·服务器·学习
达子6662 分钟前
Ubuntu的Gparted 无法扩展内存 报错umount: /sdb1: target is busy
linux·运维·ubuntu
lisanmengmeng4 分钟前
cephadm 17.2.5安装部署 (二)
linux·运维·服务器·ceph
dump linux4 分钟前
Linux 显示服务器与合成器架构详解
linux·驱动开发·3d
GS8FG6 分钟前
鲁班猫2,lubancat2,linux sdk4.19整编出现的镜像源的问题修复
linux
燃于AC之乐7 分钟前
【Linux系统编程】基础IO:从文件本质到系统操作
linux·文件系统·系统调用·文件描述符·基础io
_OP_CHEN8 分钟前
【Linux系统编程】(二十六)一文吃透 Ext 系列文件系统软硬链接:原理、实战与底层逻辑揭秘
linux·操作系统·文件系统·c/c++·硬链接·软链接·ext2文件系统
RisunJan9 分钟前
Linux命令-lp(打印文件或修改排队的打印任务)
linux·运维·服务器
奋斗者1号10 分钟前
OpenClaw 部署方式对比:云端、WSL、Mac 本机、Ubuntu 虚拟机(2026年2月最新主流实践)
linux·ubuntu·macos