计算机组成与系统结构课程设计(2020.12)
保姆式教程
目录
- 计算机组成与系统结构课程设计(2020.12)
- 一、本课程设计的性质、目的、任务
- 二、本课程设计的基本理论
- 三、课程设计的主要内容
- 四、微程序流程图(树形图)
- 五、模型机微指令表
- 六、机器指令程序的说明(微指令地址,指令码,助记符)
- 七、结果
- 八、存在的问题和体会
- 先说第一部分:
- 然后第二部分:
一、本课程设计的性质、目的、任务
二、本课程设计的基本理论
三、课程设计的主要内容
四、微程序流程图(树形图)
五、模型机微指令表
六、机器指令程序的说明(微指令地址,指令码,助记符)
七、结果
八、存在的问题和体会
有兴趣的可以先跟着老师发的讲解视频看一遍大致了解一下:link.
下面介绍做法:
先把老师发的两个check文件放在CMX16文件夹下,反正所有要运行的都得放在那里一起
有两个部分需要完成
一是微程序那里需要输入指令
二是指令系统那里需要输入相应的文字
先说第一部分:
(打开软件之前先确保是2.31版本)
1.先调入一个现有的模型机,用MXJ4.IS
然后右键跳转到指定的微地址,这里用第一条sub指令举例子,
由题目规定
对应的微程序入口微地址为:11 0000 00000 ,即600H
所以第一条从600开始,点击确定之后
看实验报告里面的模型机微指令表,第一条sub指令含有三条命令,相应的操作在说明中已经标明,第一条的代码是 07 06 80(要注意后面输入的时候,0A可以只输入A,但是A0要打A0,懂我意思吧)
填到右下角这个框框里,点修改,可以顺便改一下注释。
输入完代码之后,可以看左下角的打勾情况,对应微程序控制手册弄懂原理
(如果不想懂当我没说=.=)
然后第二部分:
在指令系统里面输入这一段,
SUB R0,R0 00 1
SUB R0,R1 01 1
SUB R0,R2 02 1
SUB R0,R3 03 1
SUB R1,R0 04 1
SUB R1,R1 05 1
SUB R1,R2 06 1
SUB R1,R3 07 1
SUB R2,R0 08 1
SUB R2,R1 09 1
SUB R2,R2 0a 1
SUB R2,R3 0b 1
SUB R3,R0 0c 1
SUB R3,R1 0d 1
SUB R3,R2 0e 1
SUB R3,R3 0f 1
在源程序里输入这一句:
运行一下子,第一条就弄好咯。
至于指令系统里面那一段是咋来的,因为4个寄存器,所以sub这一条,有16种情况,指令码有两位,第一位是根据题目里面所给的
第二位是根据题目所给的,寄存器所对应的编码
eg:第一条SUB R0,R0 00 1
对应 0000 0000 所以指令码是00
再在601的地方方输入相应的05 06 00
根据实验报告里要求写的模型机微指令表相应的代码,和指令系统的文字一路输进去
.
.
.
最后点打开,分别测试两个check20文件
如果不能运行的话,基本上就是代码那里出错了,可以多找几些别人的代码试试,我的放在下面:
微程序指令表:
指令系统:
SUB R0,R0 00 1 ;两个寄存器相减0000 Rd-Rs→Rd
SUB R0,R1 01 1
SUB R0,R2 02 1
SUB R0,R3 03 1
SUB R1,R0 04 1
SUB R1,R1 05 1
SUB R1,R2 06 1
SUB R1,R3 07 1
SUB R2,R0 08 1
SUB R2,R1 09 1
SUB R2,R2 0a 1
SUB R2,R3 0b 1
SUB R3,R0 0c 1
SUB R3,R1 0d 1
SUB R3,R2 0e 1
SUB R3,R3 0f 1
ADD R0,R0 10 1 ;两个寄存器相加0001 Rd+Rs→Rd
ADD R0,R1 11 1
ADD R0,R2 12 1
ADD R0,R3 13 1
ADD R1,R0 14 1
ADD R1,R1 15 1
ADD R1,R2 16 1
ADD R1,R3 17 1
ADD R2,R0 18 1
ADD R2,R1 19 1
ADD R2,R2 1a 1
ADD R2,R3 1b 1
ADD R3,R0 1c 1
ADD R3,R1 1d 1
ADD R3,R2 1e 1
ADD R3,R3 1f 1
AND R0,R0 20 1 ;两个寄存器相与0010 Rd&Rs→Rd
AND R0,R1 21 1
AND R0,R2 22 1
AND R0,R3 23 1
AND R1,R0 24 1
AND R1,R1 25 1
AND R1,R2 26 1
AND R1,R3 27 1
AND R2,R0 28 1
AND R2,R1 29 1
AND R2,R2 2a 1
AND R2,R3 2b 1
AND R3,R0 2c 1
AND R3,R1 2d 1
AND R3,R2 2e 1
AND R3,R3 2f 1
DEC R0 30 1 ;将Rd值减1 0011
DEC R1 34 1
DEC R2 38 1
DEC R3 3C 1
CLR R0 40 1 ;将Rd清零 0100
CLR R1 44 1
CLR R2 48 1
CLR R3 4C 1
RL R0 50 1 ;Rd循环左移一位 0101
RL R1 54 1
RL R2 58 1
RL R3 5C 1
RRC R0 60 1 ;Rd带进位右移一位 0110
RRC R1 64 1
RRC R2 68 1
RRC R3 6C 1
MOV R0,R0 70 1 ;右寄存器传送到左寄存器 Rs→Rd 0111
MOV R0,R1 71 1
MOV R0,R2 72 1
MOV R0,R3 73 1
MOV R1,R0 74 1
MOV R1,R1 75 1
MOV R1,R2 76 1
MOV R1,R3 77 1
MOV R2,R0 78 1
MOV R2,R1 79 1
MOV R2,R2 7a 1
MOV R2,R3 7b 1
MOV R3,R0 7c 1
MOV R3,R1 7d 1
MOV R3,R2 7e 1
MOV R3,R3 7f 1
LDI R0,* 80 2 ;将指令中的立即数(第二字节)送入Rd 1000
LDI R1,* 84 2
LDI R2,* 88 2
LDI R3,* 8C 2
OUT IOH,R0 90 1 ;将寄存器R0数据写入到IOH Rs→i/o(数据开关)高字节 1001
OUT IOH,R1 91 1
OUT IOH,R2 92 1
OUT IOH,R3 93 1
LDA R0,* A0 3 ;[M] →Rd 1010
LDA R1,* A4 3
LDA R2,* A8 3
LDA R3,* AC 3
STA *,R0 B0 3 ;Rs→[M] 1011
STA *,R1 B1 3
STA *,R2 B2 3
STA *,R3 B3 3
JMP * C0 3 ;[M]→PC,即跳转到M所指单元 1100
JZ * D0 3 ;当Z=1时,跳转到M所指单元,否则继续执行 1101
JC * E0 3 ;当CY=1时,跳转到M所指单元,否则继续执行 1110
HALT “” F0 1 ;停机(总线锁定)
有什么不对的地方多多指教喔~