⚙️ 程序是怎样跑起来的(第3版)
照着《程序是怎样跑起来的(第3版)》([日] 矢泽久雄 著,周自恒 译,人民邮电出版社 · 图灵程序设计丛书,2022-08,273 页)做的自学笔记 —— 这本书回答一个问题:你在编辑器里写完的那个 .c 文件,凭什么能变成屏幕上跑起来的程序?中间那台机器到底做了什么?全书 12 章 86 节 + 5 处 COLUMN【如果是你,你会怎样讲呢?】+ 附录 1 亲手尝试C语言/附录 2 亲手尝试Python,共 93 篇:从 CPU 的内部构造讲起(寄存器、程序计数器、条件分支与循环、函数调用、数组),用二进制理解数据(补码、移位、逻辑运算),弄清计算机算小数为什么会出错(浮点数、规格化、移码),把内存化方为圆(指针、数组、栈队列、链表、二叉查找树),看清内存与磁盘的密切联系(缓存、虚拟内存、固态硬盘),自己动手压缩数据(游程编码、哈夫曼),再到程序在怎样的环境下运行、从源文件到可执行文件的完整链路(编译、链接、启动代码、DLL、栈与堆)、操作系统与应用程序的关系、用汇编语言认识程序的真面目、访问硬件的方法,最后是新增的第 12 章——如何让计算机【学习】。这本是原理课:不需要真的装编译器、汇编器或机器学习环境也能读完,各篇的「动手 Demo」都是沙箱里真跑过的 Python 小脚本,书里的 C/汇编/命令行操作用【📋 实操路径】单列。教材成书于 2022 年(示例以 Windows/x86 为主),凡与现状不同处各篇都用【⚠️ 2026 现状】单列。大白话、不跳步骤、必带生活比喻、常见误区、可折叠自测题。
前置课程:计算机是怎样跑起来的(同一作者的姊妹篇,讲硬件怎样被搭起来)、编程原理(编程全貌课)。本书是图灵「是怎样」三部曲的第二本,第三本是网络是怎样连接的。
内容来自我的 Obsidian 自学笔记 · 全 12 章 86 节 + 5 专栏 + 附录 2 篇 · 共 93 篇完结 ✅
第一章 对程序员来说,CPU到底是什么
看一看CPU的内部构造
CPU 内部四块:寄存器放数据、控制器发…
CPU是寄存器的集合体
程序是把寄存器当对象来描述;八种寄存器分…
决定程序流程的程序计数器
PC 装的是下一条指令的地址;顺序执行=…
条件分支和循环的原理
分支=比较写标志位+跳转读标志位;循环=…
函数调用的原理
call 把返回地址压栈再跳;retur…
用基址和变址实现数组
元素地址=基址+序号×元素长度;人写 a…
CPU的处理其实很简单
CPU 只会搬数据、运算、比较、跳转;求…
第二章 用二进制来理解数据
计算机用二进制处理信息的原因
IC 引脚只有 0V/5V 两态,判别余…
二进制到底是什么
位权是 2 的幂:1、2、4、8……所以…
移位运算与乘除运算的关系
左移一位乘 2、右移一位除 2,因为位权…
便于计算机处理的【2的补码】
2 的补码=各位取反加 1;一个数加它的…
逻辑右移与算术右移的区别
逻辑右移补 0、算术右移补符号位;正数一…
掌握逻辑运算的窍门
与挑、或置、异或翻,配好掩码就能精确操作…
给小学新生讲解CPU和二进制
讲二进制=两盏灯(每多一盏翻一倍);讲…
第三章 计算机在计算小数时会出错的原因
将0.1累加100次的结果不是10
0.1 累加 100 次得 9.9999…
如何用二进制表示小数
小数点右边位权是 1/2、1/4、1/8…
计算机计算出错的原因
根子在【位数有限】:表示误差+运算误差+…
什么是浮点数
二进制科学计数法:符号位+指数位+尾数位…
规格化表示法与移码表示法
规格化让尾数开头那个 1 不必存,白赚一…
用程序来实际确认一下吧
用 struct 取 4 个字节,按 1…
如何避免计算机计算出错
先分场合——图形信号可以带误差,钱和账号…
第四章 让内存化方为圆
内存的物理结构十分简单
一大堆能存 0 和 1 的格子;地址线管…
内存的逻辑结构像一幢大楼
物理只有一长串地址,看成楼层+房间号就好…
指针其实很简单
指针=装地址的变量;取地址 &a、解引用…
用好内存先从数组开始
数组=挨着放;地址 = 基址 + 下标…
栈与队列,以及环形缓冲区
栈后进先出(同一头进出)、队列先进先出(…
在链表中添加和删除元素很容易
数组往中间插要搬一串,链表只改两处线头…
用二叉查找树高效地查找数据
小的往左、大的往右,每步甩掉一半;100…
第五章 内存与磁盘的密切联系
程序加载到内存后才能运行
CPU 只认内存地址,磁盘上的程序必须先…
提高磁盘访问速度的磁盘缓存
把读过的数据在内存里留一份;靠时间局部性…
将磁盘当成内存使用的虚拟内存
分页+按需加载,4 GB 地址空间只用…
将内存当成磁盘使用的固态硬盘
没有盘片磁头→取消【找】这一步;闪存擦除…
节约内存的编程技巧
核心=同一时刻内存里躺着的东西越少越好…
了解一下磁盘的物理结构
盘片/磁头/磁道/扇区/柱面;读一次=寻…
第六章 自己动手压缩数据
文件是以字节为单位记录的
文件在磁盘上就是一串字节(一个字节 8…
游程编码的原理
把连续重复的数据换成【字节 + 重复次数…
游程编码的缺点
数据一不重复就撑大——每个字节都要配【重…
从莫尔斯码中发现哈夫曼算法的基础
最常出现的字母给最短的码(E 一个点)…
使用树来构建哈夫曼编码
字符各成一棵树,反复取权值最小的两棵合并…
通过哈夫曼算法大幅提高压缩效率
同一句话:原样 840 位、定长 525…
无损压缩与有损压缩
无损是记账省下的、随时还原;有损是真把看…
给喜欢打游戏的初中生讲解内存和磁盘
内存=书桌、磁盘=书柜、CPU=你、加载…
第七章 程序在怎样的环境下运行
运行环境=操作系统+硬件
硬件决定指令集、操作系统决定能调哪些 A…
Windows消除了CPU之外的硬件差异
驱动程序把各家硬件翻译成统一接口,所以换…
每种操作系统的API都是不同的
打开文件一边 CreateFile、一边…
使用源代码进行安装
可执行文件省事、源码能改能换平台;源码安…
在任何地方都能提供相同运行环境的Java虚拟机
不编成本机代码,先编成只有虚拟机能认的中…
云计算平台提供的虚拟运行环境
把操作系统+硬件也租出去;省下的不是单价…
BIOS与引导装入程序
开机四棒:BIOS 自检 → 找启动设备…
第八章 从源文件到可执行文件
计算机只能执行本机代码
CPU 只认本机代码;实测 kernel…
看一看本机代码的内容
字节按 CPU 规则读就是指令(B8 0…
编译器负责翻译源代码
四步=词法→语法→优化→生成;实测带 a…
仅靠编译无法得到可执行文件
编出来的是目标文件,还带两张表(定义了谁…
启动代码与库文件
main 不是入口——启动代码先备好栈与…
DLL文件与导入库
静态把库复制进每个程序(5 MB × 1…
运行可执行文件需要什么
清单=解释器/库目录/搜索路径/参数与环…
加载时生成的栈和堆
栈自动且浅(递归上限 1000,退 90…
进阶问答
六个常见问题+把五步走一遍:源码→编译(…
第九章 操作系统与应用程序的关系
从历史发展看操作系统的功能
操作系统是被【机器贵、人慢】逼出来的:没…
关注操作系统的存在
打开文件、申请内存、打印一行字、启动进程…
系统调用与高级编程语言的可移植性
系统调用=请求操作系统办事的入口;高级语…
操作系统和高级编程语言对硬件进行了抽象化
同一个【把字送到屏幕】可在三层写:pri…
Windows操作系统的特点
图形界面起家、用盘符、反斜杠且不区分大小…
给喜欢智能手机的高中女生讲解操作系统的功能
手机=一整套设备、操作系统=总管;多任务…
第十章 通过汇编语言认识程序的真面目
汇编语言和本机代码是一一对应的
汇编不是另一种语言,只是给同一批字节换的…
用C编译器输出汇编语言源代码
让它把中间产物吐出来:gcc -S 只生…
伪指令与注释
清单里四类行四个读者:CPU 指令给 C…
汇编语言的语法是【操作码 操作数】
语法一句话:先操作码后操作数;操作数只有…
最常用的movl指令
只搬不算却是出现最多的一条:实测 mov…
将数据存入栈中
只有一头进出的内存:pushl 压、po…
函数调用的工作原理
call 比 jmp 只多做一件事:把下…
被调用函数的工作原理
入口 pushl %ebp+movl %…
全局变量和局部变量的工作原理
全局住数据段、地址固定、谁都能改、活到最…
循环的工作原理
循环全部秘密就一句:在循环体末尾把指令指…
条件分支的工作原理
比较只写标志位、跳转才改变流程;实测 e…
体验汇编语言的意义
学的是读不是写:看懂真面目、判断性能、排…
第十一章 访问硬件的方法
应用程序是否与硬件有关
应用层几乎不直接碰硬件,中间隔着 API…
负责硬件输入输出的in指令和out指令
CPU 与设备靠端口交换数据:in 读…
外部设备的中断请求
外设慢得多,让 CPU 一遍遍问就是空耗…
通过中断实现实时处理
实时=规定时间内必须响应,不是快;计算机…
能够快速传输大量数据的DMA
让专门的小控制器替 CPU 搬数据,CP…
显示字符和图像的原理
屏幕上一切皆像素:1920×1080 一…
给邻居老奶奶讲解显示器与电视机的区别
三条能听懂的区别=自己会不会干活/有没有…
第十二章 如何让计算机【学习】
什么是机器学习
传统程序人写规则、机器学习从数据里找规律…
支持向量机
在两类点之间画一条离两边都尽量远的分界线…
Python交互模式的使用方法
你说一句它回一句的窗口:敲 python…
准备学习数据
一条数据等于特征加标签;实测 40 条样…
查看手写数字数据的内容
数据到手先画成字符画看一眼,五张确实是…
通过机器学习识别手写数字
换成更好懂的最近邻算法:比一比谁最像、取…
尝试交叉验证
单次划分的成绩里混着运气;把数据切 k…
给常去的酒馆的老板讲解机器学习的类别
三类学习对应店里三件事:监督学习照着旧账…