• 汇编之函数&堆栈传参


    1.函数:

    函数就是一系列指令的集合,为了完成某个会重复使用的特定功能。

      比如:MOV EAX,1 MOV ECX,1 就相当于一个函数(指令的集合)

    2.函数的调用:

    (1)使用JMP来执行函数

      使用JMP执行函数的话,JMP跳转到相应的指令后指令指针不再返回到原来位置的下一位:

    (2)使用CALL来执行函数

      以四条指令向普通寄存器存储值为例:

    CALL执行前:

      

    CALL执行后(F8):

      

       可以看到CALL指令把当前指令的下一条指令推入栈中,在执行完四条指令后,RETN回到了当前指令的下一条指令。执行顺序并没有改变。

    3.参数、返回值

    汇编中EAX通常用来存储函数的返回值的。

    实现一个简单的加法函数:

    方法如下:

      

     (1)定义三条指令:

    • 将ECX,EDX中的值相加;(参数)
    • 将相加的值放到EAX中;
    • 返回

    (2)调用函数:

    • 先向ECX,EDX中存入要加的两个数;
    • 使用CALL调用对应方法;

    F8逐步执行结果:

      

     EAX中存储的就是相加的结果

    3.堆栈传参

    当参数过多,寄存器不够用可以使用堆栈传参:

    以一个累加的函数为例:

    (1)再CALL函数之前,先向堆栈中push5个数:

      

     (2)执行前先将EAX中的值清零

    (3)F7逐步执行结果:

      

  • 相关阅读:
    委托经典--由浅入深讲解
    原生的AJAX
    asp.net传值
    flex做的圣杯布局
    弹性盒布局实例
    CSS3实现的几个小loading效果
    requireJS基本概念及使用流程(2)
    require.js的基本概念及使用流程(1)
    JSz中的静态方法和实例方法的分析
    前端性能优化的方法
  • 原文地址:https://www.cnblogs.com/codexlx/p/13256247.html
Copyright © 2020-2023  润新知