汇编之函数&堆栈传参

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

  

原文地址:https://www.cnblogs.com/codexlx/p/13256247.html