成人免费xxxxx在线视频软件_久久精品久久久_亚洲国产精品久久久_天天色天天色_亚洲人成一区_欧美一级欧美三级在线观看

程序是怎么一步步變成機器指令的?

開發 前端
程序員編寫的程序實際上就是一個字符串,必須得有個什么東西把字符串轉變從機器指令,它的輸入是字符串,輸出是01二進制機器指令,這就是編譯器。

大家好,我是小風哥,今天簡單聊聊程序是怎么一步步變成機器指令的。

左邊是我們寫的代碼,右邊是CPU執行的機器指令:

圖片圖片

想讓CPU執行代碼只需要簡單的點擊一下這個按鈕:

圖片圖片

可是你知道這個按鈕的背后經歷了哪些復雜的操作,你有沒有想過代碼是怎么一步步變成機器指令的?

程序員編寫的程序實際上就是一個字符串,必須得有個什么東西把字符串轉變從機器指令,它的輸入是字符串,輸出是01二進制機器指令,這就是編譯器。

圖片圖片

編譯器本身就是一個程序,把人類認識的程序轉為CPU可以執行的機器指令。

假設有這樣一段代碼:

圖片圖片

這實際上就是一個字符串,編譯器要做的第一件事就是遍歷字符串并把有意義的字符組合提取出來,忽略掉空格換行等字符。

這里每一個字符組合實際上都有類型,比如int 和main都是關鍵字,0和5都是數字等,因此還需要標注好類型,這一步就是所謂的提取token。

圖片圖片

提取出token之后還需要知道這些token組合在一起的含義是什么。

接下來遍歷所有token進行解析。

按照什么解析呢?答案是按照語法。

圖片圖片

假設編譯器接下來發現token是if,那么很顯然,接下來會判定這是一個if語句,那么接下來就按照if語句的語法來解析。

圖片圖片

編譯器在按照語法解析時會生成一顆樹,首先匹配的是if本身:

圖片圖片

接下來是左括號:

圖片圖片

括號之后是布爾表達式:

圖片圖片

布爾表達式之后是右括號以及大的左括號。

接著是if內部的語句:

圖片圖片

注意看,根據語法解析token后生成的這棵樹就叫做抽象語法樹:AST。

接下來,編譯器遍歷這顆抽象語法樹并生成指令:

圖片圖片

當然真正的編譯器可能并不會在這里直接生成機器指令。

我們知道CPU只能執行一種類型的機器指令,x86處理器只能執行x86機器指令,arm處理器只能執行arm機器指令:

圖片圖片

如果你發明了一種語言,為了適配不同的處理器自己需要針對每一種處理器編寫相應的后端部分。

圖片圖片

要是有一種工具能幫我們完成針對不同處理器的適配工作就好了,這就是LLVM,我們可以只生成針對LLVM的中間代碼,由LLVM處理剩下的部分。

圖片圖片

這就是生成中間代碼的好處。

值得注意的是,編譯器在生成指令時會進行優化,這個示例中變量a實際上沒什么用處,編譯器會注意到這一點并把針對變量a的賦值指令去掉。

圖片圖片

得到匯編指令后編譯器會最終將其轉為CPU可以認知的二進制機器指令,每個源文件被編譯后都會生成一個目標文件,目標文件中就是轉換后的二進制機器指令。

圖片圖片

最后,鏈接器會把目標文件打包成最終的可執行程序,

圖片 圖片

責任編輯:武曉燕 來源: 碼農的荒島求生
相關推薦

2024-08-30 08:30:29

CPU操作系統寄存器

2024-09-30 09:56:59

2017-01-19 21:08:33

iOS路由構建

2018-07-13 15:36:52

2019-03-05 14:09:27

Docker存儲容器

2019-07-09 15:23:22

Docker存儲驅動

2018-12-24 10:04:06

Docker存儲驅動

2024-09-12 10:04:06

內存程序系統

2010-03-04 16:28:17

Android核心代碼

2016-11-02 18:54:01

javascript

2017-12-25 11:50:57

LinuxArch Linux

2024-06-27 08:30:36

內存擴容堆區

2025-04-03 01:45:00

2025-03-28 09:39:15

CPU指令信號

2024-11-11 10:28:33

操作系統Unix系統

2011-05-10 10:28:55

2018-04-23 14:23:12

2018-06-11 15:30:12

2020-12-24 11:19:55

JavaMapHashMap

2019-04-01 10:15:02

點贊
收藏

51CTO技術棧公眾號

主站蜘蛛池模板: 久久99蜜桃综合影院免费观看 | 亚洲国产一区二区三区在线观看 | 日韩高清在线观看 | 人人鲁人人莫人人爱精品 | 欧美啪啪网站 | 日本黄色免费大片 | 国产91久久久久蜜臀青青天草二 | 无码一区二区三区视频 | 国产高清精品一区二区三区 | 美女久久 | 成人免费在线观看 | 国产精品久久久亚洲 | 国产小视频精品 | 欧美久久久久久久久 | 天天操狠狠操 | 亚洲欧美日本在线 | 天天躁日日躁aaaa视频 | 久久精品美女 | 毛片在线看片 | 成人在线视频观看 | 欧美日韩一卡 | 欧美日韩在线看 | 超碰地址 | 视频二区 | 日本久久久一区二区三区 | 日日干夜夜操天天操 | 色999视频 | 午夜视频免费网站 | 亚洲一区二区精品视频 | 欧美福利视频一区 | 亚洲www.| 亚洲国产激情 | 99视频在线 | 久久久久久久一级 | 久久伊人免费视频 | 日本在线视频一区二区 | 国产精品国产精品国产专区不卡 | 免费黄色大片 | 日日人人 | 国产成人免费视频网站高清观看视频 | 亚洲福利视频一区二区 |