分享

编码隐匿在计算机软硬件背后的语言读后记录(以下为一个16个按键的键盘电路图4位的计数器在按键对应的16个编码间快速且重复地循环)

 山峰云绕 2022-02-11

https://m.toutiao.com/is/LpXj9bg/?=编码 

(以下为一个16个按键的键盘电路图4位的计数器在按键对应的16个编码间快速且重复地循环)


通过对《编码:隐匿在计算机软硬件背后的语言》一书的阅读,我大致了解计算机是怎么运行以及进行计算的。

半导体

对于计算机来说最重要的元件就是晶体管,又称为三极管,一般的原材料是硅。通过与某些杂质组合,可组成N型半导体和P型半导体。通过把一个P型半导体夹在两个N型半导体之间就是著名的NPN晶体管,其三部分分别为集电极(collector)、基极(base),以及发射极(emitter)。

在基极施加微小的电压就可以控制非常大的电压从集电极到发射极。如果在基极没有施加电压,那么晶体管将成为绝缘体。晶体管除了可以做开关也可放大信号。

通过半导体的上述特性就可以组成处理器的基本电路逻辑门。

不过书中是使用继电器来描述的。

逻辑门

继电器

继电器就是通电后,通过导线绕金属组成的磁铁,将电转换成磁,来控制开关。逻辑门就是通过继电器的组合来进行逻辑计算。对逻辑门进行判断时,一定要紧盯逻辑门的逻辑关系和输入,而不要去管逻辑门之间是否有通电的问题。特别是在理解触发器为什么能保存数据的时候。

电气符号

逻辑:输入什么就输出什么。

与门

电气符号

与门逻辑:只有输入都是1时,输出才是1,其他时候都为0。

或门

电气符号

或门逻辑:当输入有1时,输出就是1。

非门

电气符号

非门逻辑:入1出0,入0出1。

或非门

电气符号

或非门逻辑:只有当输入都为0时,输出1。

与非门

电气符号

与非门逻辑:只有当输入全为1的时候输出才为0。

异或门

电气符号

异或门逻辑:当输入的两端数据不同时,输出为1

计算机的所有计算都是通过各种逻辑门相互组合的电路来完成。

处理器基本构成

基本元件有加法器、振荡器、触发器、译码器、选择器以及输入输出装置。

加法器

对于计算机来说最基本的运算就是加减法。

因为加法会出现进位所以需要进位输出,当进行多位加法运算时,进位输出需要连接到高一位加法电路的进位输入上。所以以上电路无法正确显示结果,被称为半加器,需要两个半加器和一个或门组成全加器,才是加法的基础电路。

注:一个全加器只能算一位,需要前一个全加器的进位输出与后一个进位输入相邻,才能组成多位加法器。最低位全加器的进位输入接地。

减法的计算思路

先求减数对相同位数的9的补数(补数:例如99-12=87,则87是12对9的补数,减数有几位,那被减数的9就有几位),补数与被减数相加,得数再加1,最后将得数减去最高位为1其他位为0的数。所以减法就是求补器与加法器组合组成的电路。

与加法器结合电路

通过SUB开关来控制上述电路是做加法还是减法。同时依靠上溢/下溢,在加法时控制结果是否大于计算器的最大位数。不过上述电路可以实现减法计算,但无法表示负数。

振荡器

用通俗的话将就是可以产生固定频率的高低起伏电压的电路。

用我百度后的术语即可产生交变电压,一般由晶振和振荡电路组成。

下图是电路

电气符号

触发器

可以保存电路状态的电路。下图为触发器初始状态

上一个开关可控制灯泡的亮暗,下一个可将电路恢复成初始状态。

符号化后就是下图电路,下图为初始状态

保持位开启时,数据端的输入就可以改变Q的输出。保持位关闭时,数据端的输入无法改变Q的输出。

W:保持位

通过添加一个或门就可以设置一个清零功能。无论其他信号是什么,清零信号总是强制使Q输出为0,以达到使触发器清零的目的。使用Clr代表。

以上就是边沿触发的D型触发器,常用的触发器电路。可实现数据输入时的实时显示,以便检查正确后使用时钟保存。上图为初始状态。

电气符号

通过与振荡器的连接可以实现行波计数器和降频功能

下图为带预置和清零功能的边沿型D触发器。预置和清零信号输入会覆盖时钟和数据端输入,且两个输入都为0,当预置信号为1时,Q变为1,$\overline{Q}$变为0。当清零信号为1,Q变为0,$\overline{Q}$变为1,预置和清零信号不能同时为1。除此之外,该触发器工作原理是和普通边沿D触发器是一样的。

电气符号

Pre:预置

Clr:清零

Clk:时钟

D:输入

译码器和选择器

通过地址,可以控制数据输出。

选择器

在一行开关和一个锁存器的输出之间选择一个输出。

通过选择输入的控制可以选择D~0~ \~D~7~ 中的一个输出。

译码器

把开关以一定方式进行连接使其具有选择功能,将输入的数据完整输出到指定的锁存器。

最后通过组合就可以组成RAM,即内存

写操作端就是保持位,上图电路可保存8个比特的信息,一个比特为一组。

RAM阵列的存储容量 = 2^地址输入端的个数^

制作计算电路概念

RAM地址中的内容需要加到称为累加器的8位锁存器中才可以进行计算。

存储器中的每一个字节的地址仍然是以0000h为起点线性排列的。最初的加法器只是简单地把存储器指定地址的内容和累加器中的内容相加。

需要使用额外的空间输入数字代码指令。这种方式使用的数字代码常常被称为指令码(instruction code)或操作码(operation code)。它们指示电路要执行的某种操作。

上图就是简单可实现加减法的电路。通过选择器和C~0~来接收代码,从而控制电路运行。这些控制信号可以通过逻辑门的各种组合来实现。对逻辑门的各种组合,在我的理解下就是硬件的编程。

可以通过 代码+寄存器编号+数据地址 消耗3个字节进行编程,以提高程序阅读性。在代码内存中的代码像下面一样进行保存。

机器码就是这样的一个编程思路

在早期字母还没编码时,上图的代码都需要先在纸上编号并手工翻译成01的代码再输入计算机,因为最后计算机还是依靠开关控制电路,来实现功能。同时指令代码需要有特定的电路支持才能实现功能,而这个就是通常说的指令集。而指令集就是微处理器兼容性问题主要来源。

存储

为了存储完整的字节,而连接在一起的芯片的集合,称为存储体(bank)。例如,一个4 KB大小的存储器板就由4个存储体组成,而每个存储体又包含8个芯片。8位微处理器,有16位地址,可用来寻址64 KB 的存储空间。如果你制作了一个包含4个存储体、大小为4 KB的存储器板,则存储器板上的16位地址信号就有如下所示的功能。

微处理器整个存储空间的大小是64 KB,被划分成16个不同的区域,每个区域的大小是4 KB,我们设计的4KB存储器板占用了其中一个区域。这16个区域划分情况如下。

举例说明,假定4 KB存储器板使用了A000h~AFFFh地址区域。这就意味着,第一个存储体占用了地址A000h~A3FFh,第二个占用了地址A400h~A700h,第三个占用了地址A800h~ABFFh,剩下的AC00h~AFFFh地址空间分给了第四个存储体。电路如下:

显示器

阴极射线管(cathode-ray tube,CRT)——20世纪上半个世纪,在家庭中常见的物件。屏幕上的二维图像是由一束连续的光束射线迅速扫描屏幕而形成的。射线从屏幕左上角开始,从左到右进行扫描,到达屏幕边缘后又折回向左,进行第二行扫描。每一个水平行为扫描行(scan line),射线回到每个扫描行的开始位置称为水平回归(horizontal retrace)。当完成了对最后一行的扫描时,射线不会停下来,它会从屏幕的右下角返回到屏幕的左上角(垂直回归,vertical retrace),并重复上一过程。图像显示也是电路控制,而现在这个电路控制叫显卡以及显卡驱动。

颜色数 = 2^每个像素所赋予的比特数^

如果视频适配卡(即显卡)配备的存储器容量有限,那么最大色深或色彩分辨率就会受到约束。假设有一个配备了1 MB存储器的视频适配卡,在每个像素被赋予3个字节的情况下分辨率可以达到640×480。如果想把分辨率提高到800×600,存储器就不足以为每个像素赋予3个字节,必须缩减到用2个字节来表示一个像素。

要把现实世界的图像输入到计算机中,可以借助一些不同的硬件,这类设备一般统称为电荷耦合器(charge-coupled device,CCD),它是一种在光照下会起电的半导体器件,实际应用就是扫描仪。

键盘

键盘和CRT一起对远程计算机传输来的ASCII码做出响应,这种设备我们称之为哑终端(dumb terminal)。

以下为一个16个按键的键盘电路图,4位的计数器在按键对应的16个编码间快速且重复地循环着,循环的速度必须足够快,以保证在按下并松开一个按键之前循环已经结束。

键盘除了输出按键状态,还会输出中断信号,即中断当前微处理器正进行的工作。

矢量图形

利用直线、曲线及填充区域生成图形。这也正是计算机辅助设计(Computer-AssistedDrawing,CAD)所应用的领域。矢量图形在工程和体系结构设计中有着十分重要的作用。

光栅图形

也称做位图,位图(bitmap)将图像以矩阵阵列的形式进行编码,阵列中的一个单位对应着输出设备上的一个像素点。尽管位图从表现形式上看是二维的,但其本身的存储形式却是一串连续的字节。

著名芯片解析

英特尔8080是一个8位的微处理器,它包括6000个晶体管,运行的时钟频率为2 MHz,寻址空间为64 KB。

管脚20必须接到5V的电压;管脚11需要接到-5V的电压;管脚28需接12V的电压;管脚2接地。需要两个不同的同步时钟输入,它们的频率都是2 MHz,分别标记为$\phi$~1~和\phi2,位于管脚22和15上。16个用于寻址的输出信号,标记为A0~A15,因此它的可寻址空间大小为216,即65,536字节。D0~D7的8个信号既可以用做输入也可以用做输出。其余10个管脚是控制信号。

当你按下键盘的某个键时,处理器应该马上注意到这个事件。这个过程由一个称为中断(interrupt),这是一个由外围设备产生的信号,连接至8080的INT输入端。

操作系统

许多软件构成的庞大程序集合。

操作系统启动过程:需要用只读存储器(ROM)来存放一小段称为引导程序(bootstrap loader,操作系统的其余部分可以通这段代码的自举操作被高效地引导)的代码即可。开机启动时,磁盘上最开始的128字节的扇区内容,会首先由引导程序加载到内存并运行,这个扇区包含有特定的代码,可以把操作系统中的其余部分加载到内存中,整个过程称为操作系统的引导(booting)。

操作系统的引导过程完成后,随机存储器(RAM)的最高地址区域用来存放操作系统,加载完操作系统后,整个内存空间的组织结构如下所示。

为了让程序能够方便地访问计算机的硬件,操作系统提供的这种访问操作称为API(ApplicationProgramming Interface),即应用程序接口。

编程语言

每个机器码字节所能完成的工作,是能想象到的最微小且最简单的工作——从内存获取一个数,之后加载到处理器,再把它与另一个数相加,最终将运算结果保存到内存等。

汇编器:拥有一张包括所有可能助记符及其参数的表,通过逐行读取汇编语言程序,把每一行都分解成为助记符和参数,然后把这些短小的单词和字符与表中的内容匹配。通过这种匹配的过程,每一个语句都会找到与其对应的机器码指令。随后执行,相当于减去了手工翻译成01的过程。

汇编优点就是运行速度快,但在编程时不得不考虑每一个微小的细节,以及不可多平台兼容使用。

因为它与计算机硬件的关系相当紧密,所以汇编语言称做低级语言。

高级语言就是通过不同方式的翻译,将计算机硬件语言更加贴近人类语言习惯。而起到翻译功能的就是编译器。

编译器优点就是在于它比汇编语言易于学习并且更容易编写程序,用高级语言编写的程序通常更加清晰简明,但实现过程要比汇编器更加复杂。

总结

通过读这本书,我大致理解了以前一直想不明白的一个问题。

软件是怎么控制硬件的?

软件编程后,通过各自语言的编译器,翻译成0和1的机器码,最后通过提前设计好的电路运行。而这些参数数据在一开始就被系统翻译并保存在RAM中。

对于电脑来说所有字母符号文字都没有意义,只有有没有电流通过对电脑才是有意义的。

所以通过读这本书,我更加理解了一句话,电脑就是一台拥有大量开关以此控制灯泡的机器

    本站是提供个人知识管理的网络存储空间,所有内容均由用户发布,不代表本站观点。请注意甄别内容中的联系方式、诱导购买等信息,谨防诈骗。如发现有害或侵权内容,请点击一键举报。
    转藏 分享 献花(0

    0条评论

    发表

    请遵守用户 评论公约

    类似文章 更多