WHUT計(jì)算機(jī)課設(shè)實(shí)驗(yàn)幫助——簡單模型機(jī)設(shè)計(jì)(一)
寫一下我對(duì)這個(gè)實(shí)驗(yàn)的理解,目前還沒有上機(jī)驗(yàn)證,明天早上再去實(shí)驗(yàn)室看看。?如果不是簡單模型機(jī)設(shè)計(jì)(一)的同學(xué)們也可以看看,也許會(huì)對(duì)您有所幫助。
題目一、簡單模型機(jī)設(shè)計(jì)與實(shí)現(xiàn)(一)
?????基于TD-CMA?計(jì)算機(jī)組成原理教學(xué)實(shí)驗(yàn)系統(tǒng),設(shè)計(jì)一個(gè)簡單的計(jì)算機(jī)整機(jī)系統(tǒng)—模型機(jī),分析其工作原理。根據(jù)模型機(jī)的數(shù)據(jù)通路以及微程序控制器的工作原理,設(shè)計(jì)完成以下幾條機(jī)器指令和相應(yīng)的微程序,輸入程序并運(yùn)行。
IN?????????R0?????????????????;IN ->R0
SUB?????0DH??????????????;R0 - [0DH] -> R0,直接尋址
SHL?????R0?????????????????;將R0寄存器中的內(nèi)容邏輯左移
STA??????0EH,R0???????;R0->[0EH],直接尋址
LDA?????0FH,R0????????;[0FH]->R0,直接尋址
LOP: DEC?????R0?????????????????;R0-1->R0
BZC?????EXIT?????????????;當(dāng)FC或FZ為1時(shí),轉(zhuǎn)到EXIT
JMP?????????????LOP
EXIT: OUT????0EH,R0???????;[0EH]->LED,直接尋址
0DH、0EH、0FH單元內(nèi)容分別為03H、04H、02H。
以下是未經(jīng)驗(yàn)證的指令,僅供參考,若有意見或者建議歡迎指出
; //****** Start Of Main Memory Data ****** //
$P 00 20;? START:IN->R0
$P 01 00;
$P 02 C1; LAD R1 0DH 通過直接尋址,將0DH的內(nèi)容,放到寄存器R1中,即[0DH] -> R1
$P 03 0D;
$P 04 84; SUB R1 R0 R0 - [0DH] -> R0
$P 05 00; SHL R0 將R0寄存器中的內(nèi)容邏輯左移,即擴(kuò)大兩倍。R0+R0->R0; ADD R0,R0
$P 06 D0; STA 0EH R0 R0->[0EH],直接尋址
$P 07 0E;
$P 08 C0; LDA 0FH R0 [0FH]->R0,直接尋址
$P 09 0F;
$P 0A 61; LDI R1 01 01->R1,立即尋址,立即數(shù)01
$P OB 01;
$P 0C 84; LOP: DEC R0 R0-R1(即是1)->R0?
$P 10 F0; BZC EXIT 當(dāng)FC或FZ為1時(shí),轉(zhuǎn)到EXIT
$P 11 14;
$P 12 E0; JMP LOP 跳轉(zhuǎn)到LOP指令,即0C地址的指令
$P 13 0C;
;這一部分就是 EXIT: OUT 0EH,R0 ;[0EH]->LED的內(nèi)容了,我把它拆成了兩部分,所以上面轉(zhuǎn)到EXIT就是跳轉(zhuǎn)到地址14H
$P 14 C0; LAD 0EH R0 將0EH的內(nèi)容,放到寄存器R0中
$P 15 0E;
$P 16 30; EXIT: OUT 0EH,R0 ;[0EH]->LED,直接尋址 將寄存器R1中的內(nèi)容輸出到OUT單元中。在OUT單元中的LED燈中可以查看結(jié)果
$P 17 50;? END:HLT 停機(jī)
$P OD 03; DATA 數(shù)據(jù)存放在這里
$P OE 04; DATA
$P OF 02; DATA
; //******* End Of Main Memory Data ******* //
接下來,提供一些理解該指令的幫助
首先在課件《CMA組成原理與系統(tǒng)結(jié)構(gòu)》第63頁
5.3 復(fù)雜模型機(jī)設(shè)計(jì)實(shí)驗(yàn) 中
我們會(huì)看到指令的設(shè)計(jì)與格式,且分為單字節(jié),雙字節(jié)指令





對(duì)照著下面的指令格式,我們就可以來編寫我們的機(jī)器指令了。(“ **? ”的部分應(yīng)該默認(rèn)是0)

以下文的機(jī)器指令作為例子


我們可以看到地址碼部分是依次遞增的,而右邊的內(nèi)容則是我們的機(jī)器指令。需要注意的是我們的指令分為了單字節(jié),雙字節(jié)指令。以第一行?START:IN R0,00H。從IN單元讀入計(jì)數(shù)初值為例,首先它是雙字節(jié)指令

并且由上面我們可以得知它的指令格式

所以它的機(jī)器指令應(yīng)該是

地址碼部分不用說
右側(cè)第一行 0010 00 00 。從左往右看分為了三個(gè)部分,其中0010?代表 IN的操作碼。中間的00 對(duì)應(yīng)的是“ **?”(應(yīng)該是默認(rèn)的)。最后的?00代表寄存器R0

右側(cè)第二行 全零 對(duì)應(yīng)的就是我們的16進(jìn)制的00H
就是這么簡單,那么START:IN R0,00H 這條語句的機(jī)器指令你就學(xué)會(huì)啦!
然后是?LDI R1,0FH????立即數(shù)0FH送R1

左半邊地址碼部分照舊遞增
右側(cè)第一行 0110 00 01。分為三個(gè)部分,其中0110?代表LDI?的操作碼。中間的00 對(duì)應(yīng)的是“ **?”(應(yīng)該是默認(rèn)的)。最后的?01代表寄存器R1
LDI 的指令格式如下:

右側(cè)第二行 存放data?0FH 。轉(zhuǎn)化成二進(jìn)制,故其為00001111。
其他指令也是同理。相信大家能夠舉一反三
還有注意的點(diǎn)就是數(shù)據(jù)我們放在了下面,對(duì)應(yīng)


基本的原理大家應(yīng)該都清楚了,接下我們的機(jī)器指令就是把二進(jìn)制轉(zhuǎn)化成對(duì)用的16進(jìn)制就行了。請(qǐng)大家對(duì)照上面給出的代碼和解釋稍作理解。
機(jī)器指令格式說明: $P XX XX
?? $P :? 機(jī)器指令代碼
? ? XX : 十六進(jìn)制地址
? ? XX : 機(jī)器指令標(biāo)志
?
微指令格式說明: $M XX XXXXXX
?? ? $M :微指令代碼
XX:十六進(jìn)制地址
XXXXXX:微指令標(biāo)志
微指令的設(shè)計(jì)還要麻煩一些,稍后有時(shí)間再做說明。