第一章:计算机系统漫游
一、信息=二进制(位串)+上下文
二、C语言代码转汇编代码命令:gcc -S hello.i -o hello.s
三、源程序翻译过程:源程序文本 → 预处理器(预处理) → 编译器(编译) → 汇编器(汇编) → 链接器(链接) → 可执行目标程序(二进制)
四、了解编译系统工作原理的益处:
1、优化程序性能
2、理解链接时出现的错误
3、避免安全漏洞
五、系统的硬件组成
1、总线:传送定长字节块。字中的字节数(即字长)是一个基本的系统参数,各个系统中都不尽相同。
2、I/O设备:是系统与外部世界的联系通道。每个I/O 设备都通过一个控制器或适配器与I/O 总线相连。
3、主存:主存是一个临时存储设备,在处理器执行程序时,用来存放程序和程序处理的数据。存储器是一个线性的字节数组,每个字节都有其唯一的地址。
4、处理器(CPU):中央处理单元。具有加载、存储、操作、跳转过程。
六、存储设备形成层次结构:主要思想是上一层的存储结构作为低一层存储器的高速缓存。
第七章:链接
1.链接相当于一个整合,将各部分整合成一个单一的可执行的文件的过程。 2.为了构造可执行任务,链接器必须完成两个任务: 符号解析、重定位 3.目标文件的三种形式: (目标文件就是字节块的集合) 可重定位目标文件; 可执行目标文件; 共享目标文件。 4.符号和符号表 由m定义的可被其他模块引用的全局符号; 其他模块定义的可被m模块引用的全局符号(外部符号); 只被m模块定义与引用的本地符号。 常用命令: 预处理:gcc -E -I hello.c -o hello.i 编译:gcc -S -I hello.i -o hello.s 汇编: gcc -c -I hello.s -o hello.o 链接:gcc hello.o -o hello
Myod任务详情
1 复习c文件处理内容
2 编写myod.c 用myod XXX实现Linux下od -tx -tc XXX的功能
main与其他分开,制作静态库和动态库
编写Makefile
5 提交测试代码和运行结果截图, 提交调试过程截图,要全屏,包含自己的学号信息
6 在博客园发表一篇博客,重点写遇到的问题和解决过程
遇到的问题:不会编写Makefile文件,所以我问了一些同学再加上自己的理解才算做出来。
源代码:
#include<stdio.h>
#define N 100 //数组最大长度
main()
{
int a[N];
char b;
int s;
for(s=0;s<N;s++)
{
scanf("%d%c",&a[s],&b); //输入数字和符号
if(b=='#') //输入时“#”结束
break;
}
insertsort(a,s); //函数调用
return 0;
}
void insertsort(int a[],int n)
{
int i=0,temp=0,j=0;
if(n>9){ //数组最小长度
for(i=1;i<=n;i++) //实现插入排序
{
temp=a[i]; //将要插入的数据保存到temp中
for(j=i-1;a[j]>temp;j--)
a[j+1]=a[j]; //数据后移
a[j+1]=temp; //插入
}
}
for(i=0;i<=n;i++)
{
printf("%d ",a[i]);
}
}
测试1-vi
每个*.c一个文件,每个*.h一个文件,文件名中最好有自己的学号
用Vi输入图中代码,并用gcc编译通过
在Vi中使用K查找printf的帮助文档
提交vi编辑过程截图,要全屏,包含自己的学号信息
测试2-gcc测试
用gcc 进行预处理,编译,汇编,链接vi输入的代码
生成的可执行文件中要有自己的学号
提交预处理,编译,汇编,链接,运行过程截图,要全屏,包含自己的学号信息
测试3-gdb测试
用gcc -g编译vi输入的代码
在main函数中设置一个行断点(2,3一张图)
在main函数增加一个空循环,循环次数为自己学号后4位,设置一个约为学号一半的条件断点
提交调试过程截图(一定包含条件断点的),要全屏,包含自己的学号信息
测试4-静态库的测试
- 除了main.c外,其他4个模块(add.c sub.c mul.c div.c)的源代码不想给别人,如何制作一个mymath.a静态库?main.c如何使用mymath.a?
- 提交静态库生成和调用过程截图(一定包含条件断点的),要全屏,包含自己的学号信息
测试5-共享库
- 除了main.c外,其他4个模块(add.c sub.c mul.c div.c)的源代码不想给别人,如何制作一个mymath.so共享库?main.c如何使用mymath.so?
- 提交共享库生成和调用过程截图(一定包含条件断点的),要全屏,包含自己的学号信息
测试6-Makefile
1 写出编译上面vi编辑代码的makefile,编译出来的目标文件为testmymath, 只用显式规则就可以.
2 提交Make过程截图,要全屏,包含自己的学号信息