
文章插圖
程序語言(C,Java等)是人類能夠理解的語言,因此我們可以用程序語言編寫軟件,交給CPU去執(zhí)行,如果你直接將程序語言交給CPU去執(zhí)行,CPU壓根就不能理解這種語言,CPU只認(rèn)識它自己的語言-機器語言即機器碼,因此我們需要將程序語言翻譯成機器碼,翻譯的方式有兩種,一種是編譯,另外一種是解釋,編譯的意思是把整個程序一次性翻譯成機器碼,解釋的意思說,一句一句地翻譯,不管怎么樣,我們最終交給CPU的是機器碼,讓CPU去根據(jù)機器碼去做它該做的事情 。
C翻譯成機器碼
可以把計算機當(dāng)做一個黑盒子,輸入機器碼和數(shù)據(jù),CPU執(zhí)行后輸出內(nèi)容到內(nèi)存,如下圖所示
機器碼執(zhí)行圖
匯編語言是人類能夠理解的機器指令,后續(xù)我們舉例子時,直接用匯編語言表示機器指令,它們是等價的 。
一.什么是機器碼?機器碼也叫機器指令,就像我們?nèi)祟惏l(fā)出的指令一樣,比如:“小明,去衛(wèi)生間里拿一把掃帚去打掃房間,機器碼就是這條指令,這條指令里就包含了干什么事情,去哪里干 。
1.1 機器碼都有些什么內(nèi)容機器碼是與計算機硬件緊密關(guān)聯(lián)的,不同的CPU,機器碼不一樣,就好比不同的國家,語言不一樣類似,比如我們常用的CPU如Inter Pentium系列,酷睿系列,AMD 銳龍,ARM,MIPS,IBM PowerPC等,他們的機器碼就各不相同,但都有一個共同的規(guī)范就如下圖所示 。
機器碼包含的內(nèi)容
如上圖所示機器碼共同的規(guī)范就是他們都包括操作碼,控制位(可選),操作數(shù)(可選),操作數(shù)可以有多個(一般1-3個)甚至沒有 。
操作碼:表示指令類型,比如ADD表示加法指令,SUB表示減法指令 。一個處理器可以包含非常復(fù)雜,面面俱到的指令,也可以包含十分精簡,短小精干的指令,正因如此,在CPU界分成了兩大門派CISC(復(fù)雜指令集)和RISC(精簡指令集),CISC屬于大包大攬,啥都想干,RISC是我只敢我能做的事情,其他的事情交給編譯器,下面的表格為這兩個門派的成員
CISCRISCInter,AMDARM,MIPS,IBM PowerPC控制位:幾乎用不到,不做詳解
操作數(shù):表示指令需要操作的數(shù)據(jù),在機器碼中,操作數(shù)可不一定是放在那里,等著你直接去拿的,有以下幾種獲取的方式
立即數(shù)尋址:立即數(shù)是一個整數(shù),例如5,不需要從寄存器或者內(nèi)存中獲取,它本身就是操作數(shù),例如ARM CPU下的指令
ADDr1,r2,#5上面代碼中5就是立即數(shù),是常量,直接將R2寄存器中的內(nèi)容與5相加,存儲到r1寄存器中 。
直接尋址:從內(nèi)存中直接獲取操作數(shù),例如Inter Pentium CPU下的指令
MOV AX,[2468]上面代碼將內(nèi)存地址2468上指向的內(nèi)容寫入到ax寄存器
間接尋址:不直接從內(nèi)存地址獲取操作數(shù),而是將內(nèi)存地址存儲在寄存器中,通過寄存器間接獲取操作數(shù),例如ARM下的指令
LDRr1, [r2]上面代碼,r2寄存器中存儲的是內(nèi)存地址,上面指令表達(dá)的意思是,將r2寄存器中存儲的內(nèi)存地址指向的內(nèi)容寫入到r1寄存器 。
偏移量間接尋址:它是間接尋址變種的一種,例如ARM下的指令
LDR r2,[r3,#8]上面代碼,r3寄存器中存儲的是內(nèi)存地址,上面指令表達(dá)的意思是,將r3寄存器中存儲的內(nèi)存地址加上偏移8后算出的內(nèi)存地址指向的內(nèi)容寫入到r2寄存器 。
1.2 機器碼的格式正如上文提到不同的CPU類型機器碼不同,有的CPU機器碼支持動態(tài)長度,動態(tài)擴展,如Inter系列,它有時候可以一條指令中有多個操作碼,有的CPU的機器碼長度是固定的,如ARM,我們可以分析大多數(shù)的機器碼,大多數(shù)的機器碼占一個字(32位或64位),一般超過一個字的機器碼不多,可能只有Inter系列會有,一般用不到,這里不做闡述 。
以上關(guān)于本文的內(nèi)容,僅作參考!溫馨提示:如遇健康、疾病相關(guān)的問題,請您及時就醫(yī)或請專業(yè)人士給予相關(guān)指導(dǎo)!
「愛刨根生活網(wǎng)」www.malaban59.cn小編還為您精選了以下內(nèi)容,希望對您有所幫助:- 中國移動服務(wù)密碼查詢 中國移動服務(wù)密碼忘記了怎么辦
- 免密碼wifi萬能連接 wifi解鎖軟件哪個好
- word設(shè)置自動連續(xù)頁的方法 word如何刪除某一頁的頁碼
- 球衣上的膠印號碼怎么去掉
- win10桌面顯示我的電腦方法 win10的我的電腦在哪里打開
- 一個手機號碼可以申請兩個微信嗎 應(yīng)該如何申請兩個微信
- qq忘記密碼怎么找回原密碼 qq號密碼忘了怎么辦
- 交易貓源碼搭建教程 游戲交易平臺源碼手機端
- 電腦調(diào)試麥克風(fēng)的圖文步驟 臺式電腦話筒怎么設(shè)置
- 臺式機沒有藍(lán)牙功能怎么辦 臺式電腦怎么連藍(lán)牙
