程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> C語言 >> 關於C語言 >> 內聯匯編,c內聯匯編

內聯匯編,c內聯匯編

編輯:關於C語言

內聯匯編,c內聯匯編


原文鏈接:http://www.orlion.ga/776/

 用C寫的程序效率可能不如匯編,而且有些平台相關的指令必須手寫,例如x86是端口I/O,而c語言就沒有這個概念,所以in/out指令必須用匯編來寫。

    gcc提供了一種擴展寫法可以在C代碼中試用內聯匯編,最簡單的格式是__asm__("assembly  code"); , 例如__asm__("nop");,nop這條指令讓CPU空轉一個周期,如果需要執行多條指令則用\n\t將各條指令隔開,例如:

__asm__("movl $1, %eax\n\t"
        "movl $4, %ebx\n\t"
        "int $0x80");

    通常c代碼中的內聯匯編需要和c變量建立關聯,需要用到完整的內聯匯編樣式:

__asm__(assembler template
        : output operands               /* optional */
        : input operands                /* optional */
        : list of clobbered registers   /* optional */
        );

    這種格式由四部分組成,第一部分是匯編指令,和上面的例子一樣,第二部分和第三部分是約束條件,第二部分指示匯編指令的運算結果要輸出到那些c操作數中,c操作數應該是左值表達式,第三部分指示匯編指令需要從那些c操作數獲取輸入,第四部分是在匯編指令中被修改過的寄存器列表,指示編譯器哪些寄存器的值在執行這條__asm__語句時會改變。後三個部分都是可選的,如果沒有就空著值寫個":"號,例如:

    

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved