#2018-2019-1 20189213《Linux内核原理与分析》第二周作业
Linux第二周学习报告
在这一周里学习了庖丁解牛Linux内核分析第一章《计算机是如何工作的》:
这一章主要介绍了存储程序计算机的结构以及关于汇编的基础知识。从硬件角度讲,存储程序计算机包括输入、输出、存储、计算和控制五部分。从程序员的角度,一个程序的执行过程就是CPU不断从内存中获取指令并执行的过程。从汇编语言的角度可以比较清晰的看出计算机是如何执行程序的,当然,由于编译器以及平台的不同,使用高级语言编写的程序可能会生成不同的汇编指令,这里只针对linux 的x86系统,gcc编译器。
下面主要从一个实验角度来分享下自己的学习心得:
main.c文件:
main.s文件:(删除所有以.开头的行之后)
该汇编指令频繁使用了三个寄存器ebp, esp和eax。其中ebp是基址指针寄存器;esp是栈指针寄存器,通常指向栈顶;eax可以暂存数据,同时也作为函数返回值的默认存储位置。
main.s文件具体分析:
—从main程序开始执行
—ebp入栈
—把ebp值赋予给esp
—将esp值减4,指向下一存储空间(栈单位存储空间)
—将数值8存在esp所指的存储空间中
—调用f函数
—ebp入栈
—把ebp值赋予给esp
—将esp减4,指向下一地址空间
—将ebp加8所指向的存储空间内的内容赋予给累加寄存器eax
—将eax的内容赋予给esp
—调用g函数
—对ebp进行压栈
—把ebp值赋予给esp
—将ebp加8所指向的存储空间内的内容赋予给累加寄存器eax
—将eax储存的数值加11
—出栈
—返回main函数
—返回到f函数的leave命令
—撤销函数堆栈
—返回到主函数的leave命令
—将eax储存的数加1
—撤销函数堆栈
—返回程序运行值
总结部分:(计算机是如何工作的)
计算机大部分都是用冯诺依曼体系结构,其核心是存储程序计算机。
计算机在执行程序时须先将要执行的相关程序和数据放入内存储器中,在执行程序时CPU根据当前程序指针寄存器的内容取出指令并执行指令,然后再取出下一条指令并执行,如此循环下去直到程序结束指令时才停止执行。其工作过程就是不断地取指令和执行指令的过程,最后将计算的结果放入指令指定的存储器地址中。