如何在C代码中使用内联汇编之基本的asm

基本的asm-----没有操作数的汇编指令
基本的asm语句语法格式:
asm asm-qualifiers ( AssemblerInstructions )

asm关键字是一个GNU扩展。
当使用-ansi和各种-std选线编译代码时,使用关键字__asm__而不是使用asm。

asm限定符(asm-qualifiers):
volatile:
可选的volatile限定符不起作用。
所有基本的asm块都是隐式的volatile
inline:
如果使用inline限定符,那么出于内联的目的,asm语句的大小要尽可能的小。

参数(AssemblerInstructions):
这是一个指定汇编程序代码的文本字符串。
字符串可以包含汇编程序识别的任何指令,包括指示符。
GCC本身不解析汇编程序指令,也不知道它们是什么意思,甚至不知道它们是否是有效的汇编程序输入。

可以将多个汇编程序指令放在一个asm字符串中,由系统汇编代码中通常使用的字符分隔,如分号";“或”\n\t"等
在大多数地方都可以使用的组合是换行符和制表符(写为’ \n\t ')。
有些汇编程序允许分号(;)作为行分隔符。但是,请注意,一些汇编语言使用分号来表示注释的开始。

必须使用基本的asm语句的两种情况:
在函数之外使用内联汇编
扩展的asm语句必须在C函数中。
所以要在文件作用域内(“顶级”)编写内联汇编语言,必须在C函数之外使用基本的asm。
可以使用此技术发出汇编器指令,定义可以在文件的其他地方调用的汇编语言宏,或者用汇编语言编写整个函数。
函数外的基本asm语句可能不使用任何限定符。
使用naked属性声明的函数也要求的是基本的asm。

猜你喜欢

转载自blog.csdn.net/wzc18743083828/article/details/100543901