day05 设计计算机硬件

本文介绍了在嵌入式系统中如何添加立即数和B寄存器以增强计算能力。通过电路改造、控制器更新,实现了立即数功能,并增加了B寄存器以支持多变量运算。还探讨了计算机汇编语言的设计,包括指令集和测试,并设计了简单的引导程序流程。
摘要由CSDN通过智能技术生成

嵌入式学习-04_嵌入式技术之从零搭建计算机

1 添加立即数

现有系统的数据RAM存储方式(操作码+操作数)。

地址 指令 opcode(操作码) addr(操作数) 新代码 /数据
000 ld_a 0b00001 0b100 0b0000100000000100
001 add 0b00010 0b101 0b0001000000000101
010 sub 0b00011 0b110 0b0001100000000110
011 str 0b00110 0b111 0b0011000000000111
100 0b0000000000010011
101 0b0000000001000101
110 0b0000000000011011
111

现有我们的RAM中,操作数指的是数据RAM的地址。也就是在执行指令的过程中,需要操作数指定的地址到RAM中读取数据运算所需要的数据。这个数据获取的过程是间接的。

我们希望增加一个直接获取运算的数据的方式,也就是说操作数不是数据ROM的地址,而是表示具体的要参与运算的数据。这样的操作数称为立即数。我们举例说明:比如我们要计算19+69-27。

地址 指令 opcode(操作码) addr(操作数) 新代码 /数据
000 ld_a 0b00001 0b00000010011(19) 0b0000100000010011
001 add 0b00010 0b00001000101(69) 0b0001000001000101
010 sub 0b00011 0b00000011011(27) 0b0001100000011011
011 str 0b00110 0b00000000011(3) 0b0011000000000011

以上就是操作码+立即数的方式。

1.1 增加立即数后的指令

opname opcode 操作
halt 00000 停止时钟
ld_a 00001 将数据RAM的数据载入寄存器A
add 00010 数据RAM的数据+寄存器A再存入寄存器A
sub 00011 寄存器A-数据RAM再存入寄存器A
or 00100 寄存器A||数据RAM再存入寄存器A
and 00101 寄存器A&&数据RAM再存入寄存器A
str 00110 将寄存器A中数据存入数据RAM
jmp 00111 无条件跳转到指定地址
je 01000 比较相等时跳转到指定地址
ld_ia 01001 将立即数存入寄存器A
add_ia 01010 将立即数+寄存器A中的数再存到寄存器A
sub_ia 01011 寄存器A-立即数再存到寄存器A
or_ia 01100 寄存器A||立即数再存到寄存器A
and_ia 01101 寄存器A&&立即数再存到寄存器A

1.2 电路改造

立即数就是将操作码当做数直接进入ALU计算,我们的操作码addr原来表示的是RAM的地址,位数是11。因此,头部补5位的0,就凑成了11位的Din,作为ALU的B信号的输入了。

在这里插入图片描述

将指令寄存器输出的11bit地址补全到16位接入地址总线。通过en_i信号控制。

整体电路如下图:

在这里插入图片描述

1.3 控制器改造

1)增加en_i控制信号

在这里插入图片描述

2)修改控制器查找表

在这里插入图片描述

1.4 测试立即数功能

我们要计算19&#

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

路x飞

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

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

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

打赏作者

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

抵扣说明:

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

余额充值