計算機語言經過不斷發展分為三個層次,進階語言、彙編語言和機器語言。
1、機器語言
我們人類在計算數字的時候習慣于用10進制的表示方法,據說是因為人類有10根手指的關系。但是對計算機來說靠的是高低電平來表示所有的資訊,在這個前提下要以10進制的方式表示資訊就比較複雜,最适合計算機的表示方式就是高電平代表1,低電平代表0,所有的資訊都是以0和1的組合方式來表示,不管是簡單的加法還是微信還是遊戲,本質上就是0和1組成的指令進行計算的結果。是以以0和1組成的指令是計算機最底層的語言,事實上計算機也僅能了解這種溝通方式,這種語言叫機器語言。
2、彙編語言
機器語言的問題在于人類要傳遞給計算機任何資訊都必須以0和1的組合序清單達,不符合人類的溝通習慣,是以有了助記符的概念并在這個基礎上産生了彙編語言,通俗來說我們需要将1+2這種資訊表達為計算機可接受的0和1的組合,因為人類更能接受1+2這種表達方式,而計算機隻能接受0和1的表達方式,彙編語言就是初步解決了人類和計算機的溝通難度,提高了溝通效率。
3、指令集的作用
以下以實際ARMv8指令集舉一個最簡單的加法例子來說明指令集的作用。
進階語言語句:1+2
彙編語言語句:ADD X9(存放1+2的結果),X10(存放1),X11(存放2)
在編譯成機器語言時,需要解決幾個問題:
(1) 怎麼讓計算機明白ADD是什麼意思
(2) 怎麼讓計算機以0和1的組合序清單達1+2這個計算指令
先解決第一個問題,晶片廠商定義一串序清單示加法,根據ARMv8指令集,1112(十進制)代表加法,進一步表示為二進制為10001011000(二進制)。
解決第二個問題分為兩個步驟,通俗來說就是單詞和文法,單詞的翻譯結果為ADD=1112(十進制)=10001011000(二進制);X9寄存器=9(十進制)=1001(二進制);X10寄存器=10(十進制)=1010(二進制);X11寄存器=11(十進制)=1011(二進制)。之後是文法也就是按照什麼順序讓計算機讀懂以及每個二進制字段所占的位數。ARMv8指令集對于加法的指令格式如下:
這裡忽略位移量這個參數,按照指令格式将1+2填入此表:
進階語言:1+2
彙編語言:ADD X9(存放結果),X10(存放1),X11(存放2)
機器語言:

最終根據ARMv8指令集,1+2的機器語言指令為10001011000010110000000101001001。