摘要: 静态库请点评有时候需要把一组代码编译成一个库,这个库在很多项目中都要用到,例如libc就是这样一个库,我们在不同的程序中都会用到libc中的库函数(例如printf),也会用到libc中的变量(例如以后要讲到的environ变量)。本节介绍怎么创建这样一个库。我们继续用stack.c的例子。为了便于理解,我们把stack.c拆成四个程序文件(虽然实际上没太大必要),把main.c改得简单一些,头文件stack.h不变,本节用到的代码如下所示:/* stack.c */char stack[512];int top = -1;/* push.c */extern char stack[512]; 阅读全文
posted @ 2014-01-22 14:48 西芒xiaoP 阅读(489) 评论(0) 推荐(0) 编辑
摘要: 用C写程序比直接用汇编写程序更简洁,可读性更好,但效率可能不如汇编程序,因为C程序毕竟要经由编译器生成汇编代码,尽管现代编译器的优化已经做得很好了,但还是不如手写的汇编代码。另外,有些平台相关的指令必须手写,在C语言中没有等价的语法,因为C语言的语法和概念是对各种平台的抽象,而各种平台特有的一些东西就不会在C语言中出现了,例如x86是端口I/O,而C语言就没有这个概念,所以in/out指令必须用汇编来写。C语言简洁易读,容易组织规模较大的代码,而汇编效率高,而且写一些特殊指令必须用汇编,为了把这两方面的好处都占全了,gcc提供了一种扩展语法可以在C代码中使用内联汇编(Inline Assemb 阅读全文
posted @ 2014-01-22 14:33 西芒xiaoP 阅读(696) 评论(0) 推荐(0) 编辑
摘要: 为什么汇编程序的入口是_start,而C程序的入口是main函数呢?本节就来解释这个问题。在讲例18.1 “最简单的汇编程序”时,我们的汇编和链接步骤是:$ as hello.s -o hello.o$ ld hello.o -o hello以前我们常用gcc main.c -o main命令编译一个程序,其实也可以分三步做,第一步生成汇编代码,第二步生成目标文件,第三步生成可执行文件:$ gcc -S main.c$ gcc -c main.s$ gcc main.o-S选项生成汇编代码,-c选项生成目标文件,此外在第2节 “数组应用实例:统计随机数”还讲过-E选项只做预处理而不编译,如果不 阅读全文
posted @ 2014-01-22 14:16 西芒xiaoP 阅读(563) 评论(0) 推荐(0) 编辑
摘要: ELF文件请点评ELF文件格式是一个开放标准,各种UNIX系统的可执行文件都采用ELF格式,它有三种不同的类型:可重定位的目标文件(Relocatable,或者Object File)可执行文件(Executable)共享库(Shared Object,或者Shared Library)共享库留到第4节 “共享库”再详细介绍,本节我们以例18.2 “求一组数的最大值的汇编程序”为例讨论目标文件和可执行文件的格式。现在详细解释一下这个程序的汇编、链接、运行过程:写一个汇编程序保存成文本文件max.s。汇编器读取这个文本文件转换成目标文件max.o,目标文件由若干个Section组成,我们在汇编程 阅读全文
posted @ 2014-01-22 10:32 西芒xiaoP 阅读(354) 评论(0) 推荐(0) 编辑
摘要: 原文链接:http://blog.csdn.net/qingkong8832/article/details/6687793一、int型变量在内存中存储详细情况//By Richard#include #include int main(){ int i1=0; int i2=1; int i3=-1; int i4=127; int i5=-127; int i6=128; int i7=-128; int i8=255; int i9=-255; int i10=256; int i11=-256; int i12=(... 阅读全文
posted @ 2014-01-22 09:45 西芒xiaoP 阅读(457) 评论(0) 推荐(0) 编辑