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

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

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

3天內不再提示

計算機如何執行你寫的代碼

Q4MP_gh_c472c21 ? 來源:編程技術宇宙 ? 作者:軒轅之風O ? 2021-09-12 09:33 ? 次閱讀

計算機如何執行你寫的代碼?知乎上有人提問:電腦怎樣執行編程語言的?

很多剛剛入坑的小白可能對此完全沒有概念,或者模模糊糊知道個大概,我們寫下的一行行代碼,計算機到底是如何在執行的呢?

我們以x86架構的CPU為研究對象,從一個例子出發,來嘗試解答這個問題。

1、高級語言為了方便編程,偉大的計算機先驅們發明了一個又一個的編程語言,使得我們可以用人類最容易理解的語法規則去告訴計算機完成我們想要的功能。

比如,一個C語言程序員寫下了一行代碼:

int sum = a + b;

一句簡單的不能再簡單的C語言語句。

但即便是如此簡單,聰明絕頂的計算機卻還是看不懂:這是弄啥捏?

這時候就需要一個翻譯,負責把人類編寫的高級語言“翻譯”成計算機能看得懂的東西,這個翻譯就是編譯器。

2、編譯鏈接上面的高級語言語句經過編譯器編譯鏈接后,生成了一個目標運行平臺為x86架構的可執行程序exe/elf,使用反編譯工具IDA進行分析,可以看到這行代碼編譯后的樣子是這樣的:

5de95ec8-1354-11ec-8fb8-12bb97331649.png

mov eax, a : 將變量a的值存入eax寄存器

add eax, b : 把變量b的值和eax寄存器的值相加,并將結果保存在eax寄存器中

mov sum, eax : 將計算結果從eax寄存器寫入sum變量

看到了嗎,就像把大象關進冰箱需要分三步,計算機完成程序員的一條加法語句,也分了三步:取出被加數、加上加數、寫入結果。

3、機器指令上面的匯編指令只是為了人類理解方便的助記符,計算機同樣也不認識這玩意,那幾條指令在內存中實際上是這樣的一串數據:

十六進制:

8B 45 EC 03 45 E0 89 45 F8

十六進制是為了書寫方便,計算機真正能看到的只有二進制的比特流:

10001011 01000101 11101100 00000011 01000101 11100000 10001001 01000101 11111000

接下來,計算機要做的事情就是識別這些二進制流都是什么意思,轉換成一條條的指令來執行。

在開始執行之前,先來了解一下指令格式。

4、指令格式x86架構CPU指令集中的指令格式如下:

主要有六個部分:

[非必需] 指令前綴:我們經常用到的原子操作指令前面有一個lock前綴,就屬于指令前綴。

[必需] 操作碼:指令最核心的部分,標識這條指令是什么功能。

[非必需] ModR/M:內存/寄存器操作數字節

[非必需] SIB:索引尋址描述字節

[非必需] Displacement:常數偏移字節/半字/字

[非必需] Immediate:立即數字節/半字/字

需要注意的是,并不是每一條指令都包含上面的所有部分,許多指令只包含其中一部分字段。

根據操作碼的長度不同,指令分為單字節操作碼指令、雙字節操作碼指令、三字節操作碼指令。

5、執行指令計算機中真正負責指令執行的核心部件是中央處理器CPU,在CPU中有一個指令寄存器IP,全稱是Instruction Pointer,在32位下,它叫EIP,在64位下它叫RIP。

下面開始執行:

指令寄存器EIP指向了第一條指令,開始讀取第一個字節:10001011,也就是0x8B。

開始指令譯碼,翻譯出這是一條什么指令。

下面是x86架構的CPU指令操作碼表:

CPU中的指令譯碼模塊拿到手一看,呀,不是指令前綴,是個單字節操作碼的mov指令,要往eax寄存器里面塞數據,數據從哪來呢?

再往后一看,0x45,再來譯碼:

好家伙,原來是根據ebp寄存器的值+一個8位的偏移來讀取數據。

再往后讀取一個字節,就是偏移值:EC。

現在第一條指令就譯碼出來了:將ebp+0xEC位置處的4個字節的數據取出來,放到eax寄存器中。,這就是這一條指令要干的事情。

同時CPU還得出了另一個信息:這一條指令長度是3個字節,下一條指令的起始地址是在3個字節之后,隨后,指令寄存器EIP向后撥動,指向下一條指令的地址:$+3。

指令譯碼完成之后,開始來正式執行它。

執行完一條以后,又來到指令寄存器EIP指向的地方,隨后再次指令譯碼、執行,不斷重復這個過程,依次執行每一條指令。

這其實就是CPU工作最基本的原理。

拓展上面描述的過程是CPU在硬件電路層面完成的,但這種設計思想在軟件領域也同樣適用。

大家如果去研究Java虛擬機JVM和Python的解釋器源代碼時,也會發現有相似之處:JVM和解釋器通過定義一套自己的“指令集”,然后它們的編譯器使用這套指令集將Java和Python代碼編譯成對應的程序。

運行的時候也類似,虛擬機或者解釋器不斷識別每一條指令,譯碼、執行,和CPU執行指令的過程頗有幾分相似。

C/C++語言編譯的程序,最后是直接編譯成了CPU的指令,所以跨平臺能力差,如果換到ARM架構平臺,原來的程序將無法執行,需要重新編譯成新的平臺的程序。

而Java、Python這類語言,是自己在軟件層面的指令集,因為其自身已經開發了針對不同CPU平臺的虛擬機、解釋器,所以這些語言編寫的程序移植性好,真正做到一次編寫,到處運行。

總結我們使用高級語言C、C++編寫的程序代碼,經過編譯器的編譯鏈接,最終變成CPU可以理解的機器指令,隨后CPU在執行時通過不斷的譯碼、執行,最終實現高級語言所描述的功能。

現在你知道你用編程語言寫下的程序是如何跑起來的了嗎?

責任編輯:haq

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

    關注

    68

    文章

    10870

    瀏覽量

    211877
  • 計算機
    +關注

    關注

    19

    文章

    7500

    瀏覽量

    88019
  • C語言
    +關注

    關注

    180

    文章

    7605

    瀏覽量

    136905

原文標題:一行代碼,揭開CPU執行原理!

文章出處:【微信號:gh_c472c2199c88,微信公眾號:嵌入式微處理器】歡迎添加關注!文章轉載請注明出處。

收藏 人收藏

    評論

    相關推薦

    量子計算機與普通計算機工作原理的區別

    ? 本文介紹了量子計算機與普通計算機工作原理的區別。 量子計算是一個新興的研究領域,科學家們利用量子力學,制造出具有革命性能力的計算機。雖然現在的量子
    的頭像 發表于 11-24 11:00 ?327次閱讀
    量子<b class='flag-5'>計算機</b>與普通<b class='flag-5'>計算機</b>工作原理的區別

    ROM對計算機性能的影響

    是一種非易失性存儲器,即使在斷電的情況下也能保持數據不丟失。它通常用于存儲固件,這些固件是計算機啟動和運行操作系統所必需的。ROM的內容在制造過程中被寫入,并且通常不能被用戶更改。 ROM的類型 PROM(可編程ROM) :用戶可以通過特殊的編程設備
    的頭像 發表于 11-04 10:31 ?348次閱讀

    計算機接口位于什么之間

    計算機接口是計算機硬件和軟件之間、計算機與外部設備之間以及計算機各部件之間傳輸數據、控制信息和狀態信息的硬件設備和軟件程序。它在計算機系統中
    的頭像 發表于 10-14 14:02 ?425次閱讀

    簡述計算機總線的分類

    計算機總線作為計算機系統中連接各個功能部件的公共通信干線,其結構和分類對于理解計算機硬件系統的工作原理至關重要。以下是對計算機總線結構和分類的詳細闡述,內容將涵蓋總線的基本概念、內部結
    的頭像 發表于 08-26 16:23 ?1751次閱讀

    晶體管計算機和電子管計算機有什么區別

    晶體管計算機和電子管計算機作為計算機發展史上的兩個重要階段,它們在多個方面存在顯著的區別。以下是對這兩類計算機在硬件、性能、應用以及技術發展等方面區別的詳細闡述。
    的頭像 發表于 08-23 15:28 ?1796次閱讀

    微處理器如何控制計算機系統

    微處理器,作為計算機系統的核心部件,承擔著控制整個計算機系統運行的重要任務。它不僅是計算機的運算中心,還是控制中心,負責執行程序指令、處理數據以及協調
    的頭像 發表于 08-22 14:21 ?504次閱讀

    工業控制計算機與普通個人計算機相比有何區別?

    引言 隨著科技的不斷發展,計算機在各個領域的應用越來越廣泛。在眾多計算機類型中,工業控制計算機和普通個人計算機是兩種常見的計算機。盡管它們在
    的頭像 發表于 06-11 10:45 ?978次閱讀

    工業計算機與普通計算機的區別

    在信息化和自動化日益發展的今天,計算機已經成為了我們日常生活和工作中不可或缺的工具。然而,在計算機領域中,工業計算機和普通計算機雖然都具備基本的計算
    的頭像 發表于 06-06 16:45 ?1413次閱讀

    【量子計算機重構未來 | 閱讀體驗】+ 了解量子疊加原理

    )。通過邏輯門來執行操作二進制數據,邏輯門是一種基本電路,它可以將一個或多個輸入轉換為輸出。邏輯門包括與門、或門、非門等等,將許許多多邏輯門組合起來就可以構建復雜的電路來執行各種操作,電子計算機
    發表于 03-13 17:19

    【量子計算機重構未來 | 閱讀體驗】+量子計算機的原理究竟是什么以及有哪些應用

    本書內容從目錄可以看出本書主要是兩部分內容,一部分介紹量子計算機原理,一部分介紹其應用。 其實個人也是抱著對這兩個問題的興趣來看的。 究竟什么是量子計算機相信很多讀者都是抱著這個疑問
    發表于 03-11 12:50

    【量子計算機重構未來 | 閱讀體驗】+ 初識量子計算機

    欣喜收到《量子計算機——重構未來》一書,感謝電子發燒友論壇提供了一個讓我了解量子計算機的機會! 自己對電子計算機有點了解,但對量子計算機真是一無所知,只是聽說過量子糾纏、超快的運算速
    發表于 03-05 17:37

    量子計算機的未來

    了解量子計算機對于工業生產和產品研發的使用
    發表于 02-01 15:30

    計算機系統由什么兩部分組成 計算機系統的層次結構

    計算機系統是由硬件和軟件兩部分組成的。 硬件部分包括計算機的實體組件,如中央處理器(CPU)、內存、存儲設備、輸入輸出設備、顯示器等。CPU是計算機系統的核心部件,負責執行指令、運算和
    的頭像 發表于 02-01 14:13 ?3707次閱讀

    什么是嵌入式計算機

    嵌入式計算機是一種專門設計用于特定功能的計算機系統,通常被嵌入到其他設備中,以執行特定的任務。這種計
    的頭像 發表于 01-15 15:10 ?1416次閱讀
    什么是嵌入式<b class='flag-5'>計算機</b>?

    微機原理和計算機組成原理的區別

    微機原理和計算機組成原理是計算機科學中兩個重要的主題,它們雖然有一定的關聯,但也存在一些區別。本文將詳細闡述微機原理和計算機組成原理的區別,并從不同的角度對它們進行分析比較。 首先,我們從定義的角度
    的頭像 發表于 01-14 14:56 ?3444次閱讀
    主站蜘蛛池模板: 三级网址在线播放| 人妻少妇69式99偷拍| 免费毛片试看| 英国video性精品高清最新| 高h肉文合集| 清冷受被CAO的合不拢| 91九色视频在线观看| 久久久擼擼擼麻豆| 一区二区不卡在线视频| 健身房被教练啪到腿软H | 大学生第一次破苞疼哭了| 女女破视频在线观看| 3dbdsm变态videos高清| 免费伦理片网站| 99久久国产综合精品| 男女AA片免费| 超碰免费视频caoporn| 色爱AV综合区| 国产精品成人影院| 亚洲 欧美 中文 日韩 另类| 国产亚洲精品高清视频免费| 亚洲免费在线播放| 久久综合九色综合国产| 91精品视频网站| 内射少妇36P亚洲区| V8成品人视频| 入室强伦女教师被学生| 国产毛多水多高潮高清| 亚洲精品国产字幕久久vr| 久久99亚洲热最新地址获取| 综合一区无套内射中文字幕| 毛片免费观看的视频在线| CHINA中国东北GURMA| 神马电影院午夜神福利在线观看| 国产精品私人玩物在线观看| 亚洲日本一区二区三区在线不卡| 久久日本片精品AAAAA国产| a毛片基地免费全部视频| 丝袜诱惑qvod| 久草热在线| 99久久精品免费看国产一区二区三区|