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

汇编语言子程序是如何定义的?,第1张

这样定义的:

子程序名 PROC     NEAR|FAR

             .

              .

            RET

子程序名 ENDP

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

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

扩展资料:

注意事项

一、子程序调用指令

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

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

[NEAR PTR]可以省略。

二、返回指令

格式:RET     [N]

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

子程序:子程序又称为过程,它相当于高级语言中的过程和函数。在一个程序的不同部分,往往要用到类似的程序段,这些程序段的功能和结构形式都相同,只是某些变量的赋值不同,此时就可以把这些程序段写成子程序形式,以便需要时可以调用它;某些常用的特定功能

汇编语言中子程序当然是可以调用其他子程序的。

我们编程时,之所以要引入子程序,其主要目的无非就是:减少重复代码;阅读方便;流程清晰;举例如下:

MAIN:

MOV A,#0FEH

MOV R2,#8

LOOP:

LCALL KEYSCAN

JB 00H,LOOP1

MOV P0,A

RL A

MOV R7,#200

LCALL DELAY

SJMP LOOP

LOOP1:

RR A

MOV R7,#200

LCALL DELAY

SJMP LOOP

KEYSCAN: 按键检测子程序

JB P1.0,KEYR 没有按键退出

MOV R7,#20 延时子程序传递参数

LCALL DELAY 调用延时子程序

JNB P1.0,$ 等待按键抬起

CPL 00H 按键处理 位00H取反

KEYR:

RET

DELAY:

MOV R3,#250

DJNZ R3,$

DJNZ R7,DELAY

RET

END


欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/yw/7762098.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-04-09
下一篇 2023-04-09

发表评论

登录后才能评论

评论列表(0条)

保存