第一步:65H → A和A7H → B
准备工作:初始化
为了确保一个干净的开始,请先按一下实验箱上的"CLR"键 。这将清空CPU内的所有寄存器(A, B, R0等),确保它们的值都为00H。
第1.1步:将 65H 送入暂存器A (65H → A)
-
设置数据源:
- 在实验系统的输入单元(IN单元) ,通过拨码开关或者其他输入方式,将数据设置为
65H(二进制为0110 0101)。
- 在实验系统的输入单元(IN单元) ,通过拨码开关或者其他输入方式,将数据设置为
-
设置控制信号:
- 我们需要让输入单元的数据能放到总线(BUS)上。查阅PPT第8页的"外设、存储器读写控制"表,
IN → BUS操作需要设置:RD=1和IOM=1。 - 同时,我们需要让暂存器A准备好接收总线上的数据。查阅PPT第6页的"运算器"控制信号表,
BUS → A操作需要设置:LDA=1。
- 我们需要让输入单元的数据能放到总线(BUS)上。查阅PPT第8页的"外设、存储器读写控制"表,
-
执行操作:
- 在确认以上所有开关(数据和控制信号)都设置正确后,按一下单步执行键("ST"键)。
- 这个操作会把输入单元的
65H通过总线,写入到暂存器A中。
-
验证:
- 操作完成后,观察暂存器A的显示 ,它的值现在应该变成了
65H。
- 操作完成后,观察暂存器A的显示 ,它的值现在应该变成了
第1.2步:将 A7H 送入暂存器B (A7H → B)
现在暂存器A已经有正确的值了,我们来操作暂存器B。
将LDA置0,LDB保持0,然后进行调数据。
-
设置数据源:
- 回到输入单元(IN单元) ,将数据更改为
A7H(二进制为1010 0111)。
- 回到输入单元(IN单元) ,将数据更改为
-
设置控制信号:
- 让输入单元的数据上总线,控制信号保持不变 :
RD=1和IOM=1。 - 这次,我们需要让暂存器B 接收数据。查阅PPT第6页的表格,
BUS → B操作需要设置:LDB=1。(请确保LDA现在是0,否则会把A的内容也覆盖掉)。
- 让输入单元的数据上总线,控制信号保持不变 :
-
执行操作:
- 确认设置无误后,再次按一下单步执行键("ST"键)。
- 这个操作会把输入单元的
A7H通过总线,写入到暂存器B中。
-
验证:
- 观察暂存器B的显示 ,它的值现在应该变成了
A7H。 - 同时,再次确认一下暂存器A的显示 ,它应该仍然是
65H。
- 观察暂存器B的显示 ,它的值现在应该变成了
第一步完成
当您完成以上所有操作后,第一步就成功了。此时的状态应该是:
- 暂存器A =
65H - 暂存器B =
A7H
现在,我们已经为第二步的加法运算做好了准备。您可以随时告诉我继续进行第二步。
好的,第一步顺利完成!现在我们的状态是:
- 暂存器A =
65H - 暂存器B =
A7H
第二步:A + B → A
这个指令的意思是:让ALU(算术逻辑单元)计算 A 和 B 的和,然后把结果再存放回暂存器A里面。
请按照下面的步骤进行操作:
第2.1步 设置ALU的运算功能
- 首先,我们需要告诉ALU要做"加法"运算。
- 请查阅PPT中的**"运算功能表"**(实验二的第7页)。
- 在表中找到功能为
F=A加B的那一行,它对应的功能选择码是S3 S2 S1 S0 = 1001。 - 请在实验台的CON单元 找到对应的
S3, S2, S1, S0控制开关,并将它们设置为1001。
第2.2步 设置数据的流向(数据通路)
- ALU的输出: 运算结果需要从ALU出来,放到总线(BUS)上。这个操作的控制信号是
ALU_B = 0。 - 暂存器A的输入: 暂存器A需要准备好,从总线(BUS)上接收这个结果。这个操作的控制信号是
LDA = 1。 - 请在实验台上找到
ALU_B和LDA的控制开关,并分别将它们设置为0和1。
总结一下,在执行前,您需要确保以下控制信号设置正确:
S3 S2 S1 S0=1001ALU_B=0LDA=1- (其他不相关的控制信号如
LDB,RD,WR等都应处于非激活状态,通常是0)。
第2.3步 执行单步操作
- 确认以上所有设置都无误后,请按一下单步执行键("ST"键)。
第2.4步 观察并记录结果
按下"ST"键后,加法操作就完成了。现在请观察实验台上的显示灯,验证结果:
-
理论计算:
65H + A7H = 10CH -
在8位系统中,这意味着:
- 存入暂存器A的结果是低8位,即
0CH。 - 运算产生了一个进位(最高位的
1),所以进位标志 FC 会被置1。 - 结果
0CH不是0,所以零标志 FZ 为0。
- 存入暂存器A的结果是低8位,即
-
您应该在实验台上观察到:
- 暂存器A 的显示值变为
0C。 - FC (进位标志) 的状态灯 亮起 (表示
FC=1)。 - FZ (零标志) 的状态灯 熄灭 (表示
FZ=0)。
- 暂存器A 的显示值变为
请根据实验要求,将这两个标志位的结果 FC=1, FZ=0 记录下来。
第三步:A → MEM[10H]
这一步的目标是,将我们刚刚在第二步计算出来的、存放在暂存器A 中的结果 0CH ,写入到内存地址为 10H 的单元中。
这是一个经典的"内存写入"操作。由于我们的实验系统一次只能做一件事(比如送地址或送数据),所以这个任务需要分解为两个微操作步骤来完成。
第3.1步:把地址 10H 送入地址寄存器(AR)
首先,我们必须告诉存储器我们要操作的地址是哪一个。
-
设置地址源:
- 在实验系统的输入单元(IN单元) ,请将数据开关设置为
10H。
- 在实验系统的输入单元(IN单元) ,请将数据开关设置为
-
设置控制信号(送地址):
- 我们需要让输入单元的
10H放到总线上。控制信号是:RD=1,IOM=1。 - 同时,我们需要让**地址寄存器(AR)**接收总线上的地址。这个控制信号是
LDAR=1。
- 我们需要让输入单元的
-
执行:
- 确认上述设置无误后,按一下单步执行键("ST"键)。
-
验证(可选):
- 操作完成后,您可以观察一下实验台上地址寄存器(AR)的显示 ,它现在应该显示为
10H。这确认了地址已经成功送达。
- 操作完成后,您可以观察一下实验台上地址寄存器(AR)的显示 ,它现在应该显示为
第3.2步:把暂存器A的数据 0CH 写入内存
现在地址已经指定好了,我们可以把数据写入这个地址了。
-
设置数据源(让A的数据上总线):
- 我们需要把暂存器A里的
0CH送到总线上。我们通过ALU的**"直通"**功能来实现。 - 查阅"运算功能表",功能
F=A(直通)对应的控制码是S3 S2 S1 S0 = 0000。请将CON单元的功能开关设为0000。 - 要让ALU的输出上总线,需要设置
ALU_B = 0。
- 我们需要把暂存器A里的
-
设置控制信号(写内存命令):
- 查阅PPT第8页的表格,执行
BUS → MEM[AR](总线内容送存储单元)操作,需要的控制信号是:WR=1,RD=0,IOM=0。 - 特别注意: 这里的
IOM必须是0,因为我们这次操作的是存储器(MEM),而不是输入输出设备(I/O)。
- 查阅PPT第8页的表格,执行
-
执行:
- 确认上述所有控制信号(S=0000, ALU_B=0, WR=1, RD=0, IOM=0)都设置正确后,再次按一下单步执行键("ST"键)。
第三步完成与最终验证
操作完成后,数据 0CH 就应该已经被成功写入到内存地址 10H 中了。现在是验证的关键时刻:
- 在实验系统的存储器查看 区域,输入您想查看的地址
10H。 - 观察该地址对应的数据显示。
MEM[10H] 的显示值已经从之前的旧数据(比如您看到的60H)变成了 0CH!
第四步:A → OUT
这一步非常直接,目标是将暂存器A 中存放的内容(也就是我们算出来的 0CH ),发送到 OUT(输出)单元进行显示。这通常会点亮一组LED灯来表示这个数值。
这是一个单次的数据传输操作,我们可以在一个单步周期内完成。
操作步骤
-
设置数据源(让A的数据上总线):
- 和上一步的3.2节一样,我们需要将暂存器A中的
0CH送到总线上。 - 我们将再次使用ALU的**"直通"**功能。请将CON单元的ALU功能选择开关设置为
S3 S2 S1 S0 = 0000(代表F=A)。 - 同时,为了让ALU的输出能到达总线,请设置
ALU_B = 0。
- 和上一步的3.2节一样,我们需要将暂存器A中的
-
设置数据目的地(向OUT单元写入):
- 现在我们的数据
0CH已经在总线上了,我们需要命令OUT单元来接收它。 - 请查阅PPT第8页的"外设、存储器读写控制"表。
- 找到
BUS → OUT(总线内容送输出单元)这一行,它需要的控制信号是:WR=1,RD=0,IOM=1。 - 关键点: 这里的
IOM=1非常重要,它告诉系统我们正在和I/O设备(输入/输出单元)通信,而不是和存储器(MEM)通信。
- 现在我们的数据
总结与执行
在执行之前,请您确认在实验台上设置了以下所有控制信号:
- 功能选择:
S3 S2 S1 S0=0000 - ALU输出使能:
ALU_B=0 - I/O设备写命令:
WR=1,RD=0,IOM=1
设置无误后,按一下单步执行键("ST"键)。
验证结果
操作完成后,请观察实验台上的 OUT单元(通常是一排LED灯)。
- 它的显示值现在应该变成了
0CH。
同时,这个操作不会改变暂存器A的内容,所以A的显示应该仍然是0CH。
第五步:B → MEM[11H]
这一步的目标和第三步非常相似,但有两个关键不同:
- 数据来源: 这次的数据来自暂存器B (里面的值应该是
A7H)。 - 目标地址: 我们要写入的内存地址是
11H。
和第三步一样,这个操作也需要分解为两个微操作步骤来完成:先送地址,再送数据。
第5.1步:把地址 11H 送入地址寄存器(AR)
我们首先要指定写入操作的目标地址。
-
设置地址源:
- 在实验系统的输入单元(IN单元) ,请将数据开关设置为
11H。
- 在实验系统的输入单元(IN单元) ,请将数据开关设置为
-
设置控制信号(送地址):
- 让输入单元的数据上总线:
RD=1,IOM=1。 - 让地址寄存器(AR)接收总线上的地址:
LDAR=1。
- 让输入单元的数据上总线:
-
执行:
- 确认设置无误后,按一下单步执行键("ST"键)。
- 操作完成后,地址寄存器AR的内容就变成了
11H。
第5.2步:把暂存器B的数据 A7H 写入内存
现在地址已经就位,我们可以把暂存器B的数据写入了。
-
设置数据源(让B的数据上总线):
- 我们需要把暂存器B里的
A7H送到总线上。这次我们使用ALU的 B通道"直通" 功能。 - 查阅"运算功能表",功能
F=B(直通)对应的控制码是S3 S2 S1 S0 = 0001。请将CON单元的功能开关设为0001。 - 要让ALU的输出上总线,需要设置
ALU_B = 0。
- 我们需要把暂存器B里的
-
设置控制信号(写内存命令):
- 这个命令和第三步完全一样。执行
BUS → MEM[AR]操作,需要的控制信号是:WR=1,RD=0,IOM=0。 - (再次提醒,
IOM=0表示我们正在操作的是存储器)。
- 这个命令和第三步完全一样。执行
-
执行:
- 确认上述所有控制信号(S=0001, ALU_B=0, WR=1, RD=0, IOM=0)都设置正确后,再次按一下单步执行键("ST"键)。
第五步完成与验证
操作完成后,暂存器B的内容 A7H 就应该被成功写入到内存地址 11H 中了。
请进行验证:
- 在实验系统的存储器查看 区域,输入您想查看的地址
11H。 - 观察该地址对应的数据显示。
您应该会看到,MEM[11H] 的显示值现在是 A7H!
同时,您可以再检查一下地址 10H,它的值应该仍然是 0CH,没有受到影响。
第六步 MEM[11H] - 1 → B
这一步的指令非常关键,它包含了读-修改-写的完整流程:
- 读 (Read): 从内存地址
11H读取数据(这个数据应该是我们上一步存入的A7H)。 - 修改 (Modify): 对这个数据执行减1 (
-1) 操作。 - 写 (Write): 将计算后的新结果存入暂存器B。
这个复杂操作无法在一个单步周期内完成,我们需要将其分解为三个微操作步骤。
第6.1步:指定要读取的内存地址
和之前一样,第一件事总是先确定地址。
- 设置地址源: 在输入单元(IN单元) ,将数据开关设置为
11H。 - 设置控制信号:
RD=1,IOM=1,LDAR=1。 - 执行: 按一下单步执行键("ST"键) 。
- 结果: 地址寄存器AR的内容变为
11H。
- 结果: 地址寄存器AR的内容变为
第6.2步:从内存读取数据到ALU的输入端
现在地址已经指定,我们要把 MEM[11H] 的内容 (A7H) 读出来,并送到ALU准备进行运算。最直接的方式是先把它存入暂存器A。
-
设置数据源(读内存):
- 查阅控制信号表,
MEM[AR] → BUS的命令是:RD=1,WR=0,IOM=0。
- 查阅控制信号表,
-
设置数据目的地(写入暂存器A):
- 为了让暂存器A接收总线上的数据,设置
LDA=1。
- 为了让暂存器A接收总线上的数据,设置
-
执行:
- 确认上述控制信号(RD=1, WR=0, IOM=0, LDA=1)设置正确后,再次按一下单步执行键("ST"键)。
-
中间验证:
- 操作完成后,请观察暂存器A的显示 ,它的值现在应该变成了
A7H。这说明我们成功地把内存里的数据取出来了。
- 操作完成后,请观察暂存器A的显示 ,它的值现在应该变成了
第6.3步:执行减1运算,并将结果存入暂存器B
现在,A7H 已经位于暂存器A中,我们可以让ALU对它进行减1操作了。
-
设置ALU功能(A-1):
- 查阅"运算功能表",功能
F=A减1对应的控制码是S3 S2 S1 S0 = 1100。请将CON单元的功能开关设为1100。
- 查阅"运算功能表",功能
-
设置数据通路(结果送入B):
- 让ALU的运算结果上总线:
ALU_B = 0。 - 让暂存器B 接收总线上的结果:
LDB=1。(请务必确保此时LDA=0,否则A的值也会被覆盖)。
- 让ALU的运算结果上总线:
-
执行:
- 确认上述所有控制信号(S=1100, ALU_B=0, LDB=1)都设置正确后,再次按一下单步执行键("ST"键)。
第六步完成与最终验证
操作完成后,整个实验就结束了!现在是检验最后一步成果的时候。
- 理论计算:
A7H - 1 = A6H - 请观察实验台:
- 暂存器B 的显示值现在应该变成了
A6H。 - 暂存器A 的值应该没变 ,仍然是
A7H。 - MEM[11H] 的值也应该没变 ,仍然是
A7H(因为我们只对它进行了读取,没有写入)。
- 暂存器B 的显示值现在应该变成了
如果暂存器B的显示为A6H,那么恭喜您,已经成功完成了整个总线传输综合实验的所有步骤!