zoukankan      html  css  js  c++  java
  • 汇编之函数&堆栈传参

    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逐步执行结果:

      

  • 相关阅读:
    saltstack(master迁移)
    saltstack(主机改名)
    saltstack-部署
    redis部署
    lvs+keepalived
    android适应屏幕
    Android 网络编程
    使用pdb调试python
    python zookeeper 学习笔记
    Python 守护进程
  • 原文地址:https://www.cnblogs.com/codexlx/p/13256247.html
Copyright © 2011-2022 走看看