21 - 寄存器控制器

---- 整理自B站UP主 踌躇月光 的视频

1. 程序计数器 PC 改造

  • 原来的 PC

请添加图片描述

  • 由于后续的 ALU 会较频繁的变动,因而会经常修改 PC,所以将 PC 中的 ALU 换成 8 位加法器。改造后的 PC:

请添加图片描述
请添加图片描述

2. 寄存器控制器的实现

我们控制器主要通过 ROM 实现,ROM 最多支持输出 32 位,也就是最多可以控制 32 个端,但我们有时需要两位来控制一个寄存器,寄存器的数量比较多,32 位肯定不够用。

2.1 准备

我们分别用 5 位来控制寄存器的读和写。

在这里插入图片描述

2.1.1 532译码器

用 ROM 实现 5 到 32 位的译码器。一根总线,我们同时只能有一个读或者一个写。避免同一个寄存器既读又写。

请添加图片描述
在这里插入图片描述

import os

dirname = os.path.dirname(__file__)
filename = os.path.join(dirname, '532decoder.bin')

with open(filename, 'wb') as file:
    for var in range(32):
        value = 1 << var
        result = value.to_bytes(4, byteorder='little')
        file.write(result)

# 0  - 0000 0000 0000 0000 0000 0000 0000 0001
# 1  - 0000 0000 0000 0000 0000 0000 0000 0010
# ...
# 31 - 1000 0000 0000 0000 0000 0000 0000 0000

2.1.2 32 位异或

请添加图片描述

2.2 实现

在这里插入图片描述

寄存器说明:
PC 程序计数器
ALU
PSW/FLAG 程序状态字
A 寄存器
B 寄存器
C 寄存器
D 寄存器
IR 指令寄存器
DST 目的操作数寄存器
SRC 目的操作数寄存器
MSR 存储器段寄存器
MAR 存储器地址寄存器
MDR 存储器数据寄存器
MC 内存寄存器
SP 堆栈指针寄存器
BP 基址寄存器
SI 源变址寄存器
DI 目的变址寄存器
CS 代码段寄存器
DS 数据段寄存器
SS 堆栈段寄存器
ES 附加段寄存器
T1 临时寄存器
T2 临时寄存器

请添加图片描述

2.3 简单测试

请添加图片描述

2.4 实验结果举例说明

在这里插入图片描述

2.5 实验工程

【21 - 寄存器控制器】

  • 5
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

uuxiang

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值