“学习如春起之苗,不见其增,日有所长。” —— 宋代朱熹
文章目录
- 十六进制
- 十六进制概述
- 十六进制表
- 字节到十六进制
- 存储器
- 特定的读功能
- 特定的写功能
- RAM
- 大型RAM阵列
十六进制
十六进制概述
十六进制是一种适用于计算机的进制法。在十进制中,前一位的权重是后一位的十倍,例如288的值是:
288=2* 102+8* 101+8*100
而在十六进制中,前一位的权重是后一位的十六倍。如果要指明这个数是16进制的,可以在后面加h,例如288h表示十六进制的288(初学者可能会弄不明白这里,这里的h仅仅代表这个数是16进制,而不占位)。288h的值是:
288h=2* 162+8* 161+8*160=648(十进制)
十六进制表
字节到十六进制
一个字节是八个二进制位,将一个字节四四分开分别转换成十六进制,就完成了到字节表示的八位二进制数到十六进制的转换。举例说明:
- 将11011001转换为十六进制。
- 四四分开这个字节。
- 分别计算左右的十六进制值。
- 合并左右的结果,得到最后的结果是B9.
可以验证,等式两边的结果都是185.
总结:对于进制转换来说,只要搞清楚十六进制中每一位权重相差十六倍,十进制、二进制都相似。对于十进制直接参与的进制转换来讲,例如从二进制转换成十进制,则只要除或乘对应的权重就可以;如果不是十进制直接参与的进制转换,例如从二进制转换为十六进制,那么一般以十进制为桥梁进行转换。
存储器
在之前的八位锁存器中,我们已经实现了数据存储的核心功能,但一个完整的存储器还需要特定的读写功能。
我们先回顾一下8位锁存器的结构,也就是8个1位锁存器:
很显然,在输入端,我们需要实现对特定锁存器的写功能,在输出端则需要实现对特定锁存器的读功能。
特定的读功能
我们先实现相对简单的读功能。读功能是通过8-1选择器来实现的。下面是这个选择器的电路:
左下角使用三个开关对8个门进行选择,使用了三个二进制位能组成8个不同数的原理。三个控制端和一个数据端连接到与门,在与门中只要三个控制端输入中有一个为0,则输出结果一定为0,因此最后的数据输出只和控制端全1的那个与门所接收的数据端有关。举个例子:
- 如果输入端分别为010,则八个与门处的控制端输入分别是101,001,111,011,100,000,110,010;不难看出,只有D2与门的输出端结果取决于数据端,其余的输出都一定为0.
- 这八个与门的输出连接到最右端的或门,由于其他七个与门输出都为0,因此输出端的结果取决于D2与门的输出结果,也就是取决于数据端D2。
如果没看懂这段电路,可以自己再举个例子按这个步骤走一遍。
特定的写功能
写功能要实现将一个数据输入特定锁存器的功能。因此输入只能有一个开关。这个很好解决,用一个开关连接八个输入即可。选择特定输入的功能也可以用上文的电路。这样构建出的电路称为3-8解码器,电路图如下:
这个电路的思路和上文基本一样,就不用例子解释了。
RAM
我们最终得到的电路如下:
这个电路可以实现对特定位置的读写(寻址)及存储。它被称为随机访问存储器(RAM)。符号表示如下:
三个开关在这里表示为地址。
大型RAM阵列
8位RAM之间可以用两种方式进行连接。
- 两个RAM共享地址。
这样连接能做到存储八个数,每个数的位宽是2位,相当于是一个8x2的RAM。 - 在上述基础上加入1-2译码器和2-1选择器,一次只能输入到两个寄存器中一个的一位上,构建了一个16x1RAM的效果。
这里最右边的选择端实际上是第四个地址。因此4个地址可以标注16个数。(这里的数位宽不固定,因为可以利用第一个电路扩展位宽)。
上述两个电路一个可以增加存储的数的个数,一个可以扩展所存储数的位宽限制。因此我们可以构建如下的大型RAM阵列:
这个RAM阵列存储8KB.
我是霜_哀,在算法之路上努力前行的一位萌新,感谢你的阅读!如果觉得好的话,可以关注一下,我会在将来带来更多更全面的知识讲解!