计算机系统基础

计算机系统基础(一)——程序的表示、转换与链接 原码&移码&补码 原码 最高位放符号位,1 表示负 定点小数,用来表示浮点数的尾数 移码 真值加上一个偏置值 bias, bias 常为 2n - 1 or 2n - 1 - 1 (如 IEEE 754) 定点整数,用来表示浮点数的阶 移码的本意是为了方便两个数作比较 补码 假设补码有 n 位,则:x补 = 2n + x 数值为正数时,其值大小就是原码;为负时,其值的大小就是各位取反再加 1 补码表示带符号整数 补码的出现是为了解决计算机的减法运算问题 求补码的真值——简便求法 符号为 0 ,则为正数,数值部分相同 符号为 1,则为负数,数值各位取反,末位加 1 各位取反,末位加 1 简便做法:从后往前看,找到第一个 1 ,将它前面的所有位取反 浮点数—— IEEE754 标准 数符 + 阶码 + 尾数 Float 1 + 8 + 23 SP : (-1) s * (1 + Significand) * 2 (Exponent - 127) Double 1 + 11 + 52 DP : (-1) s * (1 + Significand) * 2 (Exponent - 1023) 数符 Sign bit 1 表示负数 阶码 Exponent 规格化阶码范围为 0000 0001(-126) —— 1111 1110(127) (single) bias 为 127(single) 1023(double) 规格化阶范围为 1——254 (single) 全 0 和全 1 用来表示特殊值 为避免混淆,用阶码表示阶的编码,用阶或指数表示阶码的值 尾数 Significand 规格化尾数最高位总是 1 ,所以隐含表示,省 1 位,小数点前总是 1 特殊数的表示 (single) 0 阶码:all zeros 尾数:all zeros +0:0 00000000 00000000000000000000000 -0:1 00000000 00000000000000000000000 ∞ 阶码:all ones 尾数:all zeros +∞:0 11111111 00000000000000000000000 -∞:1 11111111 00000000000000000000000 浮点数除以 0 的结果是 ∞ ,而不是溢出异常(整数除以 0 为异常) NaN ( Not a Number ) 阶码:all ones 尾数:nonzeros 可帮助调试程序 非规格化数 Denorms 阶码:all zeros 尾数:nonzeros 用于表示 0 与规格化数间的 Gap SP : (-1) s * (0.xxxx…xxx) * 2 -126 为了让非规格化单精度浮点数能够平缓过渡到规格化单精度浮点数,所以取 2 -126 当输入数据为不可表示数时,机器将其转换为最邻近的可表示数 汉字内码&ASCII码 ASCII码为 7 位编码 Ex:汉字 " 大 " 在码表中位于第 20 行、第 83 列。因此区位码为 0010100 1010011 ,在区、位码上各加 32 得到两个字节编码(GB2312国标码),即 00110100 01110011B = 3473H 。前面的 34 H 和 字符 4 的 ACSII 的最高位相同,后面的 73H 和字符 s 的 ACSII 码相同。但是,将每个字节的最高位各设为 1 后,就得到其内码: B4F3H ( 0110100 11110011B ),因而不会和 ASCII 码混淆 逻辑电路 异或: n 个数做异或运算,若有奇数个 1 ,则输出 1 推荐阅读 # 原码、反码、补码 计算机系统基础(一)——程序的表示、转换与链接 计算机系统基础(二)——异常、中断和输入/输出 计算机系统基础(三)——程序的执行和存储访问 以 IA-32 + Linux + C + gcc 为平台 【精校中英字幕】2015 CMU 15-213 CSAPP 深入理解计算机系统 《深入理解计算机系统(原书第3版)》CSAPP

2022-11-15