首先,讓我們來共同瞭解一下 GCC 內聯彙編的一般格式:
asm(
代碼列表
: 輸出運算符列表
: 輸入運算符列表
: 被更改資源列表
);
在代碼列表中,每個彙編語句都要用" "括起來。
例:
asm(
"
add %0,%1,%2\n\t"
"
mov r1,%1\n\t"
:"+r"(sum)
:"r"(a),"r"(b)
:"r0"
);
說明:
在 C 代碼中嵌入彙編需要使用 asm 關鍵字,用法asm();
" " 引號內部包含的部分是指令部分
: 參數輸出部分 函數的返回值
: 參數輸入部分 函數的形參
: 修飾列表 內聯彙編的聲明部分,要被更改的資源
1.
"r" 用寄存器來保存參數
"i" 是立即數
"m" 一個有效的內存地址
"x" 只能做輸入
+ : 表示參數的可讀可寫
無: 表示參數只讀
= : 表示只寫
2.
%0 輸出列表和輸入列表的第1個成員
%1 輸出列表和輸入列表的第2個成員
%2 輸出列表和輸入列表的第3個成員
... 依次類推
3. 冒號部分可以省略,要省略全部省略,否則全部寫上