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

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


大多數(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
內(nèi)存直接取址個(gè)數(shù)*內(nèi)存占用位數(shù):

推薦閱讀