作业一:计算机是如何工作的进行
计算机是如何工作的进行
一、实验过程及分析
**指令先从main函数开始---eip所指向的位置 ** `
main:
pushl %ebp ;将ebp的值(0)压入堆栈,esp指向下一个(96的位置)
movl %esp, %ebp ;将esp赋给ebp,ebp的指向位置变了,也指向(96的位置)
subl $4, %esp ;esp向下移动一个编号92的位置
movl $18, (%esp);立即数18放到esp当前指向的位置(92)
call zheng ;{对应两条指令1.pushl eip 2.movl zheng eip} 执行call指令的时候,eip实际上指向下一条指令(代码行数是23的代码)将eip(23)压栈,而 eip指向zheng 指令从zheng函数开始执行
addl $1, %eax ;eax=24+1=25
leave ;1.movl %ebp,%esp esp与ebp都指向编号1 2.popl %ebp ebp,esp都指向0,堆栈回到了最初的状态
ret` ;最后return是回到main函数之前的堆栈
zheng:
pushl %ebp ;ebp当前指向为96,将ebp(96)压入栈,esp指向编号84
movl %esp, %ebp ;ebp也指向84
subl $4, %esp ;esp指向下一位置80
movl 8(%ebp), %eax ;变址寻址8,ebp向上+2个位置,值为18,将18赋给eax
movl %eax, (%esp) ;eax=18,把18放到80的位置
call wei ;1.pushl eip(esp移到76,eip为15行)2.eip指向wei函数的位置
leave ;1.movl %ebp,%esp ebp指向4,esp也指向84 2.popl %ebp ebp指向96的位置,同时esp上移指向88
ret ;popl eip,把esp上移指向92,eip指向行号23,main中call的下一条指令
wei:
pushl %ebp ;当前ebp指向84,esp指向72的位置
movl %esp, %ebp ;把ebp也指向72的位置
movl 8(%ebp), %eax ;ebp+8,即向上移动两个编号的位置,eax=18
addl $6, %eax ;eax=18+6=24
popl %ebp ;将ebp84的内容放回ebp,效果是ebp指向原来84的位置,同样,esp减4,指向76的位置
ret ;return就是popl eip,esp指向80,同时eip指向了行号15的位置,执行zheng函数里call指令的下一条。
二、总结部分:
计算机大部分都是用冯诺依曼体系结构,即存储程序计算机。
两个层面:
1.硬件 cpu(IP寄存器:指针,指向内存的某块区域)——总线——内存(代码与数据)
2.程序员 内存存储指令与数据, CPU解释执行指令
计算机在执行程序时须先将要执行的相关程序和数据放入内存储器中,在执行程序时CPU根据当前程序指针寄存器的内容取出指令并执行指令,然后再取出下一条指令并执行,如此循环下去直到程序结束指令时才停止执行。其工作过程就是不断地取指令和执行指令的过程,最后将计算的结果放入指令指定的存储器地址中。
注明: 姓名:郑伟 + 原创作品转载请注明出处 + 《Linux内核分析》MOOC课程http://mooc.study.163.com/course/USTC-1000029000