今天看了网易云课堂上的《linux内核分析》MOOC课程第一讲,记录一下学到的东西。
计算机是如何工作的呢?
计算机可以看做是“存储程序计算机”,这里我给分为两部分,即CPU负责运行指令,内存用于存储指令和数据。
CPU中还存在各种寄存器(x86),如下图所示。
具体这些寄存器怎么用,有什么用,我也就没仔细了解。想着以后用到的时候再了解。
接着,老师讲了x86 CPU的一些汇编指令、寻址方式等。5种寻址方式如下图。
寄存器寻址、立即寻址、直接寻址、间接寻址、变址寻址。
还有pushl、popl、call、ret、enter、leave指令。就不一一细说了。
这次课堂作业是分析一段c语言编译成汇编的程序。
c语言程序如下图:
经过命令编译成汇编代码
然后,出现汇编代码
去掉那些.开头的代码,剩下的就是汇编代码如下:
g:
pushl %ebp
movl %esp, %ebp
movl 8(%ebp), %eax
addl $1, %eax
popl %ebp
ret
f:
pushl %ebp
movl %esp, %ebp
subl $4, %esp
movl 8(%ebp), %eax
movl %eax, (%esp)
call g
leave
main:
pushl %ebp
movl %esp, %ebp
subl $4, %esp
movl $10, (%esp)
call f
addl $7, %eax
leave