哈工大csapp lab2

计算机系统实验报告

  • 1 -
    实验报告
    实 验(二)
    题 目 DataLab 数据表示

专 业 计算学部
学 号 190110812
班 级 7
学 生 刘新晨
指 导 教 师 吴锐
实 验 地 点 G709
实 验 日 期 2021/3/29
计算机科学与技术学院

计算机系统实验报告

  • 2 -
    目 录

第 1 章 实验基本信息…- 4 -
1.1 实验目的… - 4 -
1.2 实验环境与工具…错误!未定义书签。
1.2.1 硬件环境…错误!未定义书签。
1.2.2 软件环境…错误!未定义书签。
1.2.3 开发工具…错误!未定义书签。
1.3 实验预习… - 4 -
第 2 章 实验环境建立…- 5 -
2.1 UBUNTU 下 CODEBLOCKS 安装… - 5 -
2.2 64 位 UBUNTU 下 32 位运行环境建立… - 5 -
第 3 章 C 语言的数据类型与存储…- 7 -
3.1 类型本质(1 分)… - 7 -
3.2 数据的位置-地址(2 分) … - 7 -
3.3 MAIN 的参数分析(2 分)… - 9 -
3.4 指针与字符串的区别(2 分)… - 10 -
第 4 章 深入分析 UTF-8 编码…- 12 -
4.1 提交 UTF8LEN.C 子程序… - 12 -
4.2 C 语言的 STRCMP 函数分析 … - 12 -
4.3 讨论:按照姓氏笔画排序的方法实现… - 12 -
第 5 章 数据变换与输入输出…- 13 -
5.1 提交 CS_ATOI.C … - 13 -
5.2 提交 CS_ATOF.C … - 13 -
5.3 提交 CS_ITOA.C … - 13 -
5.4 提交 CS_FTOA.C … - 13 -
5.5 讨论分析 OS 的函数对输入输出的数据有类型要求吗 … - 13 -
第 6 章 整数表示与运算…- 14 -
6.1 提交 FIB_DG.C… - 14 -
6.2 提交 FIB_LOOP.C … - 14 -
6.3 FIB 溢出验证… - 14 -
6.4 除以 0 验证:… - 14 -
第 7 章 浮点数据的表示与运算…- 16 -
7.1 正数表示范围… - 16 -
7.2 浮点数的编码计算… - 16 -
计算机系统实验报告

  • 3 -
    7.3 特殊浮点数值的编码… - 17 -
    7.4 浮点数除 0 … - 17 -
    7.5 FLOAT 的微观与宏观世界 … - 18 -
    7.6 讨论:任意两个浮点数的大小比较… - 18 -
    第 8 章 舍位平衡的讨论…- 18 -
    8.1 描述可能出现的问题… - 18 -
    8.2 给出完美的解决方案… - 18 -
    第 9 章 总结…- 19 -
    9.1 请总结本次实验的收获… - 19 -
    9.2 请给出对本次实验内容的建议… - 19 -
    参考文献…- 20 -

计算机系统实验报告

  • 4 -

第 1 章 实验基本信息
1.1 实验目的
熟练掌握计算机系统的数据表示与数据运算
通过 C 程序深入理解计算机运算器的底层实现与优化
掌握 VS/CB/GCC 等工具的使用技巧与注意事项
1.2 实验环境与工具
1.2.1 硬件环境
X64 CPU;8G RAM;2.60GHz;
1.2.2 软件环境
Win10 64 位以上;VMware 15.5.7; Ubuntu 64 位
1.2.3 开发工具
Visual Studio 2019 64 位以上;CodeBlocks 64 位;vi; vim; gcc
计算机系统实验报告

  • 5 -
    第 2 章 实验环境建立

2.1 Ubuntu 下 CodeBlocks 安装
CodeBlocks 运行界面截图:编译、运行 hellolinux.c
2.2 64 位 Ubuntu 下 32 位运行环境建立
在终端下,用 gcc 的 32 位模式编译生成 hellolinux.c。执行此文件。
Linux 及终端的截图。
计算机系统实验报告

  • 6 -
    计算机系统实验报告
  • 7 -
    第 3 章 C 语言的数据类型与存储
    3.1 类型本质(1 分)
    Win/VS/x86 Win/VS/x64 Win/CB/32 Win/CB/64 Linux/CB/32 Linux/CB/64
    char 1 1 1 1 1 1
    short 2 2 2 2 2 2
    int 4 4 4 4 4 4
    long 4 4 4 4 4 8
    long long 8 8 8 8 8 8
    float 4 4 4 4 4 4
    double 8 8 8 8 8 8
    long
    double
    8 8 12 16 12 16
    指针 4 8 4 8 4 8
    C 编译器对 sizeof 的实现方式:
    sizeof 不是函数,也不是操作符。因为在编译运行时它没有被编译成机器指令,
    可以把它看做成是一个宏。
    3.2 数据的位置-地址(2 分)
    计算机系统实验报告
  • 8 -
    打印 x、y、z 输出的值:
    反汇编查看 x、y、z 的地址,每字节的内容
    反汇编查看 x、y、z 在代码段的表示形式。
    64 位如下
    计算机系统实验报告
  • 9 -
    32 位如下
    x 与 y 在汇编阶段转换成补码与 ieee754 编码。
    数值型常量与变量在存储空间上的区别是:局部静态变量和全局变量存储在数
    据段,局部变量存储在堆栈段
    字符串常量与变量在存储空间上的区别是:字符串常量保存在代码段,静态变
    量和全局变量保存在数据段,局部变量在堆栈段
    常量表达式在计算机中处理方法是:在编译阶段转换成常量来存储
    3.3 main 的参数分析(2 分)
    反汇编查看 x、y、z 的地址,argc 的地址,argv 的地址与内容
    计算机系统实验报告
  • 10 -
    3.4 指针与字符串的区别(2 分)
    cstr 的地址与内容截图,pstr 的内容与截图,截图
    5
    计算机系统实验报告
  • 11 -
    pstr 修改内容会出现什么问题字符串指针为常量不可修改,修改会导致程序出
    错,无法运行
    计算机系统实验报告
  • 12 -
    第 4 章 深入分析 UTF-8 编码
    4.1 提交 utf8len.c 子程序
    4.2 C 语言的 strcmp 函数分析
    分析论述:strcmp 到底按照什么顺序对汉字排序
    按康熙字典的方法
    4.3 讨论:按照姓氏笔画排序的方法实现
    分析论述:应该怎么实现呢?
    分别排除按拼音、笔画、偏旁,最终得出是按康熙字典顺序排序的方法
    计算机系统实验报告
  • 13 -
    第 5 章 数据变换与输入输出
    5.1 提交 cs_atoi.c
    5.2 提交 cs_atof.c
    5.3 提交 cs_itoa.c
    5.4 提交 cs_ftoa.c
    5.5 讨论分析 OS 的函数对输入输出的数据有类型要求吗
    论述如下:
    应用程序是通过分别调用 read 和 write 函数来执行输入和输出的
    #include
    ssize_t read (int fd,void *buf,size_t n)
    返回:若成功则为读的字节数,若 EOF 则为 0;若出错则为-1
    ssize_t write (int fd,void *buf,size_t n)
    返回:若成功则为读的字节数,若出错则为-1
    read 函数从描述符为 fd 的当前文件位置复制最多 n 个字节到内存位置 buf,返
    回值为-1 表示一个错误,返回值为 0 表示 EOF,否则,返回值为实际传送的
    字节数量
    Write 函数从描述符为 buf 的当前文件位置复制最多 n 个字节到描述符 buf 的
    当前位置。
    计算机系统实验报告
  • 14 -
    第 6 章 整数表示与运算
    6.1 提交 fib_dg.c
    6.2 提交 fib_loop.c
    6.3 fib 溢出验证
    int 时从 n=_____47____时溢出,long 时 n=_____47_______时溢出。
    unsigned int 时从 n=____48___时溢出,unsigned long 时 n=___48____时溢出。
    6.4 除以 0 验证:
    除以 0:截图 1
    除以极小浮点数,截图:
    计算机系统实验报告
  • 15 -
    计算机系统实验报告
  • 16 -
    第 7 章 浮点数据的表示与运算
    7.1 正数表示范围
    写出 float/double 类型最小的正数、最大的正数(非无穷)
    float 的最大值和最小值分别为 3.40282e+038(1038),1.17549e-038(10-38);
    double 的最大值和最小值分别为 1.79769e+308(10^308),2.22507e-308
    (10^-308)。
    7.2 浮点数的编码计算
    (1)按步骤写出 float 数-1.1 的浮点编码计算过程,写出该编码在内存中从低地址
    字节到高地址字节的 16 进制数值
    -1.1 符号位即最高位为 1,由于 1.1>1 所以 bias = 27 – 1= 127,而 1.1<2,故 exp
    (10)=127,exp(2)=01111111,故 f(10)≈0.1,将 0.1 不断乘以 2,可以得到
    000[1100…(1100 循环)],当位数达到 23 位后为[1100…]>2-24(即理论上 24 位以
    后为 1…1…),向上舍入,尾数部分最后[1100]变为[1101],因此-1.1 编码为
    0xbf8ccccd,从内存中低地址到高地址:cd cc 8c bf
    (2)验证:编写程序,输出值为-1.1 的浮点变量其各内存单元的数值,截图。
    计算机系统实验报告
  • 17 -
    7.3 特殊浮点数值的编码
    (1)构造多 float 变量,分别存储+0-0,最小浮点正数,最大浮点正数、最小正的
    规格化浮点数、正无穷大、Nan,并打印最可能的精确结果输出(十进制/16 进制)。
    截图。
    (2)提交子程序 floatx.c
    7.4 浮点数除 0
    (1)编写 C 程序,验证 C 语言中 float 除以 0/极小浮点数后果,截图
    (2)提交子程序 float0.c
    计算机系统实验报告
  • 18 -
    7.5 Float 的微观与宏观世界
    按照阶码区域写出 float 的最大密度区域范围及其密度,最小密度区域及其密
    度(区域长度/表示的浮点个数):(- 1-2-23)* 2-126~(1-2-23)* 2-126、2223/2 * (1-2-23)
  • 2-126、-(2-2-23) * 2127~(2-2-23) * 2127、2(28
    -1) * 223
    /2 * (2-2-23) * 2127
    最小正数变成十进制科学记数法,最可能能精确到多少 1.40129810-4
    最大正 数 变成十进制科学记数法 ,最可能能精确到多少
    4.94065645841246510-324
    7.6 讨论:任意两个浮点数的大小比较
    论述比较方法以及原因。
    IEEE 规则中,先比较符号位正数>负数,再比较阶码位,最后比较尾数。
    编程中浮点数从 MSB 到 LSB 表示,若相差较大可直接比较大小,当两个数
    比较接近时,我们常常采用二分法的思想,定义精度如 1e-7 等,当二者之差小于
    这个很小的数时,就认为二者是相等的了。为了方便起见,我们对浮点数进行比
    较时,一般均采用上述方法,而不直接用== 或!=比较,因为有些数可能无法用
    浮点数精确表示,表示时发生舍入而影响比较结果。
    第 8 章 舍位平衡的讨论
    8.1 描述可能出现的问题
    8.2 给出完美的解决方案
    计算机系统实验报告
  • 19 -
    第 9 章 总结
    9.1 请总结本次实验的收获
    让我对数据有了更深一步的了解,学到了很多关于编码、浮点数、数据结构的知
    识,大开眼界,同时也磨练了我的代码能力,这次实验对我来说还是有些难度的,
    但没有挑战又如何进步呢?
    9.2 请给出对本次实验内容的建议
    没有什么建议,哦对了,希望老师可以多讲一些知识,很多内荣都是自学的。
    注:本章为酌情加分项。
    计算机系统实验报告
  • 20 -

参考文献

为完成本次实验你翻阅的书籍与网站等
[1] 林来兴. 空间控制技术[M]. 北京:中国宇航出版社,1992:25-42.
[2] 辛希孟. 信息技术与信息服务国际研讨会论文集:A 集[C]. 北京:中国科学
出版社,1999.
[3] 赵耀东. 新时代的工业工程师[M/OL]. 台北:天下文化出版社,1998
[1998-09-26]. http://www.ie.nthu.edu.tw/info/ie.newie.htm(Big5).
[4] 谌颖. 空间交会控制理论与方法研究[D]. 哈尔滨:哈尔滨工业大学,1992:
8-13.
[5] KANAMORI H. Shaking Without Quaking[J]. Science,1998,279(5359):
2063-2064.
[6] CHRISTINE M. Plant Physiology: Plant Biology in the Genome Era[J/OL].
Science , 1998 , 281 : 331-332[1998-09-23]. http://www.sciencemag.org/cgi/
collection/anatmorp.

你可能感兴趣的:(哈工大csapp lab2)