计算机组成原理课程设计61112.docx
《计算机组成原理课程设计61112.docx》由会员分享,可在线阅读,更多相关《计算机组成原理课程设计61112.docx(17页珍藏版)》请在冰豆网上搜索。
计算机组成原理课程设计61112
指导教师:
桂宁张芳2016年6月18日
计算机组成原理课程设计
报告
(2015/2016第二学期------第17周)
指导教师:
桂宁张芳
班级:
姓名:
学号:
1、目的和要求
目的:
深入了解计算机各种指令的执行过程,以及控制器的组成,指令系统微程序设计的具体知识,进一步理解和掌握动态微程序设计的概念;完成微程序控制的特定功能计算机的指令系统设计和调试。
要求:
根据内容自行设计相关指令微程序;(务必利用非上机时间设计好微程序)
设计测试程序、实验数据并上机调试。
设计报告内容:
包括1、设计目的2、设计内容3、微程序设计(含指令格式、功能、设计及微程序)4、实验数据(测试所设计指令的程序及结果)。
二、实验环境
TEC-2机和PC机
三、具体内容
实验内容:
(1)把用绝对地址表示的内存单元ADDR1中的内容与内存单元ADDR2中的内容相减,结果存于内存单元ADDR3中。
指令格式:
D4××,ADDR1,ADDR2,ADDR3,四字指令(控存入口100H)
功能:
[ADDR3]=[ADDR1]-[ADDR2]
(2)将一通用寄存器内容减去某内存单元内容,结果放在另一寄存器中。
指令格式:
E0DRSR,ADDR(SR,DR源、目的寄存器各4位)双字指令(控存入口130H)
功能:
DR=SR-[ADDR]
(3)转移指令。
判断两个通用寄存器内容是否相等,若相等则转移到指定绝对地址,否则顺序执行。
指令格式:
E5DRSR,ADDR双字指令(控存入口140H)
功能:
ifDR==SRgotoADDRelse 顺序执行。
设计:
利用指令的CND字段,即IR10~8,令IR10~8=101,即CC=Z
则当DR==SR时Z=1,微程序不跳转,接着执行MEMPC(即ADDRPC)
而当DR!
=SR时Z=0,微程序跳转至A4。
实验设计并分析
第1条:
把用绝对地址表示的内存单元ADDR1中的内容与内存单元ADDR2中的内容相减,结果存于内存单元ADDR3中。
指令格式:
D4××,ADDR1,ADDR2,ADDR3,四字指令(控存入口100H)
功能:
[ADDR3]=[ADDR1]-[ADDR2]
指令格式:
D4XX
ADDR1
ADDR2
ADDR3
微程序:
PC->AR,PC+1->PC:
00000E00A0B55402
MEN->AR:
00000E0010F00002
MEN->Q:
00000E0000F00000
PC->AR,PC+1->PC:
00000E00A0B55402
MEN->AR:
00000E0010F00002
MEN-Q->Q:
00000E0101E00000
PC->AR,PC+1->PC:
00000E00A0B55402
MEN->AR:
00000E0010F00002
Q->MEN,CC#=0:
0029030010200010
>E900
09000000:
00000000:
0E000000:
A0B50000:
54020000:
0000
09050000:
0E000000:
10F00000:
00020000:
00000000:
0E00
090A0000:
00F00000:
00000000:
00000000:
0E000000:
A0B5
090F0000:
54020000:
00000000:
0E000000:
10F00000:
0002
09140000:
00000000:
0E010000:
01E00000:
00000000:
0000
09190000:
0E000000:
A0B50000:
54020000:
00000000:
0E00
091E0000:
10F00000:
00020000:
00290000:
03000000:
1020
09230000:
0010
用D命令查看输入的微码:
>D900
090000000E00A0B5540200000E0010F00002......T.........
090800000E0000F0000000000E00A0B55402..............T.
091000000E0010F0000200000E0101E00000................
091800000E00A0B5540200000E0010F00002......T.........
092000290300102000100000000000000000.)..............
092800000000000000000000000000000000................
>A800
0800:
MOVR1,900
0802:
MOVR2,9
0804:
MOVR3,100
0806:
LDMC
0807:
RET
0808:
用G命令运行加载微码的程序:
>G800
用A命令输入程序:
>A820
0820:
MOVR0,0023
0822:
MOV[A00],R0
0824:
MOVR1,0022
0826:
MOV[A01],R1
0828:
NOP
0829:
NOP
082A:
NOP
082B:
NOP
082C:
RET
082D:
用E命令输入新指令:
>E828
08280000:
D4000000:
0A000000:
0A010000:
0A02
用U命令查看输入程序:
>U820
0820:
2C000023MOVR0,0023
0822:
34000A00MOV[0A00],R0
0824:
2C000032MOVR1,0022
0826:
34000A01MOV[0A01],R1
0828:
D400DWD400
0829:
0A00ADCR0,R0
082A:
0A01ADCR0,R1
082B:
0A02ADCR0,R2
082C:
AC00RET
082D:
0000NOP
082E:
0000NOP
082F:
0000NOP
0830:
0000NOP
0831:
0000NOP
0832:
0000NOP
0833:
0000NOP
用G命令运行程序:
>G820
用D命令查看运行结果:
>DA00
0A000023002200010000
假设从地址[0828]开始执行微程序,此时程序计数器PC的值是0829。
因为运行程序的时候[0829]和[0830]中存了减法的两个数的内存地址,所以要想方设法1)把这两个加数传到运算器的寄存器中,2)在运算器中相减,3)将结果输出到内存单元[ADDR1]。
以下分别进行分析。
1)取每个加数要访问两次内存,第一次是取得被减数所在的内存地址的值(MEM→AR),第二次是取得减数本身并保存在Q寄存器中(MEM→Q)。
注意,取第二个减数的时候,第一次仍是MEM→AR,而第二次MEM-Q→Q的同时也把减法给完成了,请见接下来的分析。
2)相减的操作是MEM-Q→Q。
MEM是从内存中取得的第二个数的值,左边的Q是刚才取得的第一个数的值。
他俩相减的和传给Q寄存器,覆盖掉了Q寄存器刚才保存的值(第一个数)。
3)现在Q寄存器中存有减法的运算结果,最后的工作是把这个结果写到内存单元
[ADDR1]中去。
如果AR或者PC指向[ADDR1]的话就好办了,难点在于现在AR已经到了[ADDR2]处,PC已经到了[ADDR2+1]处,而且又不知道如何让寄存器的值减一。
后来问同学,得到了解决办法:
利用IP寄存器。
IP正好还呆在[ADDR1-1],即内存地址[0828]。
显然,让IP+1就得到了[ADDR1],即[0829]。
微指令是IP+1→AR以及MEM→AR,这时AR的值为第一个加数所在的单元[ADDR1]。
现在Q的值是运算结果,AR的值是运算结果要传给的内存地址。
显而易见,最后
一步就是“存储器写”操作Q→MEM。
第2条:
将一通用寄存器内容减去某内存单元内容,结果放在另一寄存器中。
指令格式:
E0DRSR,ADDR(SR,DR源、目的寄存器各4位)双字指令(控存入口130H)
功能:
DR=SR-[ADDR]
指令格式:
E0XX
ADDR
微程序:
PC→AR,PC+1→PC:
00000E00A0B55402
MEM→AR:
00000E0010F00002
SR-[ADDR]→DR:
0029030131D00088
用E命令输入微码:
>E900
09000000:
00000000:
0E000000:
A0B50000:
54020000:
0000
09050000:
0E000000:
10F00000:
00020000:
00290000:
0301
090A0000:
31D00000:
0088
用D命令查看输入的微码:
>D900
090000000E00A0B5540200000E0010F00002......T.........
09080029030131D000880000000000000000.)..1...........
091000000000000000000000000000000000................
用A命令输入加载微码的程序:
>A800
0800:
MOVR1,900
0802:
MOVR2,3
0804:
MOVR3,130
0806:
LDMC
0807:
RET
0808:
用G命令运行加载微码的程序:
>G800
用A命令输入程序:
>A820
0820:
MOVR7,0024
0822:
MOVR8,0023
0824:
MOV[A00],R8
0826:
NOP
0827:
NOP
0828:
RET
0829:
用E命令输入新指令:
>E826
08260000:
E0070000:
0A00
用U命令查看输入的程序:
>U820
0820:
2C700024MOVR7,0024
0822:
2C800023MOVR8,0023
0824:
34080A00MOV[0A00],R8
0826:
E007DWE007
0827:
0A00ADCR0,R0
0828:
AC00RET
0829:
0000NOP
082A:
0000NOP
082B:
0000NOP
082C:
0000NOP
082D:
0000NOP
082E:
0000NOP
082F:
0000NOP
0830:
0000NOP
0831:
0000NOP
0832:
0000NOP
用G命令运行程序:
>G820
用D命令查看运行结果:
>DA00
0A00002200000000
用R命令查看寄存器内容:
>R
R0=0001R1=090CR2=0000R3=0133SP=FFFFPC=0820IP=0828R7=0024R8=0023
R9=0000R10=0000R11=0000R12=0000R13=0000R14=0000R15=0000F=00001111
0820:
2C700024MOVR7,0024
根据指令的功能和指令格式,先读取地址ADDR单元内容暂时放置于Q寄存器中,然后再读取内存单元中的DATA,同时与Q寄存器内容相减,结果存放在DR寄存
器中。
第3条:
转移指令。
判断两个通用寄存器内容是否相等,若相等则转移到指定绝对地址,否则顺序执行。
指令格式:
E5DRSR,ADDR双字指令(控存入口140H)
功能:
ifDR==SRgotoADDRelse 顺序执行。
设计:
利用指令的CND字段,即IR10~8,令IR10~8=101,即CC=Z
则当DR==SR时Z=1,微程序不跳转,接着执行MEMPC(即ADDRPC)
而当DR!
=SR时Z=0,微程序跳转至A4。
指令格式:
E5XX
ADDR
微程序:
SR-DR:
00000E0191900088
PC→AR,CC#=CND,PC+1→PC:
002903E0A0B55402
MEM→PC:
0029030030F05000
用E命令输入微码:
>E900
09000000:
00000000:
0E010000:
91900000:
00880000:
0029
09050000:
03E00000:
A0B50000:
54020000:
00290000:
0300
090A0000:
30F00000:
5000
用D命令查看输入的微码:
>D900
090000000E0191900088002903E0A0B55402.........)....T.
09080029030030F050000000000000000000.)..0.P.........
091000000000000000000000000000000000................
用A命令输入加载微码的程序:
>A800
0800:
MOVR1,900
0802:
MOVR2,3
0804:
MOVR3,140
0806:
LDMC
0807:
RET
0808:
用G命令运行加载微码的程序:
>G800
当寄存器R7与寄存器R8内容不同时:
用A命令输入程序:
>A820
0820:
MOVR7,0023
0822:
MOVR8,0028
0824:
NOP
0825:
NOP
0826:
MOVR9,0067
0828:
RET
0829:
用E命令输入新指令:
>E824
08240000:
E5780000:
0828
用U命令查看输入的程序:
>U820
0820:
2C702013MOVR7,0023
0822:
2C802014MOVR8,0028
0824:
E578DWE578
0825:
0828ADCR2,R8
0826:
2C902015MOVR9,0067
0828:
AC00RET
0829:
0000NOP
082A:
0000NOP
082B:
0000NOP
082C:
0000NOP
082D:
0000NOP
082E:
0000NOP
082F:
0000NOP
0830:
0000NOP
0831:
0000NOP
0832:
0000NOP
用G命令运行程序:
>G820
用R命令查看寄存器内容:
>R
R0=0000R1=090CR2=0000R3=0143SP=FFFFPC=0820IP=0828R7=0023R8=0028
R9=0067R10=0000R11=0000R12=0000R13=0000R14=0000R15=0000F=00011111
0820:
2C702013MOVR7,2013
由寄存器R9的值为2015可知,程序并未转移到某绝对地址
1、SR-DR,运算器接受标志位,设定标志位
2、PC→AR,PC+1→PC,SCC=7,IR10-8=101,CC#=Z
DR=SR,CC#=Z=1,顺序执行102,DR≠SR转移到下地址为103的指令继续转移
3、(DR=SR)偏移量OFFSET加IP(R4),结果赋给PC(R5),然后令CC#=0,用3
号命令条件转移到A4H,结束微程序
4、PC→AR,PC+1→PCSCC=101,SC=1,使CC#=S#,DR>SR,SR-DR<0,S=1,CC#=S#=0,3号命令条件转移到下地址为A4H的指令结束程序,DR0,S=0,CC#=S#=1,条件转移命令将顺序执行地址为104的指令
5、(DR四.实验心得
通过这次的课程设计,使得我们进一步地熟悉了PC机与TEC-2机,同时也更深层次的了解了计算机各种指令的执行过程,以及控制器的组成,指令系统微程序设计的具体知识,同时在一定程度上理解和掌握了动态微程序设计的概念。
更加深入的了解了指令、微程序、微码的关系和构成,通过设计、调试指令,熟悉了计算机内部的控制器与算术逻辑单元的运行过程,对计算机内部结构更加熟悉。
成绩评定表
平时成绩
答辩成绩
报告成绩
总成绩
签字:
年月日
五.答辩内容(许建龙老师)
1.第三个实验中,为什么要在第一条指令设置SR-DR?
答:
为了判断两寄存器的内容是否相等,并以此为依据来设置标志位Z判断是否转移,若相等则转移,若不相等则顺序执行。
2.第三个实验中,微码通过哪几位实现标志位的设置?
答:
通过B39~B37(SCC)和B34~B32(SST)来设置。
SCC为111,通过设置R8~R10的值来设置条件码CC#的值,此处CC#=Z,R8~R10为5。
SST为001,设置状态位随结果而变化。
3.第三个实验中,PCAR,PC+1PC是怎么实现的?
答:
A、B口地址均设置为1010,即R5,
PCàAR通过A口输出直接作为AM2901的Y输出,Y与寄存器AR相连;
PC+1àPC通过B口输出到ALU运算单元,与进位Cn进行运算后选择F端作为AM2901Y的输出,结果回送PC。
4.第三个实验中,若ADDR是偏移地址,则应如何修改指令?
答:
把MEMàPC改为IP+MEMàPC,IP指向当前指令的地址,MEM为ADDR(偏移地址)。
5.第三个实验中,第二条指令的SC位一定要是0吗?
答:
不一定为0。
此条微指令的SCC为111,SC只与R10~R8有关,所以SC位为任意值,即0和1均可。
6.第三个实验中,若将操作码改为D5XX,应如何修改指令?
答:
应将微程序入口地址改为100H,即把MOVR3,140H改为MOVR3,100H。