【Linux操作系统分析】计算机是怎样工作的
实验一 计算机是怎样工作的
周肃 SA******189
一 实验目的
通过对示例程序进行分析,熟悉gcc工具,理解计算机是怎样工作的,并且讨论分析多任务计算机是怎样工作的。
二 实验内容
1 请使用Example的c代码分别生成.cpp,.s,.o和ELF可执行文件,并加载运行,分析.s汇编代码在CPU上的执行过程;
2 实验报告要求:通过实验解释单任务计算机是怎样工作的,并在此基础上讨论分析多任务计算机是怎样工作的。
三 实验步骤
#include<stdio.h> int g(int x) { return x+3; } int f(int x) { return g(x); } int main(void) { return f(8)+1; }
一般情况下,c程序的编译过程为1. 预处理2. 编译成汇编代码3. 汇编成目标代码4. 链接
1 预处理,生成.cpp文件
预处理:使用-E 参数
输出文件的后缀为“.cpp”
gcc -E -o gcctest.cpp gcctest.c
2 编译成汇编代码,生成.s文件
预处理文件——>汇编代码
1. 使用-x参数说明根据指定的步骤进行工作,cpp-output指明从预处理得到的文件开始编译
2. 使用-S说明生成汇编代码后停止工作
gcc -x cpp-output -S -o gcctest.s gcctest.cpp
也可以直接编译到汇编代码
gcc -S gcctest.c
3 编译成目标代码,生成.o文件
汇编代码!目标代码 gcc -x assembler -c gcctest.s
直接编译成目标代码 gcc -c gcctest.c
使用汇编器生成目标代码 as -o gcctest.o gcctest.s
4 编译生成可执行文件
目标代码!执行代码 gcc -o gcctest gcctest.o
直接生成执行代码 gcc -o gcctest gcctest.c
5 分析.s汇编代码在CPU上的执行过程
查看汇编代码:
main函数中:
转到f函数:
转到g函数:
转到f函数中,再转到main函数中,最后栈空,程序执行完毕。