在使用進階語言編寫程式的時候,可以根據需要插入彙程式設計式,無須另外建立彙編檔案。
在編寫inline asm程式時,需要使用
asm
關鍵字,并将彙程式設計式用括号括起來,以分号結尾。格式如下: asm(code : output operand list : input operand list : clobber list);
如果最右側的部分為空,可以聯通相鄰的冒号一起省略。最簡單的形式是隻有指令部分,如:
asm("mov r0,r0");
複雜的形式則需要提供參數清單,GCC支援兩種方式标注彙編指令參數,老的方式是使用數字,如%0便是第0個操作數,%1表示第一個操作數,以此類推;新的方式支援變量名,如%[result]或者$[value],這個名字和進階語言裡面的變量沒有任何關系。例子如下:
asm("vmsr fpscr,%[value]" : : [value] "r" (var));
或者
asm("vmsr fpscr, %0" : : "r" (var));
VMSR
是ARM的一條VFP指令,上述彙編指令的意圖是将變量
var
的值儲存到
FPSCR
狀态寄存器裡面。由于改指令沒有輸出操作數,是以輸出操作數部分為空,但是相應的冒号要保留。下面的例子則隻有輸出操作數,沒有輸入操作數和clobber list,在這種情況下,相應的冒号也可以省略。
asm("vmrs %[result], fpscr" : "=r" (var));
asm("vmrs %0, fpscr" : "=r" (var));
VMRS
指令将狀态寄存器
FPSCR
的值儲存到變量
var
裡。注意輸出操作數要使用”
=
“。