一、定义函数
当应用程序需要相同代码时,不必多次重新编写代码,有时候最好创建包含代码的单一函数
(function),然后可以在程序中的任何位置调用这个函数。函数包含完成特定例程所需的所有代
码,而且不需要主程序中任何代码的帮助。数据从主程序传递给函数,然后结果返回给主程序。
调用函数时,程序的执行路径被改变、切换到函数代码中的第一条指令。处理器从这个位置开
始执行指令,直到函数表明它可以把控制返回到主程序中的原始位置。如下图所示:
能
大多数高级语言提供了在程序中编写和使用函数的方法。函数可以和主程序包含在相同的源
代码文件中,并且一起编译,函数也可以位于独立的源代码文件中,并且连接到主程序。
下面是一个计算给定半径的圆的面积的简单C语言函数:
#include <stdio.h>
float function1( int radius )
{
float result = radius * radius * 3.14159;
return result;
}
int main()
{
int i;
float result;
i = 10;
result = function1( i );
printf( "Radius: %d, Area: %f\n", i, result );
i = 2;
result = function1( i );
printf( "Radius: %d, Area: %f\n", i, result );
i = 120;
result = function1( i );
printf( "Radius: %d, Area: %f\n", i, result );
return 0;
}
二、汇编函数
1、编写函数
在汇编语言中创建函数需要3个步骤:
- 定义需要的输入值
- 定义对输入值执行的操作
- 定义如何生成输出值以及如何把输出值传递给发出调用的程序
1)定义输入值
很多函数都需要某种形式的输入数据。可以使用三种技术:
- 使用寄存器
- 使用全局变量
- 使用堆栈
当主程序调用函数时,主程序在调用函数时停止,函数从这个位置开始执行,函
数可以访问位于内存中和寄存器中的任何数据。使用寄存器把输入值传递给函数是快
速而且方便的。
2)定义函数处理
在源代码文件中,函数指令必须和主程序的其余指令分离开。
不同的汇编器使用不同的方法定义函数。
为了在GNU汇编器中定义函数,必须在程序中把函数名称声明为标签。可以使用
.type命令:
.type funcl, @function
func1:
.type命令通知GNU汇编器,func1标签定义将在汇编语言程序中使用的函数的开
始,func1标签定义函数的开始。func1标签后面的第一条指令是函数的开头。
函数结束由RET指令定义,执行RET指令时,程序控制返回主程序,返回的位置
是紧跟在调用函数的CALL指令后面的指令。
3)定义输出