当前位置:网站首页>GCC C内联汇编
GCC C内联汇编
2022-06-11 01:24:00 【Eddy_l】
GCC C内联汇编
C语言内联汇编基本语法如下:
asm asm-qualifiers ( AssemblerTemplate
: OutputOperands
[ : InputOperands
[ : Clobbers ] ])
asm asm-qualifiers ( AssemblerTemplate
: OutputOperands
: InputOperands
: Clobbers
: GotoLabels)
其中:
asm:声明C程序中插入汇编代码,也可写作
__asm__。asm-qualifiers:限定符,其可选值有:
volatile、inline、goto,其中volatile是指示编译器对此汇编代码不进行优化,inline用于指示编译器尽可能小的假设汇编代码指令的大小,goto用于汇编代码可以跳转到一个或多个C标签。AssemblerTemplate:汇编指令,在使用中需要用双引号包含起来,若存在多条指令,每条指令后需加入
\n\t分开。OutputOperands:输出操作数,内联汇编代码执行时,返回给C程序保存,当存在多个输出参数时,使用逗号分开。格式为:
[ [asmSymbolicName] ] constraint (cvariablename)- asmSymbolicName:符号名,任何允许的C变量均是被允许的,同一语句中两个操作数不能使用相同的符号名。
- constraint:表示约束,可选值参见表1。
- cvariablename:C语言变量名。
InputOperands:输入操作数,从哪里传入操作数据。格式为:
[ [asmSymbolicName] ] constraint (cexpression)。- asmSymbolicName:是符号名,任何有效的C变量名均可被接受,同一语句中两个操作数不能使用相同的符号名。当不使用时,可以不写。
- constraint:表示约束。
- cexpression:C语言表达式。
Clobbers:在内联汇编中,对于输出操作数所涉及的寄存器、内存,做出了修改,
Clobbers用于表示修改的内容是什么,可选值见表3。
不同平台的内联汇编会有不同,称为汇编方言,具体个平台的差异可见GNU C扩展汇编。
| constraint | 描述 |
|---|---|
| m | memory operand 表示要传入有效的地址,只要CPU能支持该地址,就可传入。 |
| r | register operand 寄存器操作数,使用寄存器来保存这些操作数。 |
| i | immediate integer operand 表示可以传入一个立即数。 |
| constraint Modifier Characters | 描述 |
|---|---|
| = | 只写操作数,表示内联汇编会修改这个操作数。 |
| & | 意味着这个操作数为一个早期的改动操作数,其在该指令完成前通过使用输入操作数被修改了。因此,这个操作数不可以位于一个被用作输出操作数或任何内存地址部分的寄存器。如果在旧值被写入之前它仅用作输入而已,一个输入操作数可以为一个早期改动操作数。 |
| + | 可读可写操作数,只能用来修饰输出操作数。 |
| 无 | 默认操作是只读。 |
更多修饰符见 http://hehezhou.cn/gccint/Modifiers.html#Modifiers。
| Clobbers | 描述 |
|---|---|
| cc | 表示汇编代码会修改条件(标志)寄存器 |
| memory | 表示汇编代码中,会修改内存。 |
参考例子
#define __ASM_STR(x) #x
#define csr_write(csr,val) \ ({
\ unsigned long __val = (unsigned long)(val); \ __asm__ __volatile__("csrw "__ASM_STR(csr) ", %0" \ : \ : "rK"(__val) \ : "memory"); \ })
#define csr_read_set(csr,val) \ ({
\ register unsigned long __v = val; \ __asm__ __volatile__("csrrs %0,"__ASM_STR(csr) ", %1" \ : "=r"(__v) \ : "rK"(__v) \ : "memory"); \ __v;
})
参考
🧇
边栏推荐
- Binary tree sequence traversal
- koa2学习笔记
- Redis learning notes (continuously updating)
- 软件测试是否需要掌握编程能力
- Find - (half find / half find)
- Sword finger offer II 095 Longest common subsequence dynamic programming
- ABAP CDS实现多行字段内容拼接
- Everything实现快速搜索的原理
- Byte beating client R & D Intern Tiktok side
- 2022 high altitude installation, maintenance and removal of simulated examination platform of theoretical question bank
猜你喜欢

Sword finger offer II 095 Longest common subsequence dynamic programming
![[3.delphi common components] 4 Select class component](/img/36/e78ee0c082bc36be6dbc49d0e12521.jpg)
[3.delphi common components] 4 Select class component

Ortele has obtained three rounds of financing nine months after its establishment, and hard discount stores have found new ways to grow?

金属有机骨架材料Fe-MIL-53,Mg-MOF-74,Ti-KUMOF-1,Fe-MIL-100,Fe-MIL-101)负载异氟醚/甲氨蝶呤/阿霉素(DOX)/紫杉醇/布洛芬/喜树碱

CRS-4544 & ORA-09925

浅析直播间海量聊天消息的架构设计难点

Find - (sequential search)

Me11/me12 purchase information record and condition record creation and update bapi:me_ INFORECORD_ MAINTAIN_ MULTI

Epoll 原理及应用 && ET模式与LT模式

关于Set集合类你都知道什么?来自《卷Ⅰ》的灵魂提问
随机推荐
金属有机骨架材料Fe-MIL-53,Mg-MOF-74,Ti-KUMOF-1,Fe-MIL-100,Fe-MIL-101)负载异氟醚/甲氨蝶呤/阿霉素(DOX)/紫杉醇/布洛芬/喜树碱
从测试零基础到测试架构师,这10年,他是这样让自己成才的
ME11/ME12采购信息记录及条件记录创建及更新BAPI:ME_INFORECORD_MAINTAIN_MULTI
Secret
查看Redis内数据,除了命令行和客户端,你还有第三种选择
During SSH configuration key login, you need to pay attention to whether the private key is set with a password
SAP SMARTFORMS换页打印自动判断
力扣刷题篇——哈希表
14: 00 interview, came out at 14:08, the question is really too
CRS-5017
Customized redistemplate in redis
金属有机框架MOF-Al(DIBA),MOF-Zr(DIBA),MOF-Fe(DIBA)包载姜黄素/羧苄西林/MTX甲氨蝶呤/紫杉醇PTX/阿霉素DOX/顺铂CDDP/CPT喜树碱等药物
[3.delphi common components] 7 timer
Colab reported an error: importerror: cannot import name '_ check_ savefig_ extra_ args‘ from ‘matplotlib. backend_ bases‘
Implementing stack with queue
cannot import name ‘dtensor‘ from ‘tensorflow.compat.v2.experimental‘
Oracle tablespaces, users, and authorization to users
10007. ISBN号码
Jump without refresh - detailed explanation of pushstate and replacestate methods in history
Defense measures for common vulnerabilities