程序是怎样跑起来的

程序是怎样跑起来的

  • Outline
    • 第1章 对程序员来说CPU是什么
      • 1.1 CPU的内部结构解析  3
      • 1.2 CPU是寄存器的集合体  6
      • 1.3 决定程序流程的程序计数器  9
      • 1.4 条件分支和循环机制  10
      • 1.5 函数的调用机制  13
      • 1.6 通过地址和索引实现数组  16
      • 1.7 CPU的处理其实很简单  17
    • 第2章 数据是用二进制数表示的
      • 2.1 用二进制数表示计算机信息的原因  21
      • 2.2 什么是二进制数  23
      • 2.3 移位运算和乘除运算的关系  25
      • 2.4 便于计算机处理的“补数”  27
      • 2.5 逻辑右移和算术右移的区别  31
      • 2.6 掌握逻辑运算的窍门  34
      • COLUMN 如果是你,你会怎样介绍?——向小学生讲解CPU和二进制  38
    • 第3章 计算机进行小数运算时出错的原因
      • 3.1 将0.1累加100次也得不到10  43
      • 3.2 用二进制数表示小数  44
      • 3.3 计算机运算出错的原因  46
      • 3.4 什么是浮点数  47
      • 3.5 正则表达式和  EXCESS系统  50
      • 3.6 在实际的程序中进行确认  52
      • 3.7 如何避免计算机计算出错  55
      • 3.8 二进制数和十六进制数  56
    • 第4章 熟练使用有棱有角的内存
      • 4.1 内存的物理机制很简单  61
      • 4.2 内存的逻辑模型是楼房  65
      • 4.3 简单的指针  67
      • 4.4 数组是高效使用内存的基础  69
      • 4.5 栈、队列以及环形缓冲区  71
      • 4.6 链表使元素的追加和删除更容易  75
      • 4.7 二叉查找树使数据搜索更有效  79
    • 第5章 内存和磁盘的亲密关系
      • 5.1 不读入内存就无法运行  83
      • 5.2 磁盘缓存加快了磁盘访问速度  84
      • 5.3 虚拟内存把磁盘作为部分内存来使用  85
      • 5.4 节约内存的编程方法  88
      • 5.5 磁盘的物理结构  93
    • 第6章 亲自尝试压缩数据
      • 6.1 文件以字节为单位保存  99
      • 6.2 RLE  算法的机制  100
      • 6.3 RLE  算法的缺点  101
      • 6.4 通过莫尔斯编码来看哈夫曼算法的基础  103
      • 6.5 用二叉树实现哈夫曼编码  105
      • 6.6 哈夫曼算法能够大幅提升压缩比率  109
      • 6.7 可逆压缩和非可逆压缩  110
      • COLUMN 如果是你,你会怎样介绍?——向沉迷游戏的中学生讲解内存和磁盘  114
    • 第7章 程序是在何种环境中运行的
      • 7.1 运行环境=操作系统+硬件  119
      • 7.2 Windows克服了CPU以外的硬件差异  122
      • 7.3 不同操作系统的API不同  124
      • 7.4 FreeBSD Port帮你轻松使用源代码  125
      • 7.5 利用虚拟机获得其他操作系统环境  127
      • 7.6 提供相同运行环境的 Java虚拟机  128
      • 7.7 BIOS和引导  130
    • 第8章 从源文件到可执行文件
      • 8.1 计算机只能运行本地代码  135
      • 8.2 本地代码的内容  137
      • 8.3 编译器负责转换源代码  139
      • 8.4 仅靠编译是无法得到可执行文件的  141
      • 8.5 启动及库文件  143
      • 8.6 DLL文件及导入库  145
      • 8.7 可执行文件运行时的必要条件  146
      • 8.8 程序加载时会生成栈和堆  148
      • 8.9 有点难度的Q&A  150
    • 第9章 操作系统和应用的关系
      • 9.1 操作系统功能的历史  155
      • 9.2 要意识到操作系统的存在  157
      • 9.3 系统调用和高级编程语言的移植性  160
      • 9.4 操作系统和高级编程语言使硬件抽象化  161
      • 9.5 Windows操作系统的特征  163
      • COLUMN 如果是你,你会怎样介绍?——向超喜欢手机的女高中生讲解操作系统的作用  170
    • 第10章 通过汇编语言了解程序的实际构成
      • 10.1 汇编语言和本地代码是一一对应的  175
      • 10.2 通过编译器输出汇编语言的源代码  177
      • 10.3 不会转换成本地代码的伪指令  180
      • 10.4 汇编语言语法是“操作码+操作数”  182
      • 10.5 最常用的mov指令  185
      • 10.6 对栈进行push和pop 185
      • 10.7 函数调用机制  187
      • 10.8 函数内部的处理  189
      • 10.9 始终确保全局变量用的内存空间  191
      • 10.10 临时确保局部变量用的内存空间  196
      • 10.11 循环处理的实现方法  199
      • 10.12 条件分支的实现方法  202
      • 10.13 了解程序运行方式的必要性  204
    • 第11章 硬件控制方法
      • 11.1 应用和硬件无关?  211
      • 11.2 支撑硬件输入输出的IN指令和OUT指令  212
      • 11.3 编写测试用的输入输出程序  215
      • 11.4 外围设备的中断请求  218
      • 11.5 用中断来实现实时处理  221
      • 11.6 DMA可以实现短时间内传送大量数据  222
      • 11.7 文字及图片的显示机制  224
      • COLUMN 如果是你,你会怎样介绍?——向邻居老奶奶说明显示器和电视机的不同  226
    • 第12章 让计算机“思考”
      • 12.1 作为“工具”的程序和为了“思考”的程序  231
      • 12.2 用程序来表示人类的思考方式  232
      • 12.3 用程序来表示人类的思考习惯  235
      • 12.4 程序生成随机数的方法  237
      • 12.5 活用记忆功能以达到更接近人类的判断  239
      • 12.6 用程序来表示人类的思考方式  242
    • COLUMN 如果是你,你会怎样介绍?——向常光临的酒馆老板讲解计算机的思考机制
    • 附录 让我们开始C语言之旅 [[C]]
      • C语言的特点  247
      • 变量和函数  248
      • 数据类型  249
      • 标准函数库  250
      • 函数调用  251
      • 局部变量和全局变量  254
      • 数组和循环  255
      • 其他语法结构  256