GCC inline asm

來源:互聯網
上載者:User

From: http://alpha-blog.wanglianghome.org/2011/04/07/gcc-inline-asm/
 

在使用進階語言編寫程式的時候,可以根據需要插入組譯工具,無須另外建立彙編檔案。

在編寫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裡。注意輸出運算元要使用”=“。

更多inline asm的知識,參見ARM GCC Inline Assembler Cookbook。

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.