从C简单程序的汇编代码入手,以理解计算机工做原理。

贺邦  原创做品转载请注明出处 《Linux内核分析》MOOC课程 http://mooc.study.163.com/course/USTC-1000029000#/infospa

 知识准备3d

冯诺依曼体系结构指针

核心思想blog

1.冯诺依曼是:数字计算机的数制采用二进制;计算机应该按照程序顺序执行。ip

2.采用二进制做为计算机数值计算的基础,以0、1表明数值。不采用人类经常使用的十进制计数方法,二进制使得计算机容易实现数值的计算。内存

3.程序或指令的顺序执行,即预先编好程序,而后交给计算机按照程序中预先定义好的顺序进行数值计算。ci

汇编语言的五种寻址模式get

·        寄存器寻址 registermode: %寄存器  例如:%edx 访问寄存器edxit

·        当即寻址 immediate: $数字   例如:$0x123 数值0x123io

·        直接寻址 direct:数字   例如:0x123访问地址0x123指向的内存

·        间接寻址 indirect: (%寄存器) (%ebx) 例如:访问寄存器ebx中的地址指向的内存

·        变址寻址 displaced:偏移量(%寄存器) 4(%ebx):访问寄存器ebx中的地址再加4指向的内存;

几个重要的汇编指令

Example instruction

What it does

Pushl %eax

Subl $4, %esp   //栈顶指针减4,栈在向下生长一个位置

Movl %eax, (%esp) //将eax中的值放入栈顶指针指向的内存位置

Popl %eax

Movl (%esp), %eax //从栈顶指针指向的内存中的值放入eax中

Addl $4, %esp //栈顶指针加4,栈在向上收缩

Call 0x12345

Pushl %eip //ip压栈

Movl $0x12345, %eip //将0x12345放入eip中

Ret

Popl %eip //ip出栈

反汇编实验截图

一、源代码 main.c结果应该为,10

 

二、执行完反汇编命令后删除多余项的代码。

 

3.手绘分析过程。

 

总结

看似简单的代码背后,其实隐藏着计算机复杂的运算,不容小觑。PS.互批时请手下留情,若有不懂请咨询wechat : hlqhlqhb

相关文章
相关标签/搜索