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

0
  • 聊天消息
  • 系統(tǒng)消息
  • 評論與回復(fù)
登錄后你可以
  • 下載海量資料
  • 學(xué)習(xí)在線課程
  • 觀看技術(shù)視頻
  • 寫文章/發(fā)帖/加入社區(qū)
會員中心
創(chuàng)作中心

完善資料讓更多小伙伴認(rèn)識你,還能領(lǐng)取20積分哦,立即完善>

3天內(nèi)不再提示

從編譯原理的角度看C語言如何轉(zhuǎn)換成匯編語言的?

黃工的嵌入式技術(shù)圈 ? 來源:黃工的嵌入式技術(shù)圈 ? 作者:黃工的嵌入式技術(shù) ? 2020-02-25 15:52 ? 次閱讀

大家都知道計(jì)算機(jī)只能處理和識別二進(jìn)制指令,而我們利用各種高級編程語言所編寫的程序,要經(jīng)過一些列的處理步驟,最終轉(zhuǎn)變?yōu)?a target="_blank">匯編指令,再最后轉(zhuǎn)變?yōu)闄C(jī)器指令。

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

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

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

匯編語言的主要特點(diǎn)

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

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

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

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

1. 預(yù)處理 -> 2.詞法分析 -> 3.語法分析 -> 4.語義分析 -> 5.優(yōu)化 -> 6.鏈接

1. 預(yù)處理:負(fù)責(zé)執(zhí)行C語言中的#include, #if, #else 等預(yù)處理指令。注意,這里是去執(zhí)行這些預(yù)處理指令。這些預(yù)處理指令的作用是根據(jù)你的系統(tǒng)環(huán)境配湊出最終版的源代碼。

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

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

4. 語義分析:當(dāng)構(gòu)造出這樣一個樹的結(jié)構(gòu)之后,編譯就就會檢查語法是否正確,并且去掃描這棵樹。根據(jù)這棵樹的結(jié)構(gòu),生成中間指令了。這個中間指令已經(jīng)非常接近匯編。中間指令跟匯編還是有區(qū)別的,因?yàn)椴煌瑥S家的CPU指令有所不同,所以還要根據(jù)不同廠家的CPU指令集,把這個中間指令轉(zhuǎn)換成匯編。

5. 優(yōu)化:因?yàn)?a target="_blank">程序員有時代碼寫的不太好,會導(dǎo)致一些多余的操作,或者效率低的指令。優(yōu)化過程可以找出這些毛病,自動替換成更好的指令。

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

聲明:本文內(nèi)容及配圖由入駐作者撰寫或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀點(diǎn)僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場。文章及其配圖僅供工程師學(xué)習(xí)之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問題,請聯(lián)系本站處理。 舉報投訴
  • 二進(jìn)制
    +關(guān)注

    關(guān)注

    2

    文章

    795

    瀏覽量

    41688
  • C語言
    +關(guān)注

    關(guān)注

    180

    文章

    7608

    瀏覽量

    137123
  • 編譯器
    +關(guān)注

    關(guān)注

    1

    文章

    1636

    瀏覽量

    49172
收藏 人收藏

    評論

    相關(guān)推薦

    EE-128:C語言中的DSP:C調(diào)用匯編類成員函數(shù)

    電子發(fā)燒友網(wǎng)站提供《EE-128:C語言中的DSP:C調(diào)用匯編類成員函數(shù).pdf》資料免費(fèi)下載
    發(fā)表于 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>調(diào)用<b class='flag-5'>匯編</b>類成員函數(shù)

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

    電子發(fā)燒友網(wǎng)站提供《TMS320C6000匯編語言工具v7.4用戶指南.pdf》資料免費(fèi)下載
    發(fā)表于 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語言
    的頭像 發(fā)表于 12-24 17:33 ?377次閱讀

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

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

    ARM匯編語言工具

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

    TMS320C28x匯編語言工具

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

    hex文件怎么能轉(zhuǎn)回去c語言

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

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

    直接將 .hex 文件轉(zhuǎn)換回原始的 C 語言代碼是不可能的,因?yàn)?.hex 文件是二進(jìn)制文件,它包含了單片機(jī)程序編譯后的機(jī)器碼,這些機(jī)器碼與原始的
    的頭像 發(fā)表于 09-02 10:37 ?2511次閱讀

    RISC-V匯編語言

    一、導(dǎo)言 C 程序翻譯成為可以在計(jì)算機(jī)上執(zhí)行的機(jī)器語言程序的四個經(jīng)典步驟。這一章的內(nèi)容包括了后三個步驟,不過我們要從匯編語言在 RISC-V 函數(shù)調(diào)用規(guī)范中的作用開始說起。 上圖
    發(fā)表于 08-19 18:07

    C語言:嵌入式開發(fā)中的關(guān)鍵編譯器角色

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

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

    在STM32CubeIDE下如何嵌入匯編語言代碼??
    發(fā)表于 03-25 06:56

    C語言#define的應(yīng)用

    C/C++ 編程語言中,當(dāng)程序被編譯時,被發(fā)送到編譯器,編譯器將程序
    發(fā)表于 03-06 11:29 ?393次閱讀
    <b class='flag-5'>C</b><b class='flag-5'>語言</b>#define的應(yīng)用

    【RISC-V開放架構(gòu)設(shè)計(jì)之道|閱讀體驗(yàn)】匯編語言和擴(kuò)展指令集

    【RISC-V開放架構(gòu)設(shè)計(jì)之道|閱讀體驗(yàn)】匯編語言和擴(kuò)展指令集 匯編語言C語言翻譯成可執(zhí)行的機(jī)器語言的重要步驟包括
    發(fā)表于 02-03 13:29

    汽車ECU編程是單片機(jī)C語言還是匯編語言

    汽車ECU編程是單片機(jī)C語言嗎?還是匯編語言
    發(fā)表于 01-26 06:08

    C語言能夠?qū)崿F(xiàn)單片機(jī)功能,為什么還要使用匯編呢?

    ,但在某些特定的場景下,使用匯編語言仍然是必要的。在本文中,我們將探討為什么在一些特殊情況下使用匯編語言是有必要的。 首先,匯編語言可以提供更高的性能。由于C
    的頭像 發(fā)表于 01-15 14:59 ?1095次閱讀
    主站蜘蛛池模板: 97 sese| 福利片福利一区二区三区| 亚洲aaaa级特黄毛片| 午夜亚洲动漫精品AV网站| 鸭子玩富婆流白浆视频| 亚洲精品第五页中文字幕| 一本道色播| 最近中文字幕在线中文视频| 97人妻精品全国免费视频| qvod在线观看| 国产二区自拍| 韩国伦理三级| 久久精品热只有精品| 免费毛片在线播放| 热99RE久久精品国产| 无码人妻精品国产婷婷| 亚洲日韩在线天堂一| 91成品视频| 国产1769一七六九视频在线| 国产又色又爽又刺激在线播放| 久久精品国产亚洲AV天美18| 欧美成人无码视频午夜福利| 四虎影5151毛片在线看| 亚洲精品国偷拍自产在线观看蜜臀| 一本色道久久综合一区| 97色色极品av影院| 国产 亚洲 日韩 欧美 在线观看 | 热久久综合这里只有精品电影| 色欲AV蜜臀AV在线观看麻豆| 亚洲免费人成 久久| av天堂网站avtt2017| 国产日韩欧美高清免费视频| 恋夜秀场1234手机视频在线观看| 琪琪伦伦影院理论片| 亚洲精品无码AAAAAA片| 99re28久久热在线观看| 国产成人高清亚洲一区app| 久久久久九九| 色一情一乱一伦一区二区三区| 夜夜艹日日干| 顶级欧美不卡一区二区三区|