电脑如何读懂c语言的,计算机是如何解读高级语言的

g:

1     pushl       %ebp //寄存器esp由地址1976开始-4,再将寄存器ebp的内容放入esp;

2     movl       %esp, %ebp  ///将esp的值放入ebp中,即让ebp=1972;

3     movl       8(%ebp), %eax  //将ebp+8=1980中的内容放入寄存器eax中,即eax=9;

4     addl $5, %eax //将当前寄存器eax中的内容+5,即eax=14;

5     popl %ebp   //将当前esp中的内容存到寄存器ebp中,即ebp=1984,esp+4=1976;

6     ret  //相当于popl %eip,将当前esp的内容存到eip,即eip=13,跳转到地址13;

f:

7     pushl       %ebp //寄存器esp由地址1980开始-4,再将寄存器ebp的内容放入esp;

8     movl       %esp, %ebp  //将esp的值放入ebp中,即让ebp=1984;

9     subl $4,%esp  // esp再-4,即esp=1980;

10    movl       8(%ebp),%eax  //将ebp+8=1992中的内容放入寄存器eax中,即eax=9;

11    movl       %eax,(%esp)  //将eax中的内容9存入当前esp中;

12    call  g  //可以理解为pushl %eip; movl $g, %eip,即将当前寄存器eip的值13入栈,将g函数所在的地址1存入eip寄存器中,然后跳转到g函数;

13    leave //相当于movl  %ebp,%esp;popl %ebp;将ebp的内容存到esp中,即esp=1984,再将当前esp中的内容存到寄存器ebp中,即ebp=1996,esp+4=1988;

14    ret  //将当前esp的内容存到eip,即eip=20,跳转到地址20;

main:

15    pushl       %ebp    //寄存器esp由栈底2000开始-4,再将寄存器ebp的内容放入esp;

16    movl       %esp, %ebp  //将esp的值放入ebp中,即让ebp=1996;

17    subl $4,%esp     //esp再-4,即esp=1992;

18    movl       $9, (%esp)  //将9存入esp中,即栈地址1992中存入9;

19    call  f  //可以理解为pushl %eip; movl $f, %eip,即将当前寄存器eip的值20入栈,将f函数所在的地址7存入eip寄存器中,然后跳转到f函数;

20    addl $3, %eax //将当前寄存器eax中的内容+3,即eax=17;

21    leave  //将ebp的内容存到esp中,清空堆栈;

22    ret

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值