Linux核心原始碼情景分析讀書筆記(3)-Linux核心中的組合語言

來源:互聯網
上載者:User

1. 在Linux的核心底層中的代碼,多數是以組合語言完成的。 
  彙編代碼以兩種形式存在,一種是純彙編代碼,尾碼名為.s的檔案。當然這樣的彙編代碼其中也加入了先行編譯選項,而不是單純的彙編。另一種是在C語言中嵌入組合語言。雖然在ANSI的C語言標準中並沒有關於彙編片段的規定,但事實上各種實際使用的C編譯中都作了這方面的擴充。GNU的C編譯器gcc也在這方面作了很強的擴充。
  GNU的C編譯器gcc在核心“純”彙編代碼中採用了不同於常用386組合語言的句法;而在嵌入C程式的彙編片段中,也增加了一些指導彙編工具如何分配使用寄存器、以及如何與C程式中定義的變數相結合的語言成分。這些成分使得這種組合語言實際上變成了一種介乎386彙編和C之間的一種中繼語言。

2.嵌入C代碼中的組合語言
插入C代碼中的組合語言片段可以分為四個部分,以“:”號進行分隔,其一般形式為
指令部:輸出部:輸入部:損壞部
其中指令部是必需的,格式大體與標準彙編相同。
輸出輸入指示彙編程式碼片段與C代碼變數之間的關聯。其相關格式如下:
"m" "v" "o" ----記憶體單元
"r"              ----任意寄存器
"q"             ----寄存器eax,ebx,ecx,edx之一
"i" "h"         ----直接運算元
"E" "F"       ----浮點數
"g"             ----任意
"a" "b" "c" "d"-分別表示使用eax,ebx,ecx,edx
"S" "D"       ----分別表示使用esi,edi
"I"               ----常數(0-31)

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在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.