汇编语言子程序是如何定义的?

2025-05-17 03:16:48
推荐回答(4个)
回答(1):

这样定义的:

子程序名 PROC     NEAR|FAR

               .

                .

              RET

子程序名 ENDP

子程序名相当于标号,表示本过程的符号地址。过程有NEAR和FAR两种类型,FAR型的过程可供段间调用,NEAR型过程仅供段内调用。

在一个过程中,至少要有一条返回指令RET,它可以书写在过程中的任何位置,但是过程执行的的最后一条指令一定是RET。

扩展资料:

注意事项

一、子程序调用指令

格式:CALL   [NEAR PTR]    子程序名

CALL指令的两个作用,1.将断点地址(CALL指令的下一条指令地址)压栈保存,2.转去子程序执行。

[NEAR PTR]可以省略。

二、返回指令

格式:RET     [N]

指令作用:实现子程序执行完后返回主程序的指令。从堆栈栈顶弹出一个字数据(段内调用)送入IP作为返回地址。N是立即数,执行完RET之后,再将SP增加N,也叫“平栈”。

回答(2):

汇编语言子程序以proc语句行开始,以endp语句行结束。如:
p1 proc near(或far)
..........................
p1 endp
在主程序中用call p1调用。

主程序和子程序之间传递参数通常通过栈来进行,当然也可以用某些缺省的寄存器 或者 内存来传递。但以通过栈来传递参数程序的通用性最强。

回答(3):

  1.    直接jmp跳转过去,然后ret回来。

  2. call xxx

xxx proc uses eax,esi,edi,var:ddword......

xxx endp

也可以带参数的。第二种方式格式就是这样,说白了也是jmp跳转。只是经过了编译器优化。防止程序员跳转,导致堆栈前后不对齐。

回答(4):

funname proc [uses reg1 reg2 ……] [,参数:类型,参数:类型,……]
…………
funname endp

这是masm的语法格式,在win32汇编中,参数类型都是dword,类型可以省略