国产精品久久久aaaa,日日干夜夜操天天插,亚洲乱熟女香蕉一区二区三区少妇,99精品国产高清一区二区三区,国产成人精品一区二区色戒,久久久国产精品成人免费,亚洲精品毛片久久久久,99久久婷婷国产综合精品电影,国产一区二区三区任你鲁

0
  • 聊天消息
  • 系統消息
  • 評論與回復
登錄后你可以
  • 下載海量資料
  • 學習在線課程
  • 觀看技術視頻
  • 寫文章/發帖/加入社區
會員中心
創作中心

完善資料讓更多小伙伴認識你,還能領取20積分哦,立即完善>

3天內不再提示

從編譯原理的角度看C語言如何轉換成匯編語言的?

黃工的嵌入式技術圈 ? 來源:黃工的嵌入式技術圈 ? 作者:黃工的嵌入式技術 ? 2020-02-25 15:52 ? 次閱讀
加入交流群
微信小助手二維碼

掃碼添加小助手

加入工程師交流群

大家都知道計算機只能處理和識別二進制指令,而我們利用各種高級編程語言所編寫的程序,要經過一些列的處理步驟,最終轉變為匯編指令,再最后轉變為機器指令。

以上這些轉變是如何發生的就屬于大名鼎鼎的“編譯原理”所研究的范疇,作為計算機專業學生,它的重要性毫無質疑,自然也是必修課。而我們幾年所要給大家講的是高級編程語言到匯編語言這一轉變的過程,后面就以C語言為例。

怎么樣,計科專業的學生或者學過編譯原理的看到上面幾本書熟悉嗎?這幾本書差不多是大多數高校編譯原理課程的教材了。言歸正傳,我們今天討論的是C如何轉換成匯編語言,在講之前先給大家簡要介紹下匯編語言:

匯編語言(assembly language)是一種用于電子計算機、微處理器微控制器或其他可編程器件的低級語言,亦稱為符號語言。在匯編語言中,用助記符(Mnemonics)代替機器指令的操作碼,用地址符號(Symbol)或標號(Label)代替指令或操作數的地址。在不同的設備中,匯編語言對應著不同的機器語言指令集,通過匯編過程轉換成機器指令。普遍地說,特定的匯編語言和特定的機器語言指令集是一一對應的,不同平臺之間不可直接移植。

匯編語言的主要特點

(1)匯編語言是直接面向處理器(Processor)的程序設計語言。

(2)匯編語言的另一個特點就是它所操作的對象不是具體的數據,而是寄存器或者存儲器,也就是說它是直接和寄存器和存儲器打交道,這也是為什么匯編語言的執行速度要比其它語言快,但同時這也使編程更加復雜,因為既然數據是存放在寄存器或存儲器中,那么必然就存在著尋址方式,也就是用什么方法找到所需要的數據。

(3)再者,匯編語言指令是機器指令的一種符號表示,而不同類型的CPU 有不同的機器指令系統,也就有不同的匯編語言,所以,匯編語言程序與機器有著密切的關系。

簡單了解了匯編語言,那么根據編譯原理C語言是怎么轉換成匯編語言的呢?總共可分以下6個步驟:

1. 預處理 -> 2.詞法分析 -> 3.語法分析 -> 4.語義分析 -> 5.優化 -> 6.鏈接

1. 預處理:負責執行C語言中的#include, #if, #else 等預處理指令。注意,這里是去執行這些預處理指令。這些預處理指令的作用是根據你的系統環境配湊出最終版的源代碼。

2. 詞法分析:把你定義的函數名、變量名、預留的關鍵字等抽象化,用一個符號來代替,方便編譯程序處理。例如上圖中的main, return, printf等單詞,都被看作一個符號,轉換成M, R, P。在這個過程中,會檢查你的變量名、函數名名稱是否正確。

3. 語法分析:經過詞法分析處理之后,程序代碼已經變成一堆符號了,例如 I S T F ... M I R P(放心,人已經不認識了,但是計算機能認識)。這時的符號是打散的,語法分析負責把這些符號按照一定的結構組織起來,形成一個抽象語法樹(這個結構跟你寫的程序代碼的結構是對應起來的)。

4. 語義分析:當構造出這樣一個樹的結構之后,編譯就就會檢查語法是否正確,并且去掃描這棵樹。根據這棵樹的結構,生成中間指令了。這個中間指令已經非常接近匯編。中間指令跟匯編還是有區別的,因為不同廠家的CPU指令有所不同,所以還要根據不同廠家的CPU指令集,把這個中間指令轉換成匯編。

5. 優化:因為程序員有時代碼寫的不太好,會導致一些多余的操作,或者效率低的指令。優化過程可以找出這些毛病,自動替換成更好的指令。

6. 鏈接:以上過程只編譯了一個模塊,一個大型程序往往包好多個模塊。最后的鏈接過程負責把所有模塊組裝起來,構造出最后可以執行的程序。

聲明:本文內容及配圖由入駐作者撰寫或者入駐合作網站授權轉載。文章觀點僅代表作者本人,不代表電子發燒友網立場。文章及其配圖僅供工程師學習之用,如有內容侵權或者其他違規問題,請聯系本站處理。 舉報投訴
  • 二進制
    +關注

    關注

    2

    文章

    809

    瀏覽量

    43026
  • C語言
    +關注

    關注

    183

    文章

    7644

    瀏覽量

    145565
  • 編譯器
    +關注

    關注

    1

    文章

    1672

    瀏覽量

    51592
收藏 人收藏
加入交流群
微信小助手二維碼

掃碼添加小助手

加入工程師交流群

    評論

    相關推薦
    熱點推薦

    C語言主要特點

    。 5.語法限制不太嚴格,程序設計自由度大。 6.C語言允許直接訪問物理地址,能進行位(bit)操作,能夠實現匯編語言的大部分功能,可以直接對硬件進行操作。因此C
    發表于 01-05 07:41

    請問芯源CW32 MCU支持哪些匯編語言

    芯源CW32 MCU支持哪些匯編語言
    發表于 12-23 06:14

    C語言中可以嵌套匯編語言嗎?

    請問C語言中可以嵌套匯編語言嗎?
    發表于 12-15 08:14

    C語言C++之間的區別是什么

    ,尤其是在涉及到類型轉換時,會盡量防止隱式的、可能導致問題的類型轉換。 相比之下,C語言允許更多的靈活性,但也更容易產生類型相關的運行時錯誤,因為其類型檢查不如
    發表于 12-11 06:23

    匯編語言還有必要學習嗎

    1、嵌入式操作系統需要匯編語言 2、實時性要求非常高的地方,需要匯編語言,比如FFT算法。 3、匯編語言做運算那叫一個痛苦,下面是一段雙字節乘法,浮點數就更難搞
    的頭像 發表于 11-25 11:46 ?631次閱讀
    <b class='flag-5'>匯編語言</b>還有必要學習嗎

    C語言自動類型轉換

    是通過定義類型轉換運算來實現的。其一般形式為: (數據類型) (表達式) 其作用是把表達式的運算結果強制轉換成類型說明符所表示的類型 在使用強制轉換時應注意以下問題: 數據類型和表達式都必須加
    發表于 11-25 08:04

    C語言強制類型轉換

    強制類型轉換是通過定義類型轉換運算來實現的。其一般形式為: (數據類型) (表達式) 其作用是把表達式的運算結果強制轉換成類型說明符所表示的類型 在使用強制轉換時應注意以下問題:
    發表于 11-24 06:32

    開源鴻蒙技術大會2025丨編譯器與編程語言分論壇:語言驅動系統創新,編譯賦能生態繁榮

    在萬物智聯的時代背景下,操作系統底層能力的構建離不開編程語言編譯器的關鍵支撐。作為開源鴻蒙生態的核心技術,語言設計與編譯器、虛擬機實現的進步直接關系到開發效率、運行性能與系統安全。本
    的頭像 發表于 11-20 17:24 ?917次閱讀
    開源鴻蒙技術大會2025丨<b class='flag-5'>編譯</b>器與編程<b class='flag-5'>語言</b>分論壇:<b class='flag-5'>語言</b>驅動系統創新,<b class='flag-5'>編譯</b>賦能生態繁榮

    匯編語言的起源

    一、匯編語言是什么? 我們知道,CPU 只負責計算,本身不具備智能。你輸入一條指令(instruction),它就運行一次,然后停下來,等待下一條指令。 這些指令都是二進制的,稱為操作碼
    發表于 11-20 07:19

    C語言和單片機C語言有什么差異

    匯編語言機器才能讀懂,所以每個平臺的編譯編譯成對應平臺匯編的程序,每個平臺的匯編不一樣,當然編譯
    發表于 11-14 07:55

    蜂鳥E203能夠仿真運行C語言程序嗎?

    那兩本書里面都是說怎么在FPGA上運行C語言程序和Benchmark程序,它提供仿真器下如何編譯運行C
    發表于 11-06 06:21

    通過內聯匯編調用乘法指令mulh\\mulhsu\\mulhu

    高32位 mulhsurd, rs1,rs2 將rs1當作有符號數,rs2當作無符號數相乘,取高32位 2.由于C語言中的乘法符號,在經過軟件編譯后生成的匯編指令位mul指令,
    發表于 10-24 06:52

    .elf 轉換成.img 后,如何知道SPI flash 中的變量地址呢?

    它的 .map 中找到內存映射項目構建完成后的文件,如下圖。 數據.abcDscr 0x40030b00 0x100 ./usbabc.o 但是.elf 轉換成.img 后,如何知道SPI flash 中的變量地址呢?
    發表于 07-18 07:44

    匯編語言教學中文資料

    電子發燒友網站提供《匯編語言教學中文資料.rar》資料免費下載
    發表于 06-30 15:15 ?7次下載

    Windows環境下32位匯編語言中文資料

    電子發燒友網站提供《Windows環境下32位匯編語言中文資料.rar》資料免費下載
    發表于 06-30 15:14 ?0次下載