当前位置:文档之家› 计算机组成原理课程设计精编WORD版

计算机组成原理课程设计精编WORD版

计算机组成原理课程设计精编WORD版
计算机组成原理课程设计精编WORD版

计算机组成原理课程设计精编W O R D版

IBM system office room 【A0816H-A0912AAAHH-GX8Q8-GNTHHJ8】

指导教师:桂宁张芳2016年6月18日计算机组成原理课程设计

报告

(2015/2016第二学期------第17周)

指导教师:桂宁张芳

班级:

姓名:

学号:

一、目的和要求

目的:

深入了解计算机各种指令的执行过程,以及控制器的组成,指令系统微程序设计的具体知识,进一步理解和掌握动态微程序设计的概念;完成微程序控制的特定功能计算机的指令系统设计和调试。

要求:

根据内容自行设计相关指令微程序;(务必利用非上机时间设计好微程序)

设计测试程序、实验数据并上机调试。

设计报告内容:包括1、设计目的2、设计内容3、微程序设计(含指令格式、功能、设计及微程序) 4、实验数据(测试所设计指令的程序及结果)。

二、实验环境

TEC-2机和PC机

三、具体内容

实验内容:

(1)把用绝对地址表示的内存单元ADDR1中的内容与内存单元ADDR2中的内容相减,结果存于内存单元ADDR3中。指令格式:D4××,ADDR1,ADDR2,

ADDR3,四字指令(控存入口100H)

功能: [ADDR3]=[ADDR1]-[ADDR2]

(2)将一通用寄存器内容减去某内存单元内容,结果放在另一寄存器中。

指令格式:E0 DR SR,ADDR (SR,DR源、目的寄存器各4位)双字指令(控存入口130H)

功能: DR=SR - [ADDR]

(3)转移指令。判断两个通用寄存器内容是否相等,若相等则转移到指定绝对地址,否则顺序执行。

指令格式:E5 DR SR,ADDR 双字指令(控存入口140H)

功能: if DR==SR goto ADDR else 顺序执行。

设计:利用指令的CND字段,即IR10~8,令IR10~8=101,即CC=Z

则当DR==SR时Z=1,微程序不跳转,接着执行MEM PC(即ADDR PC)而当DR!=SR时Z=0,微程序跳转至A4。

实验设计并分析

第一条:

把用绝对地址表示的内存单元ADDR1中的内容与内存单元ADDR2中的内容相减,结果存于内存单元ADDR3中。指令格式:D4××,ADDR1,ADDR2,

ADDR3,四字指令(控存入口100H)

功能: [ADDR3]=[ADDR1]-[ADDR2]

指令格式:

微程序:

PC->AR,PC+1->PC: 0000 0E00 A0B5 5402

MEN->AR: 0000 0E00 10F0 0002

MEN->Q: 0000 0E00 00F0 0000

PC->AR,PC+1->PC: 0000 0E00 A0B5 5402

MEN->AR: 0000 0E00 10F0 0002

MEN-Q->Q: 0000 0E01 01E0 0000

PC->AR,PC+1->PC: 0000 0E00 A0B5 5402

MEN->AR: 0000 0E00 10F0 0002

Q->MEN,CC#=0: 0029 0300 1020 0010

>E900

0900 0000:0000 0000:0E00 0000:A0B5 0000:5402 0000:0000

0905 0000:0E00 0000:10F0 0000:0002 0000:0000 0000:0E00

090A 0000:00F0 0000:0000 0000:0000 0000:0E00 0000:A0B5

090F 0000:5402 0000:0000 0000:0E00 0000:10F0 0000:0002

0914 0000:0000 0000:0E01 0000:01E0 0000:0000 0000:0000

0919 0000:0E00 0000:A0B5 0000:5402 0000:0000 0000:0E00 091E 0000:10F0 0000:0002 0000:0029 0000:0300 0000:1020 0923 0000:0010

用D命令查看输入的微码:

>D900

0900 0000 0E00 A0B5 5402 0000 0E00 10F0 0002 ......T......... 0908 0000 0E00 00F0 0000 0000 0E00 A0B5 5402 ..............T. 0910 0000 0E00 10F0 0002 0000 0E01 01E0 0000 ................ 0918 0000 0E00 A0B5 5402 0000 0E00 10F0 0002 ......T......... 0920 0029 0300 1020 0010 0000 0000 0000 0000 .).............. 0928 0000 0000 0000 0000 0000 0000 0000 0000 ................ >A800

0800: MOV R1,900

0802: MOV R2,9

0804: MOV R3,100

0806: LDMC

0807: RET

0808:

用G命令运行加载微码的程序:>G800

用A命令输入程序:

>A820

0820: MOV R0,0023

0822: MOV [A00],R0

0824: MOV R1,0022

0826: MOV [A01],R1

0828: NOP

0829: NOP

082A: NOP

082B: NOP

082C: RET

082D:

用E命令输入新指令:

>E828

0828 0000:D400 0000:0A00 0000:0A01 0000:0A02用U命令查看输入程序:

>U820

0820: 2C00 0023 MOV R0, 0023

0822: 3400 0A00 MOV [0A00], R0

0824: 2C00 0032 MOV R1, 0022

0826: 3400 0A01 MOV [0A01], R1

0828: D400 DW D400

0829: 0A00 ADC R0, R0

082A: 0A01 ADC R0, R1

082B: 0A02 ADC R0, R2

082C: AC00 RET

082D: 0000 NOP

082E: 0000 NOP

082F: 0000 NOP

0830: 0000 NOP

0831: 0000 NOP

0832: 0000 NOP

0833: 0000 NOP

用G命令运行程序:

>G820

用D命令查看运行结果:

>DA00

0A00 0023 0022 0001 0000

假设从地址[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。

第二条:

将一通用寄存器内容减去某内存单元内容,结果放在另一寄存器中。指令格式:E0 DR SR,ADDR (SR,DR源、目的寄存器各4位)双字指令(控存入口130H)功能: DR=SR - [ADDR]

指令格式:

微程序:

PC→AR,PC+1→PC:0000 0E00 A0B5 5402

MEM→AR:0000 0E00 10F0 0002

SR - [ADDR] →DR: 0029 0301 31D0 0088

用E命令输入微码:

>E900

0900 0000:0000 0000:0E00 0000:A0B5 0000:5402 0000:0000

0905 0000:0E00 0000:10F0 0000:0002 0000:0029 0000:0301

090A 0000:31D0 0000:0088

用D命令查看输入的微码:

>D900

0900 0000 0E00 A0B5 5402 0000 0E00 10F0 0002 ......T......... 0908 0029 0301 31D0 0088 0000 0000 0000 0000 .)..1........... 0910 0000 0000 0000 0000 0000 0000 0000 0000 ................用A命令输入加载微码的程序:

>A800

0800: MOV R1,900

0802: MOV R2,3

0804: MOV R3,130

0806: LDMC

0807: RET

0808:

用G命令运行加载微码的程序:

>G800

用A命令输入程序:

>A820

0820: MOV R7,0024

0822: MOV R8,0023

0824: MOV [A00],R8

0826: NOP

0827: NOP

0828: RET

0829:

用E命令输入新指令:

>E826

0826 0000:E007 0000:0A00

用U命令查看输入的程序:

>U820

0820: 2C70 0024 MOV R7, 0024

0822: 2C80 0023 MOV R8, 0023 0824: 3408 0A00 MOV [0A00], R8 0826: E007 DW E007 0827: 0A00 ADC R0, R0 0828: AC00 RET

0829: 0000 NOP

082A: 0000 NOP

082B: 0000 NOP

082C: 0000 NOP

082D: 0000 NOP

082E: 0000 NOP

082F: 0000 NOP

0830: 0000 NOP

0831: 0000 NOP

0832: 0000 NOP

用G命令运行程序:

>G820

用D命令查看运行结果:

>DA00

0A00 0022 0000 0000

用R命令查看寄存器内容:

>R

R0=0001 R1=090C R2=0000 R3=0133 SP=FFFF PC=0820 IP=0828 R7=0024 R8=0023 R9=0000 R10=0000 R11=0000 R12=0000 R13=0000 R14=0000 R15=0000 F=00001111 0820: 2C70 0024 MOV R7, 0024

根据指令的功能和指令格式,先读取地址ADDR单元内容暂时放置于Q寄存器中,然后再读取内存单元中的DATA,同时与Q寄存器内容相减,结果存放在DR寄存

器中。

第三条:

转移指令。判断两个通用寄存器内容是否相等,若相等则转移到指定绝对地址,否则顺序执行。

指令格式:E5 DR SR,ADDR 双字指令(控存入口140H)

功能: if DR==SR goto ADDR else 顺序执行。

设计:利用指令的CND字段,即IR10~8,令IR10~8=101,即CC=Z

则当DR==SR时Z=1,微程序不跳转,接着执行MEM PC(即ADDR PC)而当DR!=SR时Z=0,微程序跳转至A4。

指令格式:

微程序:

SR - DR: 0000 0E01 9190 0088

PC→AR,CC# = CND,PC+1→PC: 0029 03E0 A0B5 5402

MEM→PC: 0029 0300 30F0 5000

用E命令输入微码:

>E900

0900 0000:0000 0000:0E01 0000:9190 0000:0088 0000:0029 0905 0000:03E0 0000:A0B5 0000:5402 0000:0029 0000:0300 090A 0000:30F0 0000:5000

用D命令查看输入的微码:

>D900

0900 0000 0E01 9190 0088 0029 03E0 A0B5 5402 .........)....T. 0908 0029 0300 30F0 5000 0000 0000 0000 0000 .)..0.P......... 0910 0000 0000 0000 0000 0000 0000 0000 0000 ................用A命令输入加载微码的程序:

>A800

0800: MOV R1,900

0802: MOV R2,3

0804: MOV R3,140

0806: LDMC

0807: RET

0808:

用G命令运行加载微码的程序:

>G800

当寄存器R7与寄存器R8内容不同时:用A命令输入程序:

>A820

0820: MOV R7,0023

0822: MOV R8,0028

0824: NOP

0825: NOP

0826: MOV R9,0067

0828: RET

0829:

用E命令输入新指令:

>E824

0824 0000:E578 0000:0828

用U命令查看输入的程序:

>U820

0820: 2C70 2013 MOV R7, 0023 0822: 2C80 2014 MOV R8, 0028 0824: E578 DW E578 0825: 0828 ADC R2, R8 0826: 2C90 2015 MOV R9, 0067 0828: AC00 RET

0829: 0000 NOP

082A: 0000 NOP

082B: 0000 NOP

082C: 0000 NOP

082D: 0000 NOP

082E: 0000 NOP

082F: 0000 NOP

0830: 0000 NOP

0831: 0000 NOP

0832: 0000 NOP

用G命令运行程序:

>G820

用R命令查看寄存器内容:

>R

R0=0000 R1=090C R2=0000 R3=0143 SP=FFFF PC=0820 IP=0828 R7=0023 R8=0028 R9=0067 R10=0000 R11=0000 R12=0000 R13=0000 R14=0000 R15=0000 F=00011111 0820: 2C70 2013 MOV R7, 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的指令继续转移

相关主题
文本预览
相关文档 最新文档