深入理解计算机系统:乘法、移位与并行计算

5星 · 超过95%的资源 需积分: 50 18 下载量 56 浏览量 更新于2024-07-23 4 收藏 6.93MB DOC 举报
"深入理解计算机系统笔记" 这篇笔记主要涵盖了计算机系统的基础知识,包括数值运算、硬件特性、数据类型转换、编程语言处理以及内存管理等多个方面。以下是详细的知识点解析: 1. 数值运算: - 无符号数的截断可以通过计算x mod 2^k来实现,其中k是保留的位数。 - 整数乘法通常比其他基本运算(如加法、减法、位移)慢,因此编译器会尝试用移位和加法替代乘法进行优化。 - 整数除法比乘法更慢,但除以2的幂可以用右移来代替,无符号数使用逻辑右移,有符号数使用算术右移。 2. 计算机系统架构: - IA32和x86-64(x64)是常见的处理器架构,IA64与32位系统不兼容。 - 在x64架构下,`long`和指针都是8字节。 3. 编译过程: - 编译系统由预处理器、编译器、汇编器和链接器四个部分组成,分别负责不同的任务,最终生成可执行文件。 4. 并行计算: - SIMD(单指令多数据)并行性,如SSE指令集,用于提升处理向量数据的效率。 5. 数据类型转换: - 有符号数遇到无符号数会自动转换为无符号数。 - `short`转换为`unsigned`时,先扩展大小再进行符号转换。 6. 补码运算: - 负数的补码移位会向下舍入。 - 计算补码非是从左到右找到第一个1之前的所有位取反。 7. 浮点数运算: - 浮点加法和乘法不具有结合性,乘法在加法上也不具有分配性。 - 正浮点数可以直接用整数排序函数进行排序。 8. 汇编语言: - 寄存器既可以保存地址也可以保存值,括号表示取地址指向的值。 - 传送指令中不能同时有两个内存操作数。 - 栈指针 `%esp` 存储栈顶元素的地址, `%eax` 通常用于保存函数返回值。 - LEA指令用于计算有效地址,它可以做简单的算术运算,具体行为取决于操作数的含义。 这些笔记内容覆盖了计算机系统的基础概念,对理解和优化程序性能非常有帮助。深入理解这些知识能够使开发者编写出更高效、更适合硬件的代码。