首页 | 新闻 | 新品 | 文库 | 方案 | 视频 | 下载 | 商城 | 开发板 | 数据中心 | 座谈新版 | 培训 | 工具 | 博客 | 论坛 | 百科 | GEC | 活动 | 主题月 | 电子展
返回列表 回复 发帖

子程序的调用伪指令

子程序的调用伪指令

子程序调用伪指令INVOKE与子程序的调用指令CALL在功能上是一致的,但它使汇编语言的子程序调用方法高级语言化,程序员可不用理会一些调用细节问题。
调用伪指令INVOKE的使用格式如下:
INVOKE Expression [, Arguments]
其中:Expression—地址表达式,通常为子程序名;
Arguments—传递的各参数之间用逗号’,’分开,参数可以是寄存器、表达式或ADDR标识符等。
该伪指令是调用基于堆栈的子程序的方法,它把所有参数压栈,子程序结束时,又把参数自动弹出堆栈。
在参数传递时,汇编程序将根据子程序的原型进行数据类型检查。若需要进行参数类型转换的话,汇编程序则会自动生成一段代码来满足其数据类型转换的要求。
例如:
INVOKE TEST, AX, 12+34, ADDR MSG
其中:TEST是子程序名,寄存器AX和表达式“12+34”是参数,“ADDR MSG”是传递变量MSG的地址。
例7.6编写一个累加参数数值的子程序。其中参数的个数不定,参数的个数由第一个参数来确定。
解:
.MODEL SMALL
.STACK 256
.CODE
;第一个参数Parmcount确定其后面参数Parmvalues中所含参数的个数
ADDUPPROCNEAR C, Parmcount:WORD, Parmvalues:VARARG
XORAX, AX
XORSI, SI
MOVCX, Parmcount
.REPEAT
ADDAX, Parmvalues[SI]
ADDSI, 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
返回列表