之前学习了操作系统课程,对其中寄存器等汇编部分一直感到很陌生,今天点开了孟宁老师的Linux内核分析,看了第一周的计算机是如何工作的,受益匪浅。
首先将一段简单的C代码转换成汇编代码
vim a.c
执行以下命令,其中m32表示使用32位
gcc –S –o a.s a.c -m32
打开 a.s 删除其中点开头的行得到以下结果就是汇编代码
了解常见的寄存器、汇编指令
寄存器
esp 记录栈底位置
ebp 记录栈顶位置
eax 记录函数返回
eip 记录函数位置汇编指令
movl 赋值
addl 加法运算
subl 减法运算
pushl 压栈
popl 弹栈
call 函数调用
ret 函数返回
leave 使esp、ebp回到上次的位置
分析汇编代码理解程序运行过程
总结
冯诺依曼提出的存储程序的计算机工作模型,是计算机最最基础性的逻辑结构,他的魅力在于能让计算机按部就班的做运算,最终返回运算结果,这也正是计算机的强项。
徐兆鹏原创作品 转载请注明出处《Linux内核分析》
MOOC课程http://mooc.study.163.com/course/USTC-1000029000