大家好! 我是来自山东师范大学的吴乐。
今天在《Linux内核分析》MOOC课程http://mooc.study.163.com/course/USTC-1000029000 第一单元学习了一些基本的汇编语言
现在我分享一下我的学习历程,本次课程的目的是通过反汇编一段简单的小程序学习基本汇编指令。
不废话了,上图
第一步:

首先在Code目录中编写一段简单的C语言小程序,不涉及输入输出,代码如下。
- int g(int x)
- {
- return x + 1;
- }
- int f(int x)
- {
- return g(x);
- }
- int main(void)
- {
- return f(6) + 1;
- }
第二步
gcc –S –o main.s main.c -m32

汇编结束后打开如图所示。
第三步:
去除一些链接之后,得到了干净的汇编代码。
第四步:
堆栈的调用过程(设初始ebp为0位置每次减4字节相当于升1个标号,EIP逻辑对应代码的行号):
调用变化如下
main f g f main
EIP:18 19 20 21 22 23 9 10 11 12 13 14 15 2 3 4 5 6 7 8 16 17 24 25 26
ebp:0 0 1 1 1 1 1 1 4 4 4 4 4 4 4 7 7 7 4 4 1 1 1 0 ...
esp:0 1 1 2 2 3 3 4 4 5 5 5 6 6 7 7 7 7 6 5 3 2 2 0 ...
eax:0 0 0 0 0 0 0 0 0 0 6 6 6 6 6 6 6 7 7 7 7 7 8 8 8
栈内的元素按先后顺序分别为:ebp0 6 eip23 ebp1 6 eip15 ebp4
总结:计算机的工作原理与机制
可见,计算机的工作流程也是取指执行的过程。
其次,它是在顺序执行基础上加入适当的跳转机制。
主存的内容必须载入不同寄存器中cpu才能进行处理。
最后,它实际上是通用图灵机的具体实现,并把控制与储存部分封装为CPU处理中心。
本文详细介绍了将C语言程序转换为汇编语言的过程,并通过实例展示了如何使用汇编语言进行基本的栈操作。从编写C语言程序开始,到使用gcc编译器生成汇编代码,再到理解并解释生成的汇编代码,文章深入浅出地解释了计算机底层工作原理。通过分析栈调用过程,读者可以更好地理解程序执行的顺序性和跳转机制,以及CPU如何通过寄存器进行数据处理。最后,文章总结了计算机工作原理,将其抽象为通用图灵机的实现,并强调了控制与储存部分的封装作用。
60

被折叠的 条评论
为什么被折叠?



