日本免费全黄少妇一区二区三区-高清无码一区二区三区四区-欧美中文字幕日韩在线观看-国产福利诱惑在线网站-国产中文字幕一区在线-亚洲欧美精品日韩一区-久久国产精品国产精品国产-国产精久久久久久一区二区三区-欧美亚洲国产精品久久久久

機(jī)器碼在哪看 機(jī)器碼


機(jī)器碼在哪看 機(jī)器碼


程序語(yǔ)言(C,Java等)是人類能夠理解的語(yǔ)言,因此我們可以用程序語(yǔ)言編寫軟件,交給CPU去執(zhí)行,如果你直接將程序語(yǔ)言交給CPU去執(zhí)行,CPU壓根就不能理解這種語(yǔ)言,CPU只認(rèn)識(shí)它自己的語(yǔ)言-機(jī)器語(yǔ)言即機(jī)器碼,因此我們需要將程序語(yǔ)言翻譯成機(jī)器碼,翻譯的方式有兩種,一種是編譯,另外一種是解釋,編譯的意思是把整個(gè)程序一次性翻譯成機(jī)器碼,解釋的意思說(shuō),一句一句地翻譯,不管怎么樣,我們最終交給CPU的是機(jī)器碼,讓CPU去根據(jù)機(jī)器碼去做它該做的事情 。
C翻譯成機(jī)器碼
可以把計(jì)算機(jī)當(dāng)做一個(gè)黑盒子,輸入機(jī)器碼和數(shù)據(jù),CPU執(zhí)行后輸出內(nèi)容到內(nèi)存,如下圖所示
機(jī)器碼執(zhí)行圖
匯編語(yǔ)言是人類能夠理解的機(jī)器指令,后續(xù)我們舉例子時(shí),直接用匯編語(yǔ)言表示機(jī)器指令,它們是等價(jià)的 。
一.什么是機(jī)器碼?
機(jī)器碼也叫機(jī)器指令,就像我們?nèi)祟惏l(fā)出的指令一樣,比如:“小明,去衛(wèi)生間里拿一把掃帚去打掃房間,機(jī)器碼就是這條指令,這條指令里就包含了干什么事情,去哪里干 。
1.1 機(jī)器碼都有些什么內(nèi)容
機(jī)器碼是與計(jì)算機(jī)硬件緊密關(guān)聯(lián)的,不同的CPU,機(jī)器碼不一樣,就好比不同的國(guó)家,語(yǔ)言不一樣類似,比如我們常用的CPU如Inter Pentium系列,酷睿系列,AMD 銳龍,ARM,MIPS,IBM PowerPC等,他們的機(jī)器碼就各不相同,但都有一個(gè)共同的規(guī)范就如下圖所示 。
機(jī)器碼包含的內(nèi)容
如上圖所示機(jī)器碼共同的規(guī)范就是他們都包括操作碼,控制位(可選),操作數(shù)(可選),操作數(shù)可以有多個(gè)(一般1-3個(gè))甚至沒(méi)有 。
操作碼:表示指令類型,比如ADD表示加法指令,SUB表示減法指令 。一個(gè)處理器可以包含非常復(fù)雜,面面俱到的指令,也可以包含十分精簡(jiǎn),短小精干的指令,正因如此,在CPU界分成了兩大門派CISC(復(fù)雜指令集)和RISC(精簡(jiǎn)指令集),CISC屬于大包大攬,啥都想干,RISC是我只敢我能做的事情,其他的事情交給編譯器,下面的表格為這兩個(gè)門派的成員
CISC
RISC
Inter,AMD
ARM,MIPS,IBM PowerPC
控制位:幾乎用不到,不做詳解
操作數(shù):表示指令需要操作的數(shù)據(jù),在機(jī)器碼中,操作數(shù)可不一定是放在那里,等著你直接去拿的,有以下幾種獲取的方式
立即數(shù)尋址:立即數(shù)是一個(gè)整數(shù),例如5,不需要從寄存器或者內(nèi)存中獲取,它本身就是操作數(shù),例如ARM CPU下的指令
ADDr1,r2,#5
上面代碼中5就是立即數(shù),是常量,直接將R2寄存器中的內(nèi)容與5相加,存儲(chǔ)到r1寄存器中 。
直接尋址:從內(nèi)存中直接獲取操作數(shù),例如Inter Pentium CPU下的指令
【機(jī)器碼在哪看 機(jī)器碼】MOV AX,[2468]
上面代碼將內(nèi)存地址2468上指向的內(nèi)容寫入到ax寄存器
間接尋址:不直接從內(nèi)存地址獲取操作數(shù),而是將內(nèi)存地址存儲(chǔ)在寄存器中,通過(guò)寄存器間接獲取操作數(shù),例如ARM下的指令
LDRr1, [r2]
上面代碼,r2寄存器中存儲(chǔ)的是內(nèi)存地址,上面指令表達(dá)的意思是,將r2寄存器中存儲(chǔ)的內(nèi)存地址指向的內(nèi)容寫入到r1寄存器 。
偏移量間接尋址:它是間接尋址變種的一種,例如ARM下的指令
LDR r2,[r3,#8]
上面代碼,r3寄存器中存儲(chǔ)的是內(nèi)存地址,上面指令表達(dá)的意思是,將r3寄存器中存儲(chǔ)的內(nèi)存地址加上偏移8后算出的內(nèi)存地址指向的內(nèi)容寫入到r2寄存器 。
1.2 機(jī)器碼的格式
正如上文提到不同的CPU類型機(jī)器碼不同,有的CPU機(jī)器碼支持動(dòng)態(tài)長(zhǎng)度,動(dòng)態(tài)擴(kuò)展,如Inter系列,它有時(shí)候可以一條指令中有多個(gè)操作碼,有的CPU的機(jī)器碼長(zhǎng)度是固定的,如ARM,我們可以分析大多數(shù)的機(jī)器碼,大多數(shù)的機(jī)器碼占一個(gè)字(32位或64位),一般超過(guò)一個(gè)字的機(jī)器碼不多,可能只有Inter系列會(huì)有,一般用不到,這里不做闡述 。

推薦閱讀