计算机组成原理实验——微控制器实验

1、目的与要求

1)掌握时序信号发生电路组成原理

2)掌握微程序控制器的设计思想和组成原理。

3掌握微程序的编制、写入,观察微程序的运行。

2、实验设备

ZYE1601B计算机组成原理教学实验箱一台,排线若干。

3、实验步骤与源程序

l) 实验接线如下:

① 跳线器J20、J21连上短路片;

② 跳线器J16上SP连H23;

③ UJ1连UJ2。

2) 根据机器指令画出对应的微程序流程图如下:

3)根据微程序流程图设计微指令,并按微指令格式转换成二进制代码,如下表所示。

二进制微代码表

微地址

S3 S2 S1 S0 M CN WE B1 B0

A

B

C

UA5…UA0

0 0

0  0  0  0  0  1  0  1  1

0 0 0

0 0 0

1 0 0

0 1 0 0 0 0

0 1

0  0  0  0  0  1  0  1  1

1 1 0

1 1 0

1 1 0

0 0 0 0 1 0

0 2

0  0  0  0  0  1  0  0  1

1 0 0

0 0 0

0 0 1

0 0 1 0 0 0

0 3

0  0  0  0  0  1  0  0  1

1 1 0

0 0 0

0 0 0

0 0 0 1 0 0

0 4

0  0  0  0  0  1  0  0  1

0 1 1

0 0 0

0 0 0

0 0 0 1 0 1

0 5

0  0  0  0  0  1  0  1  1

0 1 0

0 0 1

0 0 0

0 0 0 1 1 0

0 6

1  0  0  1  0  1  0  1  1

0 0 1

1 0 1

0 0 0

0 0 0 0 0 1

0 7

0  0  0  0  0  1  0  0  1

1 1 0

0 0 0

0 0 0

0 0 1 1 0 1

0 8

0  0  0  0  0  1  0  0  0

0 0 1

0 0 0

0 0 0

0 0 0 0 0 1

0 9

0  0  0  0  0  1  0  1  1

1 1 0

1 1 0

1 1 0

0 0 0 0 1 1

0  A

0  0  0  0  0  1  0  1  1

1 1 0

1 1 0

1 1 0

0 0 0 1 1 1

0 B

0  0  0  0  0  1  0  1  1

1 1 0

1 1 0

1 1 0

0 0 1 1 1 0

0 C

0  0  0  0  0  1  0  1  1

1 1 0

1 1 0

1 1 0

0 1 0 1 1 0

0 D

0  0  0  0  0  1  0  0  1

0 0 0

0 0 1

0 0 0

0 0 0 0 0 1

0 E

0  0  0  0  0  1  0  0  1

1 1 0

0 0 0

0 0 0

0 0 1 1 1 1

0 F

0  0  0  0  0  1  0  0  1

0 1 0

0 0 0

0 0 0

0 1 0 1 0 1

1 0

0  0  0  0  0  1  0  1  1

1 1 0

1 1 0

1 1 0

0 1 0 0 1 0

1 1

0  0  0  0  0  1  0  1  1

1 1 0

1 1 0

1 1 0

0 1 0 1 0 0

1 2

0  0  0  0  0  1  0  0  1

0 1 0

0 0 0

0 0 0

0 1 0 1 1 1

1 3

0  0  0  0  0  1  0  1  1

0 0 0

0 0 0

0 0 0

0 0 0 0 0 1

1 4

0  0  0  0  0  1  0  0  0

0 1 0

0 0 0

0 0 0

0 1 1 0 0 0

1 5

0  0  0  0  0  1  1  1  0

0 0 0

1 0 1

0 0 0

0 0 0 0 0 1

1 6

0  0  0  0  0  1  0  0  1

1 0 1

0 0 0

1 1 0

0 0 0 0 0 1

1  7

0  0  0  0  0  1  1  1  0

0 0 0

1 0 1

0 0 0

0 1 0 0 0 0

1 8

0  0  0  0  0  1  1  0  1

0 0 0

1 0 1

0 0 0

0 1 0 0 0 1

4)连接实验线路,仔细查线无误后接通电源。

5) 进一步了解微程序控制器的工作原理

① 写微程序

A. “编程开关”置为“写入”状态。

B. “运行控制”开关置为“运行”,“运行方式”开关置为“单步”状态。

C. 用二进制模拟开关UA0~UA5置6位微地址,UA0~UA5的电平由LK0~LK5显示,高电平亮,低电平灭。

D. 用二进制模拟开关MK1~MK24置24位微代码,24位微代码由LMD1~LMD24显示灯显示,高电平亮,低电平灭。

E. 按动“启动运行”开关,启动时序电路,即可将微代码写入到E2PROM 2816的相应地址单元中。

F . 重复C-E步骤,将表3-5的微代码全部写入E2PROM 2816中。

② 读微程序

A. 将“编程开关”设置为“读”状态。

B. “运行控制”开关置为“运行”,“运行方式”开关置为“单步”状态。

C. 用二进制模拟开关UA0~UA5置6位微地址。

D. 按动“启动运行”开关,启动时序电路,读出微代码,观察显示灯LMD1~LMD24的状态,检查读出的微代码是否与写入的相同,如果不同,则将“编程开关”置为“写入”状态。重新执行①即可。

③ 单步运行

A. “编程开关”置于“运行”状态。

B. “运行控制”开关置为“运行”,“运行方式”开关置为“单步”状态。

C. 系统总清,即“总清”开关拨0→1。使微地址寄存器U14~U16清零,从而明确本机的运行入口微地址为000000(二进制)。

D. 按动“启动运行”开关,启动时序电路,则每按动一次,读出一条微指令后停机,此时实验机上的微地址显示灯和微程序显示灯将显示所读出的一条指令。注意:在当前条件下,可将6芯排座“JSE1”和“UJ2”相连,可通过强置端SE1~SE6人为设置微地址,从而改变下一条微指令的地址。设置方法如下:先将微地址开关置“1”,再将UJ1上的排线换插到“JSE1”,然后将某个或几个二进制开关置为“0”,相应的微地址位即被强置为“1”,从而改变下一条微指令的地址。

④ 连续运行

A. 将“编程开关”置为“运行”状态。

B. “运行控制”开关置为“运行”,“运行方式”开关置为“连续”状态。

C. 系统总清,即“总清”开关拨0→1。使微地址寄存器U14~U16清零,从而明确本机的运行入口微地址为000000(二进制)。

D.  按动“启动运行”开关,启动时序电路,则可连续读出微指令。

4、结果分析与实验体会

1)写出外设输入指令、 二进制加法指令、存数指令、 输出到外设指令和无条件转移指令五条指令的微程序。(用十六进制表示)

IN:   05ED82   04C048   041001   041001

ADD:  05ED82   04C048   041001  05ED83  04E004  04B005  05A206   959A01

STA:  05ED82   04C048   041001  05ED87   04E00D  068201

OUT:  05ED82   04C048   041001  05ED8E  04E00F  04A0015  070A01

JMP: 05ED82   04C048   041001  05ED96   04D181

外设输入指令:041001

二进制加法指令:05ED83->04E004->04B005->05A206->959A01

存数指令:05ED83->04E00D->048201

输出到外设指令:05ED83->04E00F->04A0A5->070A01

无条件转移指令五条指令:05ED96->04D181

  1. 给出读写微程序过程和验证结果

读出的微程序与写入的微程序完全一致。当将编程开关置为“RUN”(运行)状态。使CLR 从1→0→1,此时微地址寄存器清“0”,从而给出取指微指令的入口地址为000000(二进制)。按动START,启动时序电路,每按动一次启动键,读出一条微指令。

外设输入指令:0105ED82,0204C048,08041001

二进制加法指令:0105ED82,0204C048,0905ED83,0304E004,0404BO05,0505A206,06959A01

存数指令:0105ED82,0204C048,0A05ED87,0704E00D,0D068201

输出到外设指令:0105ED82,0204C048,0B05ED8E,0E04E00F,0E04A015,15070A01

无条件转移指令:0105ED82,0204C048,OC04C048,OC05ED96,1604D181

### 关于AcWing平台上最长公共子序列问题 #### 解决方案概述 针对AcWing平台上的最长公共子序列(LCS)问题,采用动态规划(DP)[^1]是一种高效的方法来解决此类挑战。此方法不仅能够有效地计算两个字符串之间的最大匹配字符数量,而且可以进一步扩展以追踪具体的匹配路径。 #### 动态规划原理说明 通过构建二维格dp[i][j]示第一个串前i个字符与第二个串前j个字符的最大匹配数[^2]。当遇到相同字符时,在左上角的基础上加一;如果不同则取上方和左侧较大者继承下来作为当前格子的值。最终整个填满后的右下角即为所求的结果长度。 #### Python代码实现示例 下面是一个基于上述理论的具体Python程序: ```python def longest_common_subsequence(text1: str, text2: str) -> int: m, n = len(text1), len(text2) dp = [[0] * (n + 1) for _ in range(m + 1)] for i in range(1, m + 1): for j in range(1, n + 1): if text1[i - 1] == text2[j - 1]: dp[i][j] = dp[i - 1][j - 1] + 1 else: dp[i][j] = max(dp[i - 1][j], dp[i][j - 1]) return dp[-1][-1] ``` 这段代码实现了寻找两段文字间最长公共子序列的功能,并返回其长度[^3]。 #### 进一步获取具体子序列内容 为了得到实际构成这个最小子序列的内容而不是仅仅知道它的长度,可以在原有基础上增加回溯过程。从`dp[m][n]`出发向左上角遍历直到起点位置,每当发现相等情况就记录对应字母到列中最后反转即可获得完整的LCS字符串[^4]。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值