计算机组成原理------基本指令系统的设计与实现
题目 基本指令系统的设计与实现
主要内容、基本要求、主要参考资料等:
主要内容:
独立设计一套包含输入输出类、数据传递类、算数运算类、控制转移类的简单指令系统,设计相应的微指令系统对指令系统中的指令进行解析,用指令编写一个有一定实际意义的程序,并在组成原理实验箱上验证设计内容。
基本要求:
1.完成设计方案,充分论证设计方案的可行性,设计方案应该包括指令格式说明、微指令流程图、微指令编码表、程序清单。
2. 有详细的实验步骤和具体的接线图。
3. 认真进行实验,验证设计方案的正确性。
4. 对实验过程和结果进行认真分析总结,写出课程设计报告。
1、基本模型机
1.1 模型机的结构
1.2 模型机的寻址方式
立即数寻址:参与运算的数据为指令的操作数。例如“SUB A,#10H”是从累加器A中减去立即数10H,结果存入累加器A。
寄存器寻址:参与运算的数据在R0-R3的寄存器中,例如“ADDA,R0”指令是将寄存器RO的值加上累加器A的值,再存入累加器A中。
寄存器间接寻址:参与运算的数据在存储器EM中,数据的地址在寄存器R0-R3中,如“MOV A,@R1"指令是将寄存器R1的值做为地址,把存储器EM中该地址的内容送入累加器A中。
存储器直接寻址:参与运算的数据在存储器EM中,数据的地址为指令的操作数。例
如“AND A, 40H”指令是将存储器EM中40H单元的数据与累加器A的值做逻辑与运算,结果存入累加器A。
1.3模型机指令集
汇编指令 | 机器码1 | 机器码2 | 注释 |
IN Ri A,N | 04H |
| 从IN 读入N存入Ri和A |
MOV Ri W, #N | 09H | N | 将直接数N存入Ri和A |
MOV Ri ST, #N | 0FH | N | 将直接数N存入Ri和ST |
JC A W,#N | 80H | N | A<W 则跳转到N地址 |
JZ A W,#N | A4H | N | A=W 则跳转到N地址 |
ZERO Ri | 12H |
| 将Ri置零 |
MOV A ,Ri | 15H |
| 将Ri中数送至A |
ADDJC Ri A,#N | C2H | N | 将Ri加上A再送回Ri和A, 溢出则跳转至N |
JC A Ri, #N | 90H | N | A<Ri ,则跳转至N地址 |
ADD Ri , ST | 1DH |
| Ri自增 ST ,并存入Ri和A |
OUT #N | 20H | N | 从OUT输出 N |
JMP #N | B8H | N | 无条件跳转到N地址 |
|
|
|
|
2、设计内容
2.1 源程序
程序功能描述: 从IN输入一个数(小于等于255),判断其是否是素数。
指令: (一下指令顺序执行)
汇编指令 | 机器码1 | 机器码2 | 指令说明 |
IN R0 A,N | 04H |
| 从IN 读入N存入R0和A |
MOV R1 W, #02H | 09H | 02H | 将直接数02H存入R1和A |
MOV R3 ST, #01H | 0FH | 01H | 将直接数01H存入R3和ST |
JC A W,#18H | 80H | 18H | A<W 则跳转到#18H地址 |
JZ A W,#14H | A4H | 14H | A=W 则跳转到#14H地址 |
ZERO R2 | 12H |
| 将R2置零 |
MOV A ,R1 | 15H |
| 将R1中数送至A |
ADDJC R2 A,#11H | C2H | 11H | 将R2加上A再送回R2和A, 溢出则跳转至11HS |
JC A R0, #0AH | 90H | 0AH | A<R0 ,则跳转至#0AH地址 |
JZ A W,#18H | A4H | 18H | A=W 则跳转到#18H地址 |
ADD R1,ST | 1DH |
| Ri自增 ST ,并存入R1和A |
JC A R0, #09H | 90H | 09H | A<R0 ,则跳转至#09H地址 |
OUT #01H | 20H | 01H | 从OUT输出 01H |
JMP #14H | B8H | 14H | 无条件跳转到14H地址 |
OUT #00H | 20H | 00H | 从OUT输出 00H |
JMP #18H | B8H | 18H | 无条件跳转到18H地址 |
2.2 内存数据
内存地址 | 数据 | 内存地址 | 数据 |
00H | 04H | 0EH | 0AH |
01H | 09H | 0FH | A4H |
02H | 02H | 10H | 18H |
03H | 0FH | 11H | 1DH |
04H | 01H | 12H | 90H |
05H | 80H | 13H | 09H |
06H | 18H | 14H | 20H |
07H | A4H | 15H | 01H |
08H | 14H | 16H | B8H |
09H | 12H | 17H | 14H |
0AH | 15H | 18H | 20H |
0BH | C2H | 19H | 00H |
0CH | 11H | 1AH | B8H |
0DH | 90H | 1BH | 18H |
2.5 微指令表
微指令表参见表2
3、设计结果
1.变量含义:
R0输入数据,判断R0是否是素数。
R1 循环变量,从02H开始自增。R0循环除以R1.
R2 R1的累加和,中间变量,和R0比较大小。
R3 常数01H
ST 常数01H
2.首先执行寄存器的初始化,对经常使用的几个变量进行初始化
3.主体程序:
特殊值:R0小于2,输出00H。R0等于2,输出01H.
判断是否能除尽:将R2循环加上R1,若大于或则等于R0则跳出循环,此时再判断R2是否等于R0,若等于说明R0除以R1能除尽,否则不能除尽。R2循环加R1时,若出现溢出也说明不能除尽直接执行,R1=R1+1.
判定素数:输入R0除以R1,除不尽,则R1自增,通过跳转重复执行以上步骤到 R1=R0(此时R0没有除以R1).则顺序执行输出 01H(是素数)。若判断是否能除尽时出现R0=R2,则说明R0不是素数,跳转输出00H.
4. 验证:
R0 = 00H OUT = 00H 否
R0 = 01H OUT = 00H 否
R0 = 02H OUT = 01H 是
R0 = 07H OUT = 01H 是
R0 = 06H OUT = 00H 否
R0 = FEH OUT = 00H 否
R0 = FFH OUT = 00H 否
以上数据都通过测试。
表2 微指令表
助记符 | 微地址 | 微程序 |
X R D |
E M W R |
E M R D |
P C O E |
E M E N |
I R E N |
E I N T |
E L P |
M A R E N |
M A R O E |
O U T E N |
S T E N |
R R D |
R W R |
C N |
F E N | X2 | X1 | X0 |
W E N |
A E N | S2 | S1 | S0 |
后续 微地址 | 操作说明 |
取指 | 00 | CBFFFF | 1 | 1 | 0 | 0 | 1 | 0 | 1 | 1 | 1 | 1 | 1 | 1 | 1 | 1 | 1 | 1 | 1 | 1 | 1 | 1 | 1 | 1 | 1 | 1 | P1 | PC->EM->IR,PC+1 |
IN R0 A,N | 04 | FFFB17 | 1 | 1 | 1 | 1 | 1 | 1 | 1 | 1 | 1 | 1 | 1 | 1 | 1 | 0 | 1 | 1 | 0 | 0 | 0 | 1 | 0 | 1 | 1 | 1 | +1 | N->IN->R0,A |
| 05 | CBFFFF | 1 | 1 | 0 | 0 | 1 | 0 | 1 | 1 | 1 | 1 | 1 | 1 | 1 | 1 | 1 | 1 | 1 | 1 | 1 | 1 | 1 | 1 | 1 | 1 | P1 | PC->EM->IR,PC+1 |
MOV R1 W,#02H | 08 | C7FBEF | 1 | 1 | 0 | 0 | 0 | 1 | 1 | 1 | 1 | 1 | 1 | 1 | 1 | 0 | 1 | 1 | 1 | 1 | 1 | 0 | 1 | 1 | 1 | 1 | +1 | PC->EM->R1,W |
| 09 | CBFFFF | 1 | 1 | 0 | 0 | 1 | 0 | 1 | 1 | 1 | 1 | 1 | 1 | 1 | 1 | 1 | 1 | 1 | 1 | 1 | 1 | 1 | 1 | 1 | 1 | P1 | PC->EM->IR,PC+1 |
MOV R3 ST,#01H | 0C | C7EBFF | 1 | 1 | 0 | 0 | 0 | 1 | 1 | 1 | 1 | 1 | 1 | 0 | 1 | 0 | 1 | 1 | 1 | 1 | 1 | 1 | 1 | 1 | 1 | 1 | +1 | PC->EM->R3,ST |
| 0D | CBFFFF | 1 | 1 | 0 | 0 | 1 | 0 | 1 | 1 | 1 | 1 | 1 | 1 | 1 | 1 | 1 | 1 | 1 | 1 | 1 | 1 | 1 | 1 | 1 | 1 | P1 | PC->EM->IR,PC+1 |
JC A W,#18H | 80 | FFFEF9 | 1 | 1 | 1 | 1 | 1 | 1 | 1 | 1 | 1 | 1 | 1 | 1 | 1 | 1 | 1 | 0 | 1 | 1 | 1 | 1 | 1 | 0 | 0 | 1 | +1 | A-W -> FEN |
| 81 | C6FFFF | 1 | 1 | 0 | 0 | 0 | 1 | 1 | 0 | 1 | 1 | 1 | 1 | 1 | 1 | 1 | 1 | 1 | 1 | 1 | 1 | 1 | 1 | 1 | 1 | +1 | PC->EM->PC (JC),PC+1 |
| 82 | CBFFFF | 1 | 1 | 0 | 0 | 1 | 0 | 1 | 1 | 1 | 1 | 1 | 1 | 1 | 1 | 1 | 1 | 1 | 1 | 1 | 1 | 1 | 1 | 1 | 1 | P1 | PC->EM->IR,PC+1 |
JZ A W,#14H | A4 | FFFEF9 | 1 | 1 | 1 | 1 | 1 | 1 | 1 | 1 | 1 | 1 | 1 | 1 | 1 | 1 | 1 | 0 | 1 | 1 | 1 | 1 | 1 | 0 | 0 | 1 | +1 | A-W -> FEN |
| A5 | C6FFFF | 1 | 1 | 0 | 0 | 0 | 1 | 1 | 0 | 1 | 1 | 1 | 1 | 1 | 1 | 1 | 1 | 1 | 1 | 1 | 1 | 1 | 1 | 1 | 1 | +1 | PC->EM->PC (JZ),PC+1 |
| A6 | CBFFFF | 1 | 1 | 0 | 0 | 1 | 0 | 1 | 1 | 1 | 1 | 1 | 1 | 1 | 1 | 1 | 1 | 1 | 1 | 1 | 1 | 1 | 1 | 1 | 1 | P1 | PC->EM->IR,PC+1 |
ZERO R2 | 10 | FFFF8F | 1 | 1 | 1 | 1 | 1 | 1 | 1 | 1 | 1 | 1 | 1 | 1 | 1 | 1 | 1 | 1 | 1 | 0 | 0 | 0 | 1 | 1 | 1 | 1 | +1 | A->ALU->W |
| 11 | FFFB99 | 1 | 1 | 1 | 1 | 1 | 1 | 1 | 1 | 1 | 1 | 1 | 1 | 1 | 0 | 1 | 1 | 1 | 0 | 0 | 1 | 1 | 0 | 0 | 1 | +1 | A-W->D->R |
| 12 | CBFFFF | 1 | 1 | 0 | 0 | 1 | 0 | 1 | 1 | 1 | 1 | 1 | 1 | 1 | 1 | 1 | 1 | 1 | 1 | 1 | 1 | 1 | 1 | 1 | 1 | P1 | PC->EM->IR,PC+1 |
MOV A,R1 | 14 | FFF7F7 | 1 | 1 | 1 | 1 | 1 | 1 | 1 | 1 | 1 | 1 | 1 | 1 | 0 | 1 | 1 | 1 | 1 | 1 | 1 | 1 | 0 | 1 | 1 | 1 | +1 | R1->A |
| 15 | CBFFFF | 1 | 1 | 0 | 0 | 1 | 0 | 1 | 1 | 1 | 1 | 1 | 1 | 1 | 1 | 1 | 1 | 1 | 1 | 1 | 1 | 1 | 1 | 1 | 1 | P1 | PC->EM->IR,PC+1 |
ADD JC R2 ,#11H | C0 | FFF7EF | 1 | 1 | 1 | 1 | 1 | 1 | 1 | 1 | 1 | 1 | 1 | 1 | 0 | 1 | 1 | 1 | 1 | 1 | 1 | 0 | 1 | 1 | 1 | 1 | +1 | R2->W |
| C1 | FFFA90 | 1 | 1 | 1 | 1 | 1 | 1 | 1 | 1 | 1 | 1 | 1 | 1 | 1 | 0 | 1 | 0 | 1 | 0 | 0 | 1 | 0 | 0 | 0 | 0 | +1 | A+W->R2,A |
| C2 | C6FFFF | 1 | 1 | 0 | 0 | 0 | 1 | 1 | 0 | 1 | 1 | 1 | 1 | 1 | 1 | 1 | 1 | 1 | 1 | 1 | 1 | 1 | 1 | 1 | 1 | +1 | PC->EM->PC (JC),PC+1 |
| C3 | CBFFFF | 1 | 1 | 0 | 0 | 1 | 0 | 1 | 1 | 1 | 1 | 1 | 1 | 1 | 1 | 1 | 1 | 1 | 1 | 1 | 1 | 1 | 1 | 1 | 1 | P1 | PC->EM->IR,PC+1 |
JC A R0,#0AH | 90 | FFF7EF | 1 | 1 | 1 | 1 | 1 | 1 | 1 | 1 | 1 | 1 | 1 | 1 | 0 | 1 | 1 | 1 | 1 | 1 | 1 | 0 | 1 | 1 | 1 | 1 | +1 | R0->W |
| 91 | FFFEF9 | 1 | 1 | 1 | 1 | 1 | 1 | 1 | 1 | 1 | 1 | 1 | 1 | 1 | 1 | 1 | 0 | 1 | 1 | 1 | 1 | 1 | 0 | 0 | 1 | +1 | A-W->FEN |
| 92 | C6FFFF | 1 | 1 | 0 | 0 | 0 | 1 | 1 | 0 | 1 | 1 | 1 | 1 | 1 | 1 | 1 | 1 | 1 | 1 | 1 | 1 | 1 | 1 | 1 | 1 | +1 | PC->EM->PC (JC),PC+1 |
| 93 | CBFFFF | 1 | 1 | 0 | 0 | 1 | 0 | 1 | 1 | 1 | 1 | 1 | 1 | 1 | 1 | 1 | 1 | 1 | 1 | 1 | 1 | 1 | 1 | 1 | 1 | P1 | PC->EM->IR,PC+1 |
JZ A W,#18H | A4 | FFFE99 | 1 | 1 | 1 | 1 | 1 | 1 | 1 | 1 | 1 | 1 | 1 | 1 | 1 | 1 | 1 | 0 | 1 | 0 | 0 | 1 | 1 | 0 | 0 | 1 | +1 | A-W->JZ |
| A5 | C6FFFF | 1 | 1 | 0 | 0 | 0 | 1 | 1 | 0 | 1 | 1 | 1 | 1 | 1 | 1 | 1 | 1 | 1 | 1 | 1 | 1 | 1 | 1 | 1 | 1 | +1 | PC->EM->PC (JC),PC+1 |
| A6 | CBFFFF | 1 | 1 | 0 | 0 | 1 | 0 | 1 | 1 | 1 | 1 | 1 | 1 | 1 | 1 | 1 | 1 | 1 | 1 | 1 | 1 | 1 | 1 | 1 | 1 | P1 | PC->EM->IR,PC+1 |
ADD R1,ST | 1C | FFF7EF | 1 | 1 | 1 | 1 | 1 | 1 | 1 | 1 | 1 | 1 | 1 | 1 | 0 | 1 | 1 | 1 | 1 | 1 | 1 | 0 | 1 | 1 | 1 | 1 | +1 | R1->A |
| 1D | FFFF4F | 1 | 1 | 1 | 1 | 1 | 1 | 1 | 1 | 1 | 1 | 1 | 1 | 1 | 1 | 1 | 1 | 0 | 1 | 0 | 0 | 1 | 1 | 1 | 1 | +1 | ST->W |
| 1E | FFFB90 | 1 | 1 | 1 | 1 | 1 | 1 | 1 | 1 | 1 | 1 | 1 | 1 | 1 | 0 | 1 | 1 | 1 | 0 | 0 | 1 | 0 | 0 | 0 | 0 | +1 | A+W->R1,A |
| 1F | CBFFFF | 1 | 1 | 0 | 0 | 1 | 0 | 1 | 1 | 1 | 1 | 1 | 1 | 1 | 1 | 1 | 1 | 1 | 1 | 1 | 1 | 1 | 1 | 1 | 1 | P1 | PC->EM->IR,PC+1 |
JC A R0,#09H | 90 | FFF7EF | 1 | 1 | 1 | 1 | 1 | 1 | 1 | 1 | 1 | 1 | 1 | 1 | 0 | 1 | 1 | 1 | 1 | 1 | 1 | 0 | 1 | 1 | 1 | 1 | +1 | R0->W |
| 91 | FFFEF9 | 1 | 1 | 1 | 1 | 1 | 1 | 1 | 1 | 1 | 1 | 1 | 1 | 1 | 1 | 1 | 0 | 1 | 1 | 1 | 1 | 1 | 0 | 0 | 1 | +1 | A-W->FEN |
| 92 | C6FFFF | 1 | 1 | 0 | 0 | 0 | 1 | 1 | 0 | 1 | 1 | 1 | 1 | 1 | 1 | 1 | 1 | 1 | 1 | 1 | 1 | 1 | 1 | 1 | 1 | +1 | PC->EM->PC (JC),PC+1 |
| 93 | CBFFFF | 1 | 1 | 0 | 0 | 1 | 0 | 1 | 1 | 1 | 1 | 1 | 1 | 1 | 1 | 1 | 1 | 1 | 1 | 1 | 1 | 1 | 1 | 1 | 1 | P1 | PC->EM->IR,PC+1 |
OUT #01H | 20 | C7DFFF | 1 | 1 | 0 | 0 | 0 | 1 | 1 | 1 | 1 | 1 | 0 | 1 | 1 | 1 | 1 | 1 | 1 | 1 | 1 | 1 | 1 | 1 | 1 | 1 | +1 | PC->EM->OUT |
| 21 | CBFFFF | 1 | 1 | 0 | 0 | 1 | 0 | 1 | 1 | 1 | 1 | 1 | 1 | 1 | 1 | 1 | 1 | 1 | 1 | 1 | 1 | 1 | 1 | 1 | 1 | P1 | PC->EM->IR,PC+1 |
JMP #14H | B8 | C6FFFF | 1 | 1 | 0 | 0 | 0 | 1 | 1 | 0 | 1 | 1 | 1 | 1 | 1 | 1 | 1 | 1 | 1 | 1 | 1 | 1 | 1 | 1 | 1 | 1 | +1 | PC->EM->PC (JC),PC+1 |
| B9 | CBFFFF | 1 | 1 | 0 | 0 | 1 | 0 | 1 | 1 | 1 | 1 | 1 | 1 | 1 | 1 | 1 | 1 | 1 | 1 | 1 | 1 | 1 | 1 | 1 | 1 | P1 | PC->EM->IR,PC+1 |
OUT #00H | 20 | C7DFFF | 1 | 1 | 0 | 0 | 0 | 1 | 1 | 1 | 1 | 1 | 0 | 1 | 1 | 1 | 1 | 1 | 1 | 1 | 1 | 1 | 1 | 1 | 1 | 1 | +1 | PC->EM->OUT |
| 21 | CBFFFF | 1 | 1 | 0 | 0 | 1 | 0 | 1 | 1 | 1 | 1 | 1 | 1 | 1 | 1 | 1 | 1 | 1 | 1 | 1 | 1 | 1 | 1 | 1 | 1 | P1 | PC->EM->IR,PC+1 |
JMP #18H | B8 | C6FFFF | 1 | 1 | 0 | 0 | 0 | 1 | 1 | 0 | 1 | 1 | 1 | 1 | 1 | 1 | 1 | 1 | 1 | 1 | 1 | 1 | 1 | 1 | 1 | 1 | +1 | PC->EM->PC (JC),PC+1 |
| B9 | CBFFFF | 1 | 1 | 0 | 0 | 1 | 0 | 1 | 1 | 1 | 1 | 1 | 1 | 1 | 1 | 1 | 1 | 1 | 1 | 1 | 1 | 1 | 1 | 1 | 1 | P1 | PC->EM->IR,PC+1 |