好久没有写过这类读书笔记,犹记得上次写还是刚学android那会读《Android群英传》写过一篇,这次应公司远程实习任务的要求,来拜读《程序是怎么跑起来的》这本书,书不厚,三天半就看完了,但读完却是甚觉过瘾,唤醒了记忆里很多即将消逝的东西,回过头来看看现在所学的东西,感觉又深入理解了一次。
第一章:什么是CPU
CPU的内部由寄存器、控制器、运算器和时钟四个部分组成;
寄存器用来暂存数据和指令等对象,不同CPU内部有20-几百个;
控制器负责把内存上的指令、数据读入寄存器,并根据指令执行结果来控制整个计算机;
运算器负责运算从内存读入寄存器的数据
时钟负责发出CPU开始计时的信号;
主存:计算机的主存储器,用来存储指令和数据,但关机会清除所有数据。
宏观上讲,程序启动后,根据时钟信号,控制器从内存中读取指令和数据,通过对这些指令加以解释和运行(这里主要用到了各类寄存器),运算器就会对数据进行运算,控制器根据该结果来控制计算机。
CPU可以说是各种功能的寄存器的结合体,程序计数器、累加计数器、标志寄存器、指令寄存器和栈寄存器只有一个,其他有一到多个。
程序的流程分为顺序执行,条件分支和循环三种,这三种模式是通过对程序计数器的值的设定来实现的(程序计数器是用来存储下一条指令的地址的),条件和循环主要使用比较(在CPU内部做减法)和跳转指令来实现(这些在第十章会讲到)。
机器语言通过call和return指令来解决函数调用的跳转问题,在将函数的入口地址赋值到程序计数器之前,call指令会将调用函数后要执行的指令地址存储在栈的主存内,函数处理完毕后,通过函数出口执行return命令,其功能就是把保存在栈中的地址赋值给程序计数器。
第二章:二进制与数据
计算机内部使用二进制处理数据。
“OO”的“XX”次幂,OO为基数,二进制位2,十进制为10,XX是“数的位数-1”;
二进制左移一位扩大2倍,两位扩大4倍,依次类推,低位补0,
对于右移,则是原来的1/2,1/4,1/8,对于高位,则有补0和补1两种情况。
二进制表示负数时,会把最高位当做符号位,正为0