0%

深入理解计算机系统

PDF

字长与虚拟地址范围关系

首先要明白“字”的含义:是用来表示一次性处理事务的固定长度。

一个字的位数,即字长

计算机中大多数寄存器的大小是一个字长。计算机处理的典型数值也可能是以字长为单位。CPU内存之间的数据传送单位也通常是一个字长。还有内存中用于指明一个存储位置的地址也经常是以字长为单位的。

字长决定的是每次同时处理的位数,由数据线决定。
指针变量中存放的是地址值,是一个整数,这个数的最大值受字长限制;
所以一个指针变量所能指向的最大地址范围是由字长决定的,指针的值就是虚拟地址,但虚拟地址范围不等同于寻址空间

  • 操作系统负责管理虚拟地址空间,并将虚拟地址翻译为物理地址;

右移

算数右移

  • 在左端补n个最高有效位;
  • 针对有符号数,默认或假设是这样;

逻辑右移

  • 在左端补n个0;
  • 针对无符号数,必须是这样;

正码、反码和补码

x [x]正码 [x]反码 [x]补码 [-x]补
正数 普通二进制 同正码 同正码 [x]补码各位取反+1,包括符号位
负数 正码除符号位之外取反 反码+1 [x]补码各位取反+1,包括符号位

反码真实值计算公式:w是二进制位数

V=xw12w1+i=0w2xi2iV = -x_{w-1}*2^{w-1} + \sum_{i=0}^{w-2}x_i*2^i

  • 补码加减法:[x+y]=[x]+[±y][x+y]补 = [x]补+[±y]补

数据类型

  • C语言只指定了每种数据类型的最小范围而不是确定范围;
  • 无符号与有符号类型转换规则:数值会变,位不变;

汇编语言