大多數(shù)的機(jī)器碼格式包括以下四種:
三地址機(jī)器碼格式
三地址機(jī)器碼格式主要在RISC CPU中用到,例如下邊ARM一條匯編指令
ADD r1,r2,r3上述代碼表示將r2寄存器中的值加上r3寄存器中的值,寫入達(dá)到r1寄存器
雙地址機(jī)器碼格式
雙地址機(jī)器碼格式主要在CISC CPU中用到,例如下邊Inter Pentium的一條匯編指令
ADD AX BX上述代碼講過BX寄存器的內(nèi)容與AX相加后,寫入到AX中,雙地址機(jī)器碼的壞處也很明顯了,例如AX寄存器的值執(zhí)行命令后就被覆蓋了,不能夠重用了 。
單地址機(jī)器碼格式
單地址機(jī)器碼格式在RISC,CISC CPU都會用到,例如下邊ARM一條匯編指令
LDA r1上述代碼表示將r1寄存器的值加到累加器(一種寄存器,用于存儲中間結(jié)果),單地址機(jī)器碼其實(shí)也是有兩個操作數(shù),一個是r1,另一個就是累加器,因?yàn)長DA r1已經(jīng)意味著追加累加器的意思,所有不需要指定 。
零地址機(jī)器碼格式
零地址機(jī)器碼格式一般操作棧頂?shù)臄?shù)據(jù),不需要寄存器參與,零地址機(jī)器碼格式不會用到地址,對于單操作數(shù)運(yùn)算,例如遞增,遞減,取負(fù),清零等一元運(yùn)算,直接用棧頂?shù)臄?shù)據(jù),對于雙操作數(shù)從棧頂陸續(xù)出棧兩個數(shù),然后運(yùn)算,下邊舉例子,例如下邊的表達(dá)式
Z=(A+B).(C-D)
PUSH A;A入棧PUSH B;B入棧ADD;棧頂兩個數(shù)出棧,相加,然后結(jié)果入棧PUSH C;C入棧PUSH D;D入棧SUB;棧頂兩個數(shù)據(jù)出棧,相減,然后結(jié)果入棧MUL;棧頂兩個數(shù)據(jù)出棧,相乘,然后結(jié)果入棧POPZ;棧頂數(shù)據(jù)出棧二.番外篇2.1 寄存器寄存器和內(nèi)存一樣都是存儲器,從功能上講跟內(nèi)存沒什么區(qū)別,都是用來存儲數(shù)據(jù),從其他角度來看,寄存器和內(nèi)存有如下區(qū)別
a.寄存器的速度比內(nèi)存快N的等級,因此為了加快CPU獲取指令或者數(shù)據(jù)的速度,就會將最近要訪問的數(shù)據(jù)放入到寄存器中 。
b.寄存器的個數(shù)是有限制,一般計算機(jī)不到百個,寄存器尋址直接用名稱,例如ARM CPU寄存器 r1,r1就是寄存器的名稱,可以通過r1直接訪問寄存器的內(nèi)容,而內(nèi)存則用地址,例如1234表示內(nèi)存的地址
在CPU中寄存器分為以下幾種
內(nèi)存地址寄存器(程序員不可見)
保存了當(dāng)前正在讀或者正在寫的內(nèi)存地址
內(nèi)存數(shù)據(jù)寄存器(程序員不可見)
保存了當(dāng)前剛從內(nèi)存讀出的數(shù)據(jù)或者準(zhǔn)備要寫入內(nèi)存的數(shù)據(jù)
PC 程序計數(shù)器(程序員不可見)
保存了下一條要執(zhí)行的指令的內(nèi)存地址
IR指令寄存器(程序員不可見)
保存了當(dāng)前正在執(zhí)行的指令
通用寄存器(程序員可見)
存儲臨時的數(shù)據(jù)例如中間結(jié)果)
特殊寄存器(程序員不可見)
例如累加器,條件寄存器等
2.2 機(jī)器碼長度設(shè)計在1.2章節(jié)中闡述了機(jī)器碼的格式,沒有指出機(jī)器碼長度的設(shè)計,這里指出 。
指令長度算法:
操作碼長度+控制位長度+寄存器尋址個數(shù)*寄存器占用位數(shù)+內(nèi)存直接取址個數(shù)*內(nèi)存占用位數(shù)+立即數(shù)長度
操作碼長度:
CPU支持的指令個數(shù),如果支持8個指令,那操作碼長度就是3
控制位長度:
這個是固定的
寄存器尋址個數(shù)*寄存器占用位數(shù):
寄存器占用位數(shù)可以通過程序員可以訪問的寄存器個數(shù)換算得知,如果寄存器可以訪問的寄存器個數(shù)為32,那么寄存器占用位數(shù)就是5(2的5次方=32)
寄存器尋址個數(shù)表示機(jī)器碼中通過寄存器獲取操作數(shù)或者間接通過寄存器獲取操作數(shù)的寄存器個數(shù)例如
ADD r1,r2 表示通過r1,r2兩個寄存器獲取操作數(shù),那么寄存器尋址個數(shù)就是2
內(nèi)存直接取址個數(shù)*內(nèi)存占用位數(shù):
內(nèi)存直接取址個數(shù)表示有多少通過內(nèi)存直接尋址獲取操作數(shù),例如
以上關(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的我的電腦在哪里打開
- 一個手機(jī)號碼可以申請兩個微信嗎 應(yīng)該如何申請兩個微信
- qq忘記密碼怎么找回原密碼 qq號密碼忘了怎么辦
- 交易貓?jiān)创a搭建教程 游戲交易平臺源碼手機(jī)端
- 電腦調(diào)試麥克風(fēng)的圖文步驟 臺式電腦話筒怎么設(shè)置
- 臺式機(jī)沒有藍(lán)牙功能怎么辦 臺式電腦怎么連藍(lán)牙
