0%

csapp学习笔记

CSAPP

第一章

程序运行流程:
首先我们按下./hello ,字符串从键盘被读取 shell会将读取到的字符串逐一加载到寄存器,处理器会把hello字符串放到内存中。(注意此处不可以DMA直接读取到内存,内存只是存储空间,不放在寄存器里面program count无法指向程序)按下回车键,指令结束,shell会通过一系列指令加载可执行文件hello。这些指令会将hello中的数据和指令从磁盘督导内存而不经过CPU,这既是DMA技术。当hello中的数据和指令到达内存时,处理器就开始执行指令。CPU会将hello world\n 这个字符串复制到寄存器文件,然后再从寄存器文件复制到显示设备。

image-20240701095309869

image-20240701095600280

image-20240702105444786

image-20240702111734630

image-20240702105905118

image-20240702110710375

image-20240702111326538

image-20240702111503634

image-20240702111802383

image-20240702111905488

image-20240702112016418

image-20240702112105886

第二章 信息的表示和存储

2.1 信息存储

gcc -m32 -o hello32 hello.c #编译32位程序
gcc -m64 -o hello64 hello.c #编译64位程序
if(a && 5/a) //先判断a是否为0 如果是0,则不再执行后续

image-20240704100006629image-20240704100206456

算术右移与逻辑右移不同之处:算术右移操作数最高位为1时,左端补1 逻辑右移直接补0
一般有符号数算术右移 无符号数逻辑右移

image-20240704100617873

2.2 整数的表示

二进制补码 补码是首位是1则为负,首位为0即是正数

  • 正数的补码与原码相同。
  • 负数的补码是对原码(符号位除外)按位取反后加1得到的。

image-20240716155215275

image-20240716160847167

image-20240716161547701

image-20240716161033328

image-20240716161706090

image-20240716161738855

image-20240716161431728

2.3 整数的运算-remain

正溢出实际上是一种假溢出,因为没有舍弃位,而是最高位由0变为1,产生了负权重
负溢出是真正意义的溢出,最高位产生溢出,而被丢弃,使得负权重丢失,让结果变为正数

image-20240716163831757

image-20240716165402940

加入偏置后再右移 偏置为((1<<k )-1)接口得到向0舍入的结果

image-20240716165824328

image-20240716170116721

2.4 浮点数

image-20240716175926183

image-20240716175215470

阶码(Exponent)

阶码用于表示浮点数中指数部分的值。它决定了尾数的小数点应该向左或向右移动多少位,从而表示出不同的数值范围。在IEEE 754标准中,阶码通常采用偏移(或称为偏置)的方式来表示,这是为了使得所有的指数都有一个正的表示,包括负数。偏移值通常是2e−1−1,其中e是阶码的位数。

例如,在一个单精度浮点数(32位)中,阶码占据了其中的8位(包括一个符号位),因此偏移值为27−1=127。如果一个单精度浮点数的阶码字段为128(二进制为10000000),那么实际的指数值为128−127=1,表示小数点向右移动1位。

尾数(Mantissa 或 Significand)

尾数(或称为有效数字)是浮点数中表示数值精度(或大小)的部分。它紧跟在阶码之后,包含了浮点数中除去隐含的整数位(在IEEE 754标准中,对于非零的规格化浮点数,尾数前会隐含一个1,这个1不会存储在尾数字段中)之外的所有位。尾数可以是整数也可以是分数,但在计算机中,它们通常以二进制形式存储。

在IEEE 754标准中,尾数部分还包括了一个隐含的二进制点,这意味着尾数实际上是一个二进制小数,而不仅仅是整数或二进制数的集合。这种设计允许浮点数以更高的精度来表示小数。

image-20240716180332384

image-20240716180809606

浮点数结果不具有整数相关性image-20240716181450431

第三章 程序的机器级表示