女人自慰AV免费观看内涵网,日韩国产剧情在线观看网址,神马电影网特片网,最新一级电影欧美,在线观看亚洲欧美日韩,黄色视频在线播放免费观看,ABO涨奶期羡澄,第一导航fulione,美女主播操b

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

    文章

    11031

    瀏覽量

    215927
  • 計算機
    +關注

    關注

    19

    文章

    7626

    瀏覽量

    90131
  • C語言
    +關注

    關注

    180

    文章

    7630

    瀏覽量

    140183

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

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

收藏 人收藏

    評論

    相關推薦
    熱點推薦

    云端超級計算機使用教程

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

    工業中使用哪種計算機

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

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

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

    ROM對計算機性能的影響

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

    計算機接口位于什么之間

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

    計算機存儲系統的構成

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

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

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

    簡述計算機總線的分類

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

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

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

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

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

    什么是工業計算機(IPC)?

    工業電腦也稱為IPC,其組件專門設計用于工業工作環境。因此,工業計算機特別堅固,基于強大的處理器,可以根據相應的應用進行單獨調整。工業計算機的典型方面:耐惡劣環境(包括灰塵、水、濺水、寒冷、炎熱
    的頭像 發表于 06-24 18:01 ?1414次閱讀
    什么是工業<b class='flag-5'>計算機</b>(IPC)?

    工業控制計算機的特點 工業控制計算機的應用領域

    工業控制計算機是一種專門為工業自動化和控制系統設計的計算機。它具有高度的可靠性、穩定性和實時性,能夠滿足工業生產過程中對控制精度和響應速度的嚴格要求。 工業控制計算機的特點 高可靠性 :工業控制
    的頭像 發表于 06-16 11:30 ?1969次閱讀

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

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

    計算機視覺的主要研究方向

    計算機視覺(Computer Vision, CV)作為人工智能領域的一個重要分支,致力于使計算機能夠像人眼一樣理解和解釋圖像和視頻中的信息。隨著深度學習、大數據等技術的快速發展,計算機視覺的研究和應用取得了顯著進步。本文將對
    的頭像 發表于 06-06 17:17 ?1642次閱讀

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

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