经典汇编语言教程:7.5.9 子程序调用伪指令

7.5.9 子程序调用伪指令

子程序调用伪指令INVOKE与子程序的调用指令CALL在功能上是一致的,但它使汇编语言的子程序调用方法高级语言化,程序员可不用理会一些调用细节问题。

调用伪指令INVOKE的使用格式如下:

INVOKE  expression [, arguments]

其中:expression—地址表达式,通常为子程序名;
arguments—传递的各参数之间用逗号','分开,参数可以是寄存器、表达式或ADDR标识符等。

该伪指令是调用基于堆栈的子程序的方法,它把所有参数压栈,子程序结束时,又把参数自动弹出堆栈。

在参数传递时,汇编程序将根据子程序的原型进行数据类型检查。若需要进行参数类型转换的话,汇编程序则会自动生成一段代码来满足其数据类型转换的要求。

例如:

INVOKE  TEST, AX, 12+34, ADDR MSG

其中:TEST是子程序名,寄存器AX和表达式“12+34”是参数,“ADDRMSG”是传递变量MSG的地址。

例7.6 编写一个累加参数数值的子程序。其中参数的个数不定,参数的个数由第一个参数来确定。

解:

.MODEL  SMALL
.STACK  256
.CODE
;第一个参数parmcount确定其后面参数parmvalues中所含参数的个数
ADDUPPROC NEAR  C, parmcount:WORD, parmvalues:VARARG
XORAX, AX
XORSI, SI
MOVCX, parmcount
.REPEAT
ADD AX, parmvalues[SI]
ADD SI, 2
.UNTILCXZ
RET
ADDUPENDP
.STARTUP
INVOKEADDUP, 3, 5, 2, 4;调用子程序ADDUP,计算5+2+4
INVOKEADDUP, 4, 1, 2, 3, 4;调用子程序ADDUP,计算1+2+3+4
.EXIT 0
.END

上页:上一课 下页:下一课

经典汇编语言教程·相关目录

第1章 汇编语言的由来,数据类型第2章 CPU资源和存储器
第3章 操作数的寻址方式第4章 标识符和表达式
第5章 微机CPU的指令系统第6章 程序的基本结构
第7章 子程序和库第8章 输入输出和中断
第9章 宏第10章 应用程序设计
第11章 数值运算协处理器第12章 汇编语言和C语言
汇编语言重要附录Windows API函数大全
版权所有 © 中山市飞娥软件工作室 证书:粤ICP备09170368号