色哟哟视频在线观看-色哟哟视频在线-色哟哟欧美15最新在线-色哟哟免费在线观看-国产l精品国产亚洲区在线观看-国产l精品国产亚洲区久久

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

    文章

    802

    瀏覽量

    41868
  • C語言
    +關注

    關注

    180

    文章

    7618

    瀏覽量

    138660
  • 編譯器
    +關注

    關注

    1

    文章

    1645

    瀏覽量

    49463
收藏 人收藏

    評論

    相關推薦

    EE-128:C語言中的DSP:C調用匯編類成員函數

    電子發燒友網站提供《EE-128:C語言中的DSP:C調用匯編類成員函數.pdf》資料免費下載
    發表于 01-07 13:48 ?0次下載
    EE-128:<b class='flag-5'>C</b><b class='flag-5'>語言</b>中的DSP:<b class='flag-5'>從</b><b class='flag-5'>C</b>調用<b class='flag-5'>匯編</b>類成員函數

    TMS320C6000匯編語言工具v7.4用戶指南

    電子發燒友網站提供《TMS320C6000匯編語言工具v7.4用戶指南.pdf》資料免費下載
    發表于 12-30 16:42 ?0次下載
    TMS320<b class='flag-5'>C</b>6000<b class='flag-5'>匯編語言</b>工具v7.4用戶指南

    Triton編譯器支持的編程語言

    Triton編譯器支持的編程語言主要包括以下幾種: 一、主要編程語言 Python :Triton編譯器通過Python接口提供了對Triton語言
    的頭像 發表于 12-24 17:33 ?613次閱讀

    TMS320C6000匯編語言工具 v8.3.x

    電子發燒友網站提供《TMS320C6000匯編語言工具 v8.3.x.pdf》資料免費下載
    發表于 11-07 10:00 ?0次下載
    TMS320<b class='flag-5'>C</b>6000<b class='flag-5'>匯編語言</b>工具 v8.3.x

    ARM匯編語言工具

    電子發燒友網站提供《ARM匯編語言工具.pdf》資料免費下載
    發表于 11-06 09:12 ?0次下載
    ARM<b class='flag-5'>匯編語言</b>工具

    TMS320C28x匯編語言工具

    電子發燒友網站提供《TMS320C28x匯編語言工具.pdf》資料免費下載
    發表于 11-01 09:32 ?0次下載
    TMS320<b class='flag-5'>C</b>28x<b class='flag-5'>匯編語言</b>工具

    C語言與Java語言的對比

    C語言和Java語言都是當前編程領域中的重要成員,它們各自具有獨特的優勢和特點,適用于不同的應用場景。以下將從語法特性、內存管理、跨平臺性、性能、應用領域等多個方面對C
    的頭像 發表于 10-29 17:31 ?575次閱讀

    TMS320LF240x DSP的C語言匯編代碼快速入門

    電子發燒友網站提供《TMS320LF240x DSP的C語言匯編代碼快速入門.pdf》資料免費下載
    發表于 10-18 10:14 ?1次下載
    TMS320LF240x DSP的<b class='flag-5'>C</b><b class='flag-5'>語言</b>和<b class='flag-5'>匯編</b>代碼快速入門

    TIA將一個電流信號轉換成電壓,如何選擇合適的opa?

    TIA將一個電流信號轉換成電壓,并且經常用于測量弱電流,如圖1所示。 由于電流信號一般很小,在nA 左右,且頻率在10k左右,再選擇百k 左右的Rf 電阻, 在這樣的應用中, 噪聲 ,帶寬 等角度,應該如何選擇合適的op
    發表于 09-20 07:32

    hex文件怎么能轉回去c語言

    的差異。 然而,如果你想要從 .hex 文件中獲取一些有用的信息或者對程序進行分析,你可以采取以下步驟來盡可能接近原始的C語言邏輯: 反匯編 : 使用反匯編工具(如IDA Pro、Gh
    的頭像 發表于 09-02 10:46 ?2951次閱讀

    hex可以轉成源代碼么

    Hex文件可以轉換成源代碼的近似形式,但無法直接還原為原始的、完全相同的源代碼 。這是因為Hex文件是二進制文件,包含了程序編譯后的機器碼,這些機器碼與原始的源代碼在結構和表達上存在顯著的差異。不過
    的頭像 發表于 09-02 10:41 ?1374次閱讀

    hex文件如何查看原c語言代碼

    直接將 .hex 文件轉換回原始的 C 語言代碼是不可能的,因為 .hex 文件是二進制文件,它包含了單片機程序編譯后的機器碼,這些機器碼與原始的
    的頭像 發表于 09-02 10:37 ?3243次閱讀

    RISC-V匯編語言

    一、導言 C 程序翻譯成為可以在計算機上執行的機器語言程序的四個經典步驟。這一章的內容包括了后三個步驟,不過我們要從匯編語言在 RISC-V 函數調用規范中的作用開始說起。 上圖
    發表于 08-19 18:07

    C語言:嵌入式開發中的關鍵編譯器角色

    嵌入式程序開發跟硬件密切相關,需要使用C語言來讀寫底層寄存器、存取數據、控制硬件等,C語言和硬件之間由編譯器來聯系,一些
    發表于 04-26 14:53 ?799次閱讀
    <b class='flag-5'>C</b><b class='flag-5'>語言</b>:嵌入式開發中的關鍵<b class='flag-5'>編譯</b>器角色

    請問在STM32CubeIDE下如何嵌入匯編語言代碼?

    在STM32CubeIDE下如何嵌入匯編語言代碼??
    發表于 03-25 06:56
    主站蜘蛛池模板: 久久综合狠狠综合久久综合88 | 欧美重口绿帽video | 99久久久A片无码国产精 | 老头操美女 | 伊人久久大香线蕉综合电影网 | 儿媳妇完整版视频播放免费观看 | 国产亚洲人成网站在线观看播放 | 亚洲国产综合人成综合网站00 | 《乳色吐息》无删减版在线观看 | 丝袜美腿美女被狂躁在线观看 | 校园全肉高h湿一女多男 | 亚洲AV无码乱码国产麻豆穿越 | 嘟嘟嘟在线视频免费观看高清中文 | 怡春院国产精品视频 | 曰本真人00XX动太图 | 麻豆成人久久精品二区三区网站 | 亚洲无线观看国产 | 亚洲熟女丰满多毛XXXXX | 久久国产主播福利在线 | 精品少妇高潮蜜臀涩涩AV | 久久99国产精品一区二区 | 女仆乖H调教跪趴 | 久久国产精品麻豆AV影视 | 胸大美女又黄的网站 | 伊人久在线观看视频 | write as 跳蛋 | 美女内射少妇三区五区 | 俄罗斯雏妓的BBB孩交 | 人妻夜夜爽99麻豆AV | xxx成熟xxx| 妈妈的朋友6未删减版完整在线 | 男人舔女人的阴部黄色骚虎视频 | 国产国产人免费观看在线视频 | 伊人久久综在合线亚洲 | 福利片福利一区二区三区 | 国产成人亚洲精品无广告 | 夜色私人影院永久入口 | 动漫女主被扒开双腿羞辱 | 空姐内射出白浆10p 空姐厕所啪啪啪 | 日韩男明星 | 狠狠国产欧美在线视频 |