程式源**都是以人類語言寫成的。需要將人類語言翻譯為計算機語言。
計算機能聽懂的語言,就叫做機器語言,簡稱機器碼。
計算機處理器提供了一套它能夠支援的運算操作的集合,稱為「指令集」。指令集限定了該處理器能夠進行的所有運算。而且這些運算通常都是關於數字的運算。所以,如果想解決乙個問題,那麼首先要把這個問題轉換為乙個數字問題,再把數字問題的解答過程,用指令集當中的指令求解。
將其它問題轉換為數學問題的一種方法就是編碼。處理器的指令集同樣是經過編碼的。所以才能用二進位制數字流來表示指令。
在計算機中,一般用若干個二進位制位表示乙個數或一條指令,把它們作為乙個整體來處理、儲存和傳送。這種作為乙個整體來處理的二進位制位串,稱為計算機字。表示資料的字稱為資料字,表示指令的字稱為指令字。
指令集中的每乙個指令都可以這樣編碼。每一條指令都定義了一系列的操作。如此,只要按照順序從儲存器讀入指令代號和資料,就可以讓程式執行下去。
處理器為了能順序的取指並執行,需要知道當前指令的下一條指令在**。為了記錄當前指令的下一條指令的位置,處理器內部設定了乙個存放這種位址的電子裝置,實際上這種裝置是一系列閘電路組成的鎖存器,叫做 ip 暫存器(也有叫做 pc 的,這裡統稱為 ip)。ip 的值可以在執行時被修改。那麼只要提供了能夠修改 ip 值的指令,就能改變程式的執行流程。可以返回到之前的某個位置,也可以一次前進到之後的某個位置。這個過程叫做「跳轉」。所謂迴圈和判斷,本質上都是判斷並跳轉。
當程式整個裝入記憶體以後,ip將被(另外的某個程式,可能來自作業系統,或者其它軟體)設定為 1,意思是:下一條要讀取的指令在 1 的位置。然後處理器就開始讀入指令。為什麼處理器會讀入指令呢?它是收到某個訊號才會讀指令嗎?簡單的講,處理器從上電到掉電的整個過程當中只做三件事情,那就是:1、從記憶體讀取一條指令和指令攜帶的運算元,同時 ip + 1。2、解碼並執行指令。3、回到 1。所以不需要什麼訊號。在上一條指令將 ip 的值修改為 1 之後,處理器就已經完成跳轉,找到程式入口了。
處理器將指令送入解碼器,解碼結果告訴處理器應當執行某項操作,然後繼續取出下一條指令。直到斷電。
所以,電腦程式的執行過程簡單來說就是:輸入能被指令集執行的高階語言——>編譯器編碼成計算機能懂的二進位制機器碼——>處理器解碼執行。
電腦程式是如何執行起來的
肯定有很多人很奇怪電腦程式是如何執行起來的吧。這其中涉及到了電子計算機最底層的原理,大家能夠了解的更為全面一些。我在這裡就簡單而形象的為大家講一講這其中的機理。第三次工業革命與前兩次工業革命有著乙個本質的不同,因為前兩次工業革命都涉及到了新能源的使用,第一次工業革命是蒸汽機的發明,第二次革命是內燃機...
程式是如何執行的(二)控制結構的執行
一 if else選擇語句 1 分支跳轉指令 我們將用相應的彙編指令來表示 比較x是否小於y 選擇跳轉到語句塊b 1 slt指令 比較x是否小於y 格式 slt r4,r1,r2。該指令用來表示比較暫存器r1中的值是否小於r2中的值,如果小於則將暫存器r4置1,否則置0 格式 slt r4,r1,c...
電腦程式的執行過程分析
linux核心分析 課程第一次作業 程式的正確執行靠堆疊來維持,堆疊是一塊儲存資料的連續記憶體。乙個名為堆疊指標 esp 的暫存器指向堆疊的頂部,乙個名為堆疊指標 ebp 的暫存器指向堆疊的底部。堆疊的底部在乙個固定的位址。堆疊的大小在執行時由核心動態地調整。cpu實現指令push和pop,向堆疊中...