代码改变世界

《Csapp》学习笔记(1)

2013-03-18 20:56  撞破南墙  阅读(1447)  评论(0编辑  收藏  举报

 

Andrew,gz,2013-3-17

本文为《Csapp》的学习笔记,旨在加深对操作系统的认识,往“稀缺”程序员靠近。

1. 信息是什么?

信息是“位+上下文”。也就是说,信息在计算中如此表达,由多个有序位(BIT)及其值(0或1)组成的整体。

2. 编译系统的大致流程

wps_clip_image-5341

图表 1 编译系统

1.预编译阶段

输入的是C语言的源文件,通常为*.c。它们通常带有.h之类头文件的包含文件。这个阶段主要处理源文件中的#ifdef、 #include和#define命令。该阶段会生成一个中间文件*.i,但实际工作中通常不用专门生成这种文件,因为基本上用不到;若非要生成这种文件不可,可以利用下面的示例命令:

gcc -E test.c -o test.i

2.编译阶段

输入的是中间文件*.i,编译后生成汇编语言文件*.s 。这个阶段对应的GCC命令如下所示:

gcc -S test.i -o test.s

3.汇编阶段

将输入的汇编文件*.s转换成机器语言*.o。这个阶段对应的GCC命令如下所示:

gcc -c test.s -o test.o

4.链接阶段

将输入的机器代码文件*.s(与其它的机器代码文件和库文件)汇集成一个可执行的二进制代码文件。这一步骤,可以利用下面的示例命令完成:

gcc test.o -o test

信息的表示和处理

3. 各类型的大小

wps_clip_image-2209

4. “大小端”(big-edian和little-endian)

endian: The ordering of bytes in a multi-byte number.[3]
端:在计算机系统体系结构中用来描述在多字节数中各个字节的存储顺序。

wps_clip_image-21232

图表 2 Mapping registers to memory locations

5. 参考文献

[1] ly61baby.http://blog.csdn.net/ly61baby/article/details/6767624[20130317]

[2] GCC使用入门.http://developer.51cto.com/art/200609/32317.htm[20130317]

[3] 大小端.http://www.eygle.com/digest/2007/01/whats_mean_endian.html

[4] wiki.http://en.wikipedia.org/wiki/Endianness