21,499
社区成员
发帖
与我相关
我的任务
分享1 simple: ;[0-retaddr,4-par2,8-par1]
2 pushl %ebp ;[0-(old_ebp),4-retaddr,8-par2,12-par1]
3 movl %esp,%ebp //这个时候栈顶存的是什么要给栈基址的? ; ^new_ebp==esp
4 movl 8(%ebp),%eax //这个里面的8和12是怎么得出来的呀,ebp+4 又是什么东西呢?retaddr
5 movl (%eax),%edx
6 addl 12(%ebp),%edx ; edx=par2+par1
7 movl %edx,(%eax) ; eax=edx
8 movl %edx,%eax //书上说这里完成了把t作为返回值,这一点是怎么做到的? ; 规定/约定eax中保存返回值
9 movl %ebp,%esp
10 popl %ebp ;[0-retaddr,4-par2,8-par1]
11 ret ; ^esp
... ;[]
push par1 ;[0-par1]
push par2 ;[0-par2,4-par1
call simple ;[0-retaddr,4-par2,8-par1]
retaddr: add esp,8 ;[0-par2,4-par1]
... ;[]