99精品伊人亚洲|最近国产中文炮友|九草在线视频支援|AV网站大全最新|美女黄片免费观看|国产精品资源视频|精彩无码视频一区|91大神在线后入|伊人终合在线播放|久草综合久久中文

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

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

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

計算機如何執(zhí)行你寫的代碼

Q4MP_gh_c472c21 ? 來源:編程技術宇宙 ? 作者:軒轅之風O ? 2021-09-12 09:33 ? 次閱讀
加入交流群
微信小助手二維碼

掃碼添加小助手

加入工程師交流群

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

很多剛剛?cè)肟拥男“卓赡軐Υ送耆珱]有概念,或者模模糊糊知道個大概,我們寫下的一行行代碼,計算機到底是如何在執(zhí)行的呢?

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

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

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

int sum = a + b;

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

但即便是如此簡單,聰明絕頂?shù)挠嬎銠C卻還是看不懂:這是弄啥捏?

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

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

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

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

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

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

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

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

十六進制:

8B 45 EC 03 45 E0 89 45 F8

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

10001011 01000101 11101100 00000011 01000101 11100000 10001001 01000101 11111000

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

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

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

主要有六個部分:

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

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

[非必需] ModR/M:內(nèi)存/寄存器操作數(shù)字節(jié)

[非必需] SIB:索引尋址描述字節(jié)

[非必需] Displacement:常數(shù)偏移字節(jié)/半字/字

[非必需] Immediate:立即數(shù)字節(jié)/半字/字

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

根據(jù)操作碼的長度不同,指令分為單字節(jié)操作碼指令、雙字節(jié)操作碼指令、三字節(jié)操作碼指令。

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

下面開始執(zhí)行:

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

責任編輯:haq

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

    關注

    68

    文章

    11076

    瀏覽量

    217005
  • 計算機
    +關注

    關注

    19

    文章

    7660

    瀏覽量

    90752
  • C語言
    +關注

    關注

    180

    文章

    7632

    瀏覽量

    141635

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

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

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

掃碼添加小助手

加入工程師交流群

    評論

    相關推薦
    熱點推薦

    什么是模塊化計算機?搞清楚用途和應用場景,別再瞎選了!

    如果是搞工業(yè)自動化、醫(yī)療設備、交通控制,甚至是軍事裝備的,那你大概率已經(jīng)聽過“模塊化計算機”這個詞。要是還沒了解,那這篇文章就是為
    的頭像 發(fā)表于 06-04 11:00 ?334次閱讀
    什么是模塊化<b class='flag-5'>計算機</b>?搞清楚用途和應用場景,別再瞎選了!

    云端超級計算機使用教程

    云端超級計算機是一種基于云計算的高性能計算服務,它將大量計算資源和存儲資源集中在一起,通過網(wǎng)絡向用戶提供按需的計算服務。下面,AI部落小編為
    的頭像 發(fā)表于 12-17 10:19 ?547次閱讀

    工業(yè)中使用哪種計算機?

    在工業(yè)環(huán)境中,工控機被廣泛使用。這些計算機的設計可承受極端溫度、灰塵和振動等惡劣條件。它們比標準消費類計算機更耐用、更可靠。工業(yè)計算機可控制機器、監(jiān)控流程并實時收集數(shù)據(jù)。其堅固的結(jié)構和專業(yè)功能
    的頭像 發(fā)表于 11-29 14:07 ?705次閱讀
    工業(yè)中使用哪種<b class='flag-5'>計算機</b>?

    量子計算機與普通計算機工作原理的區(qū)別

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

    ROM對計算機性能的影響

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

    計算機接口位于什么之間

    計算機接口是計算機硬件和軟件之間、計算機與外部設備之間以及計算機各部件之間傳輸數(shù)據(jù)、控制信息和狀態(tài)信息的硬件設備和軟件程序。它在計算機系統(tǒng)中
    的頭像 發(fā)表于 10-14 14:02 ?1299次閱讀

    計算機存儲系統(tǒng)的構成

    計算機存儲系統(tǒng)是計算機中用于存放程序和數(shù)據(jù)的設備或部件的集合,它構成了計算機信息處理的基礎。一個完整的計算機存儲系統(tǒng)通常包括多個層次的存儲器,從高速緩存(Cache)到主存儲器(Mai
    的頭像 發(fā)表于 09-26 15:25 ?2526次閱讀

    計算機進行程序控制工作的基本原理是怎樣的

    計算機程序控制是計算機科學中的一個核心概念,它涉及到計算機如何根據(jù)預設的指令序列執(zhí)行任務。 1. 計算機硬件基礎 在深入程序控制之前,我們需
    的頭像 發(fā)表于 09-04 16:57 ?1529次閱讀

    簡述計算機總線的分類

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

    晶體管計算機和電子管計算機有什么區(qū)別

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

    晶體管計算機的誕生和特點

    晶體管計算機的誕生標志著計算機技術的一個重要里程碑,它不僅推動了計算機硬件的革新,還促進了計算機軟件技術的發(fā)展。以下是對晶體管計算機誕生及其
    的頭像 發(fā)表于 08-23 15:06 ?4230次閱讀

    微處理器如何控制計算機系統(tǒng)

    微處理器,作為計算機系統(tǒng)的核心部件,承擔著控制整個計算機系統(tǒng)運行的重要任務。它不僅是計算機的運算中心,還是控制中心,負責執(zhí)行程序指令、處理數(shù)據(jù)以及協(xié)調(diào)
    的頭像 發(fā)表于 08-22 14:21 ?975次閱讀

    簡述微型計算機系統(tǒng)的組成

    微型計算機系統(tǒng),簡稱微機系統(tǒng),是一個集硬件和軟件于一體的復雜系統(tǒng),旨在高效處理信息、存儲數(shù)據(jù)和執(zhí)行用戶指令。下面將從硬件和軟件兩大方面對微型計算機系統(tǒng)的組成進行詳細闡述。
    的頭像 發(fā)表于 08-22 12:37 ?8479次閱讀

    計算機系統(tǒng)的組成和功能

    計算機系統(tǒng)是一個復雜而龐大的概念,它涵蓋了計算機硬件、軟件以及它們之間相互作用的所有元素。為了全面而深入地探討計算機系統(tǒng),本文將從定義、組成、功能、發(fā)展歷程以及未來趨勢等方面進行詳細闡述。
    的頭像 發(fā)表于 07-24 17:41 ?2387次閱讀

    DRAM在計算機中的應用

    DRAM(Dynamic Random Access Memory,動態(tài)隨機存取存儲器)在計算機系統(tǒng)中扮演著至關重要的角色。它是一種半導體存儲器,用于存儲和快速訪問數(shù)據(jù),是計算機主內(nèi)存的主要組成部分。以下是對DRAM在計算機中的
    的頭像 發(fā)表于 07-24 17:04 ?2983次閱讀