【未更完】【笔记】2015 CMU 15-213 CSAPP 深入理解计算机系统


b站视频地址

lecture 02

计算机中,数值一律使用补码来表示和存储;

-1的原码=1001 第一位表示符号位
-1的补码=1111=-8+4+2+1=-1 此时第一位1要看做数字-2^n n为位数

补码中的全1代表-1
1111的最高位是-2^3,所以1111=-8+4+2+1=-1
1000=-8
0111=8
Umax=+1111=2^4-1=15
Tmin=-Tmax-1
在这里插入图片描述

在这里插入图片描述
在这里插入图片描述

lecture 03

-3*(-2)=6
-3=1011
-2=1010
1011*1010=10110,去掉最高位变成0110=6
乘2相当于左移一位
在机器中乘法指令会比移位指令花费更多时间

在这里插入图片描述
总结·:
1、对于无符号数和有符号数,乘法和加法都是一样的,对负数一样可以,只要没溢出。
无符号数只有一种溢出
有符号数有两种溢出:正溢出和负溢出

2、左移只有一种,末尾添加0
右移分为逻辑右移和算术右移
逻辑右移:前面添加0
算术右移:根据符号位来决定前面应该添加0还是1

3、无符号数是模运算,从0中减去1,可以获得无符号数的最大数,eg:0000-0001=0111

4、x86的系统都是小端序来运行的
小端序:67是最低有效字节,所以它放在最低位0x100
在这里插入图片描述
5、TMin的负数不能表示为一个正数
对GMin取反加一会得到TMin
eg:在有符号数里面,-8*(-1)=8,溢出,所以又变成了-7
GMin=1000 相当于-8
取反:0111
加一:1000
在这里插入图片描述

TMin=1000
-TMin=1000?
在这里插入图片描述

lecture 04

frac表示小数点右边的数字,所以001分别表示1/2、1/4、1/8
exp全0表示为非规格化数字,非规格化数字可以接近0
非全0就是规格化数字

规格化数字:M表示1.几,M=1+frac表示的数字
非规格化数字:M表示0.几

exp的最小位表示2^0

bias=2^(k-1)-1 其中k为exp的位数
在这里插入图片描述
——————————————————————————————
为什么最后一行标红的是无穷
就是这样规定的
在这里插入图片描述
——————————————————————
在这里插入图片描述
——————————————————————
如果是二进制数的话,最后一位是0为偶数,1为奇数
如果保留精度的后面的位数组成的数字:第一个数为1,剩下的全为0,则进行偶数舍入,所以下面这个例子100都是偶数舍入
第三个例子10.11100往左边加一,也就是10.11+1=10.11+00.01=11.00
第四个例子因为1/4位是偶数,所以可以直接截断后面的数
在这里插入图片描述
——————————————
总结:
1、浮点数是不满足结合律的,因为在计算的某一步发生溢出的情况结果是完全不同的
在这里插入图片描述
所以在写代码时一定要注意使用的数的范围,因为仅仅是交换某些数的运算顺序就有可能造成结果不同

  1. 对2*d那个还不是很理解,如果溢出了不是应该变成了正数吗?
    在这里插入图片描述

lecture 05

mem:内存
reg:寄存器
movq:q代表4个字节
在这里插入图片描述

lecture 09

怎么来预防攻击

  1. 随即初始化栈位置
  2. 标记栈代码为不可执行的
  3. 使用canary来预警缓冲区溢出(如果输入字节数太多会覆盖canary的最低位,检测到canary和目标值不同时就知道它被覆盖了)
    ————————————————————
    在这里插入图片描述
    结构体会为每一个成员分配一个空间,而联合体不会,所以联合体一般用于知道有多个值但是一般只用到其中一个值的情况

lecture 10 Code Optimization

1、乘法运算会比加法运算消耗更多资源
2、除法运算需要的资源更丰富
3、二进制补码满足交换律和结合律

lecture 11 The Memory Hierarchy

在这里插入图片描述

在这里插入图片描述

猜你喜欢

转载自blog.csdn.net/qq_43050258/article/details/129215787