本期内容如下:
- GCC内联汇编简述
- GCC内联汇编“输出操作数”和“输入操作数”部分
- GCC内联汇编“可能影响的寄存器或存储器”部分
- GCC内联汇编参考实例一
- GCC内联汇编参考实例二
- 在汇编中调用C/C++函数
一、GCC内联汇编简述
由于本文介绍的是GCC的RISC-V工具链,因此在C/C++程序中嵌入汇编程序遵循GCC内联汇编(inline asm )语法规则,其格式由如下部分组成:
asm volatile { 汇编指令列表 :输出操作//非必要 :输入操作//非必要 :可能影响的寄存器或存储器 //非必要};
各组成部分简述如下:
“关键字asm”,为GCC的关键字,表示进行内联汇编操作。“关键字volatile”,或者_volatile_。_volatile_或volatile 是可选的,如果添加了该关键字,则要求编译器对后续括号内添加汇编程序不进行任何优化以保持其原状;如果没有添加此关键字,则编译器可能会将某些汇编指令优化掉。注意:也可以使用前后各带两个下划线的asm__,_asm_是GCC 关键字asm 的宏定义。
“汇编指令列表”,即需要嵌入的汇编指令,每条指令必须被双引号括起来(作为字符串),两条指令之前必须以“”或者“;”作为分隔符,如果没有添加分隔符的两个字符串将会被合并成为一个字符串。注意:也可以使用_volatile_,__volatile是GCC 关键字volatile 的宏定义。
“输出操作数”,用来指定当前内联汇编程序的输出操作符列表。注意:“汇编指令列表”中的编写语法和普通的汇编程序编写一样,可以在其中定义标签(Label)、定义对齐(.align n )、定义段(.section name )等。
有关“输出操作数”部分的详细介绍,本文后续内容详细介绍。