整本书读下来,给我的感觉是,这本书1-11章适合没有编程经验的存小白看,12-17章非常的经典,编程初学的人及有一定经验的人很适合看,18章到末尾是概况性的东西,属于普遍的知识。
第1章,使用手电筒的开和关模拟摩尔斯电码。
第2章,使用手电筒的开和关的次数得出相应的码数,且个数是2的次方。(存在开和关2种,当使用开或者关时可以存在2种情况)。
3,使用多个开和关时,可以在前方加入特定的符号,用于将后面的码转化一种意思,又称为转义码。
4,剖析手电筒构成:电源,电线,灯泡。为什么会发光?因为电可以产生热,热可以让乌丝达到燃点,灯泡为真空,所以乌丝会发光。
5,只要电压够大,就可以将大地作为导线,但是金属线有极限,因为线越长电阻越大。
6,继电器,当有电时,可以使螺旋的导线产生磁力,磁力可以将另外的开关吸引下来,这样就解决了5中金属线有长度极限。
7,10进制计数法,0,1,2,3,4,5,6,7,8,9, ----- 10(10是有前面10个数字组成)。
8,2进制计数法,0,1,10(10是有前面2个数字组成),8进制计数法,0,1,2,3,4,5,6,7 ----- 10(10是有前面8个数字组成)。
9,2进制数在生活中的应用,如:条形码(4个01为一组并构成多组的组合)。
10,介绍乔治*布尔,将结合律分配律运用到逻辑中,将逻辑以集合的形式表现。如:如何表示一只黑色的阉割的公猫。
11,逻辑门电路,与,或,非,与或,或非。。。等等。
12,使用继电器构造一个全加器,并由8个全加器构建一个8位的加法器。从而实现了0和1的加法,这是早期的计算机的核心。也是现代计算机的核心。并说明,现在早已不使用继电器,而是使用晶体管。但是不变的是,构造一个8为的全加器依旧需要144的晶体管或者继电器。
13,如何实现减法,12中实现全加器时,1+1=10,有进位,但是减法不能再去借位,否则需要太多的继电器。如:21-30=99-30+21-100+1,将减法强制改变成没有借位的减法。这样就实现了一个可以加减的全加器,如何表示负数呢?首先,先确定大小范围。如:-100~100的数。这样便有了int还是short类型之分。然后是有符号还是无符号。假如:无符号int的范围为0-100,那有符号便是-50-49.所以存在有符号还是无符号之分。最后就是如何排布。这里给出的是,首先要有一个标识,假如是有符号,那8位的第1一个就用来标识是正还是负。如1000 0001与0000 0001分别表示-1与1 。所以8位有符号的范围就是-128~0~127 。这里还存在一个上溢和下溢,如无符号2个数相加:1111 1111 + 0000 1111 = 1 0000 1110超过了8位,所以就上溢了。值反而变小了,是一种无法确定的情况,比如:当你使用的值超过了int类型时,就会发生上溢。
14,通电导线具有磁力,以此为基础用继电器可以做一个电铃,而这就是cpu的构成部分之一,电铃开关一次的单位是赫兹。有一种逻辑电路可以构成当开关闭合再打开开关任然可以保存闭合开关时的状态,这就具有了存储的功能。从而构成了锁存器(也就是寄存器)。锁存器与第12章加法器和在一起就成了cpu的另一个构成部分。
15,讲解了16进制数。
16,存储器(RAM)的构成重点在于使用译码器来控制多个锁存器。译码器:一种逻辑电路,当有3个开关时就可以控制8个锁存器,而这3个开关就是地址。如果有16个开关则是2的16次方。即64*1024个8锁存器。32位地址则是2的32次方即4GB的内存。
第17章,如何让机器自动计算而不是手动一个一个的算呢?首先在这里RAM(存储器)仍然是需要提前准备相应数据的。这里需要达到一个效果是,接通电源时,自动计算好3对不相干的数使它们加好。1,电铃原理可以产生计数器,计数器按照产生的数字一个一个的往RAM地址去取出相应的数据,再经过锁存器与累加器(加法器改进)计算好相应的值,再将值存回RAM(存储器)。这里存储器由2部分构成,数据和代码,代码:让开关的特定组合的数据,不同开关组合对应相应的译码器(3个开关有8种选择),然后译码器对应相应的逻辑电路,逻辑电路达到不同操作的目的。这里代码实现了转载(把数据放到锁存器),跳转(改变计数器的值,这样就可以对应新的RAM地址),进位加减,这算是一个完整的计算机核心硬件构成了,贴上3张图(几种不同的实验方法):图对应:16位计数器从RAM中拿到数据和代码,代码决定数据要怎么样去操作,操作的数据是存回RAM还是改变计数器的值(跳转)。
18,介绍了芯片的发展,以及几种芯片的内部电路逻辑。
19,介绍了2种经典微处理器的内部电路构成。
20,介绍了ascll码,及字符表示的发展历程
21,总线连接:cpu,ram等器件之间的连接方式。即使用一堆开关构成的一种逻辑电路。
22,介绍操作系统:最初的操作系统就是为了处理磁盘的数据做加减来达到自己目的的。介绍CP/M操作系统是由磁盘管理系统,输入输出系统,控制台命令处理系统构成。
23,小数是怎么表示的。
24,介绍了高级语言的发展历程。
25,介绍了图形的发展历程。
总结就是:
cpu有一个计数的功能,32位的操作系统意味着cpu能记的数大小为2的32次方,也就有2的32次方种可能,也就可以操作2的32次方个锁存器(1Byte=8bit),也就是4g内存(1024M*1024K*1024Byte)。内存中有代码和数据,cpu按照顺序依次到锁存器中拿代码和数据,代码决定了cpu是跳转,还是计算数据,如果是计算数据,那cpu将内存中的数据取出,然后经过cpu的累加器做运算,再将一份结果放到cpu的寄存器中,保证下次运算可能还需要,运算结束后将新的数据放回内存中。
以下是纯属猜想,部分是胡扯的:
一个游戏有10g,但是代码应该很小,大部分是资源,比如模型资源。当点击开始游戏时,游戏的代码被加载进入内存,然后cpu根据代码创建了一个prefab,这个prefab资源从硬盘上被加载到内存中,成为内存中的一份数据,然后代码操作这块数据。如果代码要求每秒复制一份该prefab,那prefab资源就会越来越多,内存占用会变得越来越大。
无论是堆还是栈,都是内存,无论是代码,还是从硬盘加载到内存中的3d模型数据,都放在内存中,内存只有一个,也就是那个4g的内存,将这4g的内存分成很多块,代码块,堆,栈,数据块(举例而已)等。堆与栈的区别也就是栈是通过寄存器来操作的,而堆是通过其他方式来操作的,至于代码块,数据块(举例而已)是通过什么方式操作的就不清楚了。