大多數(shù)的機(jī)器碼格式包括以下四種:
三地址機(jī)器碼格式
三地址機(jī)器碼格式主要在RISC CPU中用到,例如下邊ARM一條匯編指令
ADD r1,r2,r3上述代碼表示將r2寄存器中的值加上r3寄存器中的值,寫(xiě)入達(dá)到r1寄存器
雙地址機(jī)器碼格式
雙地址機(jī)器碼格式主要在CISC CPU中用到,例如下邊Inter Pentium的一條匯編指令
ADD AX BX上述代碼講過(guò)BX寄存器的內(nèi)容與AX相加后,寫(xiě)入到AX中,雙地址機(jī)器碼的壞處也很明顯了,例如AX寄存器的值執(zhí)行命令后就被覆蓋了,不能夠重用了 。
單地址機(jī)器碼格式
單地址機(jī)器碼格式在RISC,CISC CPU都會(huì)用到,例如下邊ARM一條匯編指令
LDA r1上述代碼表示將r1寄存器的值加到累加器(一種寄存器,用于存儲(chǔ)中間結(jié)果),單地址機(jī)器碼其實(shí)也是有兩個(gè)操作數(shù),一個(gè)是r1,另一個(gè)就是累加器,因?yàn)長(zhǎng)DA r1已經(jīng)意味著追加累加器的意思,所有不需要指定 。
零地址機(jī)器碼格式
零地址機(jī)器碼格式一般操作棧頂?shù)臄?shù)據(jù),不需要寄存器參與,零地址機(jī)器碼格式不會(huì)用到地址,對(duì)于單操作數(shù)運(yùn)算,例如遞增,遞減,取負(fù),清零等一元運(yùn)算,直接用棧頂?shù)臄?shù)據(jù),對(duì)于雙操作數(shù)從棧頂陸續(xù)出棧兩個(gè)數(shù),然后運(yùn)算,下邊舉例子,例如下邊的表達(dá)式
Z=(A+B).(C-D)
PUSH A;A入棧PUSH B;B入棧ADD;棧頂兩個(gè)數(shù)出棧,相加,然后結(jié)果入棧PUSH C;C入棧PUSH D;D入棧SUB;棧頂兩個(gè)數(shù)據(jù)出棧,相減,然后結(jié)果入棧MUL;棧頂兩個(gè)數(shù)據(jù)出棧,相乘,然后結(jié)果入棧POPZ;棧頂數(shù)據(jù)出棧二.番外篇2.1 寄存器寄存器和內(nèi)存一樣都是存儲(chǔ)器,從功能上講跟內(nèi)存沒(méi)什么區(qū)別,都是用來(lái)存儲(chǔ)數(shù)據(jù),從其他角度來(lái)看,寄存器和內(nèi)存有如下區(qū)別
a.寄存器的速度比內(nèi)存快N的等級(jí),因此為了加快CPU獲取指令或者數(shù)據(jù)的速度,就會(huì)將最近要訪問(wèn)的數(shù)據(jù)放入到寄存器中 。
b.寄存器的個(gè)數(shù)是有限制,一般計(jì)算機(jī)不到百個(gè),寄存器尋址直接用名稱(chēng),例如ARM CPU寄存器 r1,r1就是寄存器的名稱(chēng),可以通過(guò)r1直接訪問(wèn)寄存器的內(nèi)容,而內(nèi)存則用地址,例如1234表示內(nèi)存的地址
在CPU中寄存器分為以下幾種
內(nèi)存地址寄存器(程序員不可見(jiàn))
保存了當(dāng)前正在讀或者正在寫(xiě)的內(nèi)存地址
內(nèi)存數(shù)據(jù)寄存器(程序員不可見(jiàn))
保存了當(dāng)前剛從內(nèi)存讀出的數(shù)據(jù)或者準(zhǔn)備要寫(xiě)入內(nèi)存的數(shù)據(jù)
PC 程序計(jì)數(shù)器(程序員不可見(jiàn))
保存了下一條要執(zhí)行的指令的內(nèi)存地址
IR指令寄存器(程序員不可見(jiàn))
保存了當(dāng)前正在執(zhí)行的指令
通用寄存器(程序員可見(jiàn))
存儲(chǔ)臨時(shí)的數(shù)據(jù)例如中間結(jié)果)
特殊寄存器(程序員不可見(jiàn))
例如累加器,條件寄存器等
2.2 機(jī)器碼長(zhǎng)度設(shè)計(jì)在1.2章節(jié)中闡述了機(jī)器碼的格式,沒(méi)有指出機(jī)器碼長(zhǎng)度的設(shè)計(jì),這里指出 。
指令長(zhǎng)度算法:
操作碼長(zhǎng)度+控制位長(zhǎng)度+寄存器尋址個(gè)數(shù)*寄存器占用位數(shù)+內(nèi)存直接取址個(gè)數(shù)*內(nèi)存占用位數(shù)+立即數(shù)長(zhǎng)度
操作碼長(zhǎng)度:
CPU支持的指令個(gè)數(shù),如果支持8個(gè)指令,那操作碼長(zhǎng)度就是3
控制位長(zhǎng)度:
這個(gè)是固定的
寄存器尋址個(gè)數(shù)*寄存器占用位數(shù):
寄存器占用位數(shù)可以通過(guò)程序員可以訪問(wèn)的寄存器個(gè)數(shù)換算得知,如果寄存器可以訪問(wèn)的寄存器個(gè)數(shù)為32,那么寄存器占用位數(shù)就是5(2的5次方=32)
寄存器尋址個(gè)數(shù)表示機(jī)器碼中通過(guò)寄存器獲取操作數(shù)或者間接通過(guò)寄存器獲取操作數(shù)的寄存器個(gè)數(shù)例如
ADD r1,r2 表示通過(guò)r1,r2兩個(gè)寄存器獲取操作數(shù),那么寄存器尋址個(gè)數(shù)就是2
以上關(guān)于本文的內(nèi)容,僅作參考!溫馨提示:如遇健康、疾病相關(guān)的問(wèn)題,請(qǐng)您及時(shí)就醫(yī)或請(qǐng)專(zhuān)業(yè)人士給予相關(guān)指導(dǎo)!
「愛(ài)刨根生活網(wǎng)」www.malaban59.cn小編還為您精選了以下內(nèi)容,希望對(duì)您有所幫助:- 中國(guó)移動(dòng)服務(wù)密碼查詢(xún) 中國(guó)移動(dòng)服務(wù)密碼忘記了怎么辦
- 使用Skype的步驟 電腦skype怎么用
- 微信分付哪里地方可以用?掃碼消費(fèi)的渠道分享!
- win7忘記密碼強(qiáng)制重置 windows7密碼忘了怎么辦
- 附講解和思維導(dǎo)圖 java代碼大全及詳解
- 小米藍(lán)牙連接pin密碼不對(duì) pin碼或配對(duì)密鑰不正確怎么解決
- sim卡pin碼解鎖方法 sim卡網(wǎng)絡(luò)解鎖pin碼是怎么解
- 自動(dòng)連接陌生帶密碼的熱點(diǎn) 加密通信是什么意思
- python代碼運(yùn)行方式 python代碼怎么運(yùn)行
- 電腦截屏操作快捷鍵 電腦部分截圖快捷鍵怎么操作
