从 CPU 开始运算到计算机显示,发生了什么?
CPU 只能进行数值运算,那么计算机是怎么显示出字符的,怎么进行编译的,原理是怎样的?
小白求指点!
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
CPU 只能进行数值运算,那么计算机是怎么显示出字符的,怎么进行编译的,原理是怎样的?
小白求指点!
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
接受
或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
发布评论
评论(4)
为什么这么多人踩这个问题呢?没有不好的问题,只有不好的答案。踩这个问题的,我只能姑且认为你没有好的答案。
错。
CPU(中央处理器)主要由控制器和运算器。
运算器包括算术逻辑单元(ALU)、累加器、寄存器、路径转换器等。
至于你提到的数值运算,只是其中的一小部分,而且是很重要的部分。
因为计算机最初的数值运算只能进行位运算:即与、或、非。而运算的结果放在寄存器。
比如加法运算,在电路上是这样的:
A B 为 0 或者 1。对应的是电压的高低。
后来,由于这部分功能是经常用到的,于是就把这些东西也集成为了专有芯片:加法运算器。
在 PC 上,就直接集成到了 CPU 里面了。
CPU 的每次运算包括:提取、解码、执行和写回。
这里面涉及到的寻址,指令……我就不解释了,你看看相关的书籍。而执行阶段,不仅仅是算数运算,逻辑运算,还包括其它的。
在电子计算机发明以前,机器就已经可以显示字符了。可以百科一下约翰内斯·古登堡。
如果你知道早期计算机的历史,你也就知道为什么很多语言的输出不是用
output
函数,而是用print
函数了。因为早期计算机只能打印机,没有显示器。前面已经讨论了数值计算。现在插播广告,如果想了解更多可以去我博客看看:代码之谜系列。
计算机的组成,除了 CPU 还有几个主要部件:存储器、输入/输出。
现在我们构建一个最简单的显示器。
这个显示器是黑白的,显示器的分辨率是8*8(确实很简陋)。在显示器上,布满了64个小灯。(插播因特尔广告:灯,灯灯灯灯)
这些灯,灯灯灯灯,有一个特点,就是电压低了,则暗或者灭,电压高了,则显示。
灯的正极都连接到了一个电源上,而负极,都连接着一根线,一共64根线。
效果图(来自百度百科,密集恐惧症者勿看)
如果让灯都灭掉,则引脚上的电压都是低压,于是我们都给他们发送
0
这个本来应该是正方形的,凑合看吧。
这个显示器也是一个芯片。
如果我们想显示数字 1,则我们发送
有点糙,凑合看吧。
对应的十六进制是
1C
,十进制28
。因此,我们想显示1,则只需要把长整形的无符号数28,发送到显示器芯片的地址。
现在问题来了,我想显示1,却发送的是28。如果显示器的分辨率更大,我们需要发送另一个数字。也就是说,对于不同型号,不同分辨率的显示器,我们的操作确实不一样的。这样显然是违反三个代表的主体思想的,也不利于构建和谐社会。
于是,标准开始制定,ANSII,UNICODE……
只要,1 的内部代码就确定了,十六进制的 31,十进制的 49。
而上面提到的
28
对应的是1
,则为字形表。当我们想显示 1 的时候,只需要把 1 的 ascii 码发送给显示器(我这么写是为了简化流程,其实是发送给了负责处理显示功能的API),就可以了。
如果想了解更多的显示细节,这已经不是CPU的工作了,而是 GPU。
我的github地址:https://github.com/justjavac
显示的字符是经过一系列转换的,计算机只能识别二进制是因为晶体管的接通和截断两种信号,刚好符合二进制的0和1,但是人能是别的数字是十进制所以需要转换为十进制,字符类的是十六进制,
答案已忽略以常见的
1366 * 768
分辨率举例,有1366 * 768 = 1049088
个像素点,假设每个像素点有256
个色,那么就需要能区分1049088 * 256
个不同状态,这个状态可以用一个值去表示,这个值传输给显示设备,显示设备就能显示出对应的图像。