LLP-CN
Introduction
Part 1 汇编语言与计算机架构
Chapter 1 计算机基本架构
核心架构
计算模型
冯诺伊曼架构
进化
冯诺伊曼架构的缺陷
Intel 64 架构
架构扩展
寄存器
通用寄存器
其它寄存器
系统寄存器
Protection Rings
硬件栈
小结
Chapter 2 汇编语言
环境配置
代码示例
写一个 Hello World
基本输入输出
程序结构
基础指令
示例:输出寄存器内容
局部标签
相对寻址
执行顺序
函数调用
处理数据
大小端
Strings
常量预计算
指针与不同的寻址方式
示例:计算字符串长度
作业:输入输出库
自我测验
小结
Chapter 3 遗产
实模式
保护模式
Minimal Segmentation in Long Mode
访问寄存器局部
一个意外的行为
CISC 和 RISC
解读
小结
Chapter 4 虚拟内存
缓存
动机
地址空间
特性
示例:访问禁用地址
效率
实现
虚拟地址结构
深入地址翻译
页大小
内存映射
示例:映射文件到内存
常量的助记名
完整示例
小结
Chapter 5 Compilation Pipeline
Preprocessor
Translation
Linking
Assignment: Dictionary
Summary
Chapter 6 中断和系统调用
输入和输出
TR 寄存器和 Task State 段
中断
系统调用
特殊模块寄存器
syscall 和 sysret
小结
Chapter 7 Models of Computation
Finite State Machines
Forth Machine
Assignment: Forth Compiler and Interpreter
Summary
Part 2 C 编程语言
Chapter 8 Basics
Chapter 9 Type System
Chapter 10 Code Structure
Chapter 11 Memory
Chapter 12 Syntax, Semantics and Pragmatics
Chapter 13 Good Code Practices
Part 3 C 和汇编
Chapter 14 翻译细节
函数调用序列
XMM 寄存器
调用规约
示例:简单的函数和调用栈
Red Zone
变长数量参数
vprintf 和它的朋友们
volatile
内存懒分配
生成的代码
非局部跳转–setjmp
Volatile 和 setjmp
inline
restrict
Strict Aliasing
安全问题
栈缓冲溢出
return-to-libc
格式化输出的弱点
保护手段
Security Cookie
地址空间布局随机化
DEP
小结
Chapter 15 Shared Objects and Code Models
Dynamic Loading
Relocations and PIC
Example: Dynamic Library in C
GOT and PLT
Accessing External Variables
Calling External Functions
PLT Example
Preloading
Symbol Addressing Summary
Examples
Calling a Function
On Various Dynamic Linkers
Accessing an External Variable
Complete Assembly Example
Mixing C and Assembly
Which Objects Are Linked?
Optimizations
Code Models
Small Code Model (No PIC)
Large Code Model (No PIC)
Medium Code Model (No PIC)
Small PIC Code Model
Large PIC Code Model
Medium PIC Code Model
Summary
Chapter 16 性能
优化
高性能语言的秘密
一般性的建议
省略栈帧指针
尾递归
消除公共子表达式
常量传播
返回值优化
分支预测的影响
执行单元的影响
对代码中的读写操作分组
缓存
如何有效地使用缓存?
预取
示例:二分查找和 prefetch
越过缓存
示例:矩阵初始化
SIMD 指令集
SSE 和 AVX 扩展
Assignment: Sepia Filter
小结
Chapter 17 多线程
进程和线程
多线程编程的难点在什么地方?
执行顺序
强弱内存模型
重排样例
volatile 变量
内存屏障
pthreads 入门
什么时候使用多线程
Creating Threads
管理线程
Example: Distributed Factorization
Mutexes
死锁
Livelocks
Condition Variables
Spinlocks
信号量
How Strong Is Intel 64?
What Is Lock-Free Programming?
C11 内存模型
Overview
Atomics
Memory Orderings in C11
Operations
Summary
Part 4 附录
Appendix A. Using gdb
Appendix B. Using Make
Appendix C. System Calls
Appendix D. Performance Tests Information
Bibliography
Powered by
GitBook
Linking
results matching "
"
No results matching "
"