導航:首頁 > 源碼編譯 > 編譯器內聯

編譯器內聯

發布時間:2025-05-01 11:14:19

❶ 內聯匯編的GNU 匯編程序簡述

Linux 中使用的基本匯編程序語法。GCC(用於 Linux 的 GNU C 編譯器)使用 AT&T 匯編語法。下面列出了這種語法的一些基本規則。 asm ( assembler template
: output operands (optional)
: input operands (optional)
: list of clobbered registers
(optional)
);
本例中,匯編程序模板由匯編指令組成。輸入操作數是充當指令輸入操作數使用的 C 表達式。輸出操作數是將對其執行匯編指令輸出的 C 表達式。
內聯匯編的重要性體現在它能夠靈活操作,而且可以使其輸出通過 C 變數顯示出來。因為它具有這種能力,所以 asm 可以用作匯編指令和包含它的 C 程序之間的介面。
一個非常基本但很重要的區別在於 簡單內聯匯編只包括指令,而 擴展內聯匯編包括操作數。要說明這一點,考慮以下示例: { int a=10, b; asm (movl %1, %%eax; movl %%eax, %0; :=r(b) /* output */ :r(a) /* input */ :%eax); /* clobbered register */}
在上例中,我們使用匯編指令使 b 的值等於 a。請注意以下幾點:
b 是輸出操作數,由 %0 引用,a 是輸入操作數,由 %1 引用。 r 是操作數的約束,它指定將變數 a 和 b 存儲在寄存器中。請注意,輸出操作數約束應該帶有一個約束修飾符 =,指定它是輸出操作數。 要在 asm 內使用寄存器 %eax,%eax 的前面應該再加一個 %,換句話說就是 %%eax,因為 asm 使用 %0、%1 等來標識變數。任何帶有一個 % 的數都看作是輸入/輸出操作數,而不認為是寄存器。 第三個冒號後的修飾寄存器 %eax 告訴將在 asm 中修改 GCC %eax 的值,這樣 GCC 就不使用該寄存器存儲任何其它的值。 movl %1, %%eax 將 a 的值移到 %eax 中, movl %%eax, %0 將 %eax 的內容移到 b 中。 因為 b 被指定成輸出操作數,因此當 asm 的執行完成後,它將反映出更新的值。換句話說,對 asm 內 b 所做的更改將在 asm 外反映出來。

閱讀全文

與編譯器內聯相關的資料

熱點內容
三台伺服器配置IP地址 瀏覽:171
如何用命令方塊連續對話 瀏覽:274
win7linux共享文件夾 瀏覽:301
命令符打開本地服務 瀏覽:597
android應用程序源碼 瀏覽:699
安卓開發工程師簡歷怎麼寫 瀏覽:57
熱水器水量伺服器是什麼意思 瀏覽:115
stk衛星編譯 瀏覽:477
對後台程序員的要求 瀏覽:758
ios大文件夾圖標 瀏覽:624
生的計劃pdf 瀏覽:711
oppoa93加密便簽在哪查找 瀏覽:19
兩個數字的加減乘除運算編程 瀏覽:227
給手機加密碼忘記了怎麼辦 瀏覽:601
單片機運算符 瀏覽:297
移動端微信商城源碼 瀏覽:443
編程貓下一個背景在哪裡 瀏覽:358
javaclasstype 瀏覽:239
樂高編程和樂高課的延伸 瀏覽:357
蘋果手機怎麼切換app美國賬號 瀏覽:865