農林漁牧網

您現在的位置是:首頁 > 農業

彙編的角度看程式的本質

2022-03-29由 chmod777 發表于 農業

彙編程式是應用軟體嗎

一、機器語言的發展史

我們從機器語言的發展來分析,最早機器語言只有0和1,例如:1010 1100 1111 1001,隨後出現組合語言,將0和1轉換成符號,便於閱讀和記憶,例如:MOV ,add等等,但是發展到這裡,依然不利於快速開發,就出現了高階語言,例如:C,C++,C#,Java,Golang,OC等等。

二、高階語言分類

高階語言大體分為兩類:編譯型語言和解釋型語言

1、編譯型語言

使用專門的編譯器,針對特定的平臺,將高階語言原始碼一次性的編譯成可被該平臺硬體執行的機器碼,幷包裝成該平臺所能識別的可執行性程式的格式。

屬於編譯型語言有:C、C++和Golang語言

特點:在編譯型語言寫的程式執行之前,需要一個專門的編譯過程,把原始碼編譯成機器語言的檔案,如exe格式的檔案,以後要再執行時,直接使用編譯結果即可,如直接執行exe檔案。因為只需編譯一次,以後執行時不需要編譯,所以編譯型語言執行效率高。

2、解釋型語言

使用專門的直譯器對源程式逐行解釋成特定平臺的機器碼並立即執行。是程式碼在執行時才被直譯器一行行動態翻譯和執行,而不是在執行之前就完成翻譯。

屬於解釋型語言有:Python、Php、JavaScript和C#等等。

特點:

解釋型語言不需要事先編譯,其直接將原始碼解釋成機器碼並立即執行,所以只要某一平臺提供了相應的直譯器即可執行該程式

3、Java語言

Java和其他的語言不太一樣。因為java針對不同的平臺有不同的JVM,實現了跨平臺。它既是編譯型也是解釋型:因為所有的Java程式碼都是要編譯的,。java不經過編譯就什麼用都沒有。 又因為java程式碼編譯後不能直接執行,它是解釋執行在JVM上的,所以它是解釋執行的,那也就算是解釋的了。

4、看圖說話

彙編的角度看程式的本質

三種類型的語言的編譯過程

三、程式/程式碼的本質

從上邊對語言的介紹可以看出,不論是哪種語言,最終都需要編譯成機器碼才能執行。

彙編的角度看程式的本質

程式執行的過程

我們以編譯型語言為例來分析:

1、我們把編寫好的程式,利用編譯器編譯成exe(windows下)可執行檔案,存入硬碟。在編譯的過程中,編譯器會把所有的程式碼轉換成二進位制放進exe檔案裡。

2、當我們雙擊exe檔案時,計算機會把exe檔案裝載到記憶體空間裡

3、cpu讀取記憶體裡的指令,控制計算機的裝置

而在cpu內部,是由暫存器從記憶體中獲取指令,短暫儲存併發送給運算器和控制器,運算器負責資訊處理,例如各種運算,將運算結果返回給暫存器,然後再返回給記憶體,這樣就完成了記憶體和cpu的讀寫操作。

四、關於暫存器

CPU會先將記憶體中的資料儲存到暫存器中,然後再對暫存器中的資料進行運算

假設記憶體中有塊白色記憶體空間的值是10,現在想把它的值加1,並將結果儲存到紅色記憶體空間

CPU首先會將白色記憶體空間的值放到EAX暫存器中:mov eax,白色記憶體空間

然後讓EAX暫存器與1相加:add eax,1

最後將值賦值給記憶體空間:mov 紅色記憶體空間, eax