在完全汇编例程中,函数必须按如下的规则来返回值:
- 按照数据类型的长度,序数类型和一些简单类型(例如集合)使用AL、AX或EAX返回。
- 实数类型通过浮点运算器的寄存器堆栈的ST(0)返回。Currency类型须先放大10000倍。
- 指针类型、类类型以及类引用类型使用EAX返回。
- 对于字符串、动态数组、方法指针、变体以及其他一些大小超过4字节的数据类型(例如短字符串、变体等)的返回值来说,返回值是通过在函数声明的参数之后另外传入的变量参数返回的。
付于最后一条规则,开发人员通常并不需要计算Delphi将如何“另外传入一个变量参数”,而只满要在编代码中通过@Result返回值即u可—Delphi会按照上述的规则完成编译。
对于内嵌编例程来说,上面的规则完个不适用-——编译器将按Delphi的规则为例程的关键字“Begin..End”成入l与出1l的处理代码,返回值也由例(而非内嵌编代码)处理。而l1,在使用Registry调用约定的例程的内嵌编代码中,EAX、EDX和ECX未必总是例程入[口参数的前三个,因为例程的其他代码可能已经重写了这些寄存器。