正在加载图片...
微机控制技术·第13章·常用软件设计 NADD INC DPH ;R2·2>256时表空间增加一面 NADD JMP @A+DPTR TBJI: AJMP PRGO AJMP PRGI AJMP PRG2 AJMP PRGn PRGO PRGI PRG2 PRGn 这个散转程序由于在分支转移指令表中使用AJMP指令,其寻址范围为2k字节,如果n个散转分支 程序长度超过k字节时,可改用64k寻址的LJMP指令。这时,上述程序中应给每个转移指令空出三个 字节空间 对于散转分支程序超过256个时,即n>255,一个字节存放不下,这时,可用两个字节,并利用对 DPIR进行加法运算的方法,直接修改DPIR:然后再用JMP@A+DPTR实现散转。 子程序调用时的参数传递方法 在MCS-51应用程序中,完成子程序调用的指令为 ACALL和 LCALL,子程序返回指令为RET 在功能上子程序与中断服务程序有相似之处。但中断请求是随机的,转向中断处理的时刻与主程序无 接关系,故一定要有现场保护与现场恢复,而对于子程序来说,它的调用安排是由主程序设定,故现场 不一定要加以保护,可按实际情况灵活处理 子程序调用时有个参数传递问题,即在子程序调用时,主程序应先把有关参数放到某些约定的位置, 子程序在运行时,可以从约定位置得到有关参数,同样,子程序起运行结束前,也应把运算结果送到约定 位置。在返回主程序后,主程序从约定的位置上得到所需要的结果。 子程序调用时,可采用以下几种常用的参数传递方法。 1.用工作寄存器或累加器传递参数 这种方法是将输入参数或结果参数放在工作寄存器或累加器中。使用这种方法程序简单,运算速度也 高。是最常使用的参数传递方法,其缺点是传递参数不能太多 2.用指针寄存器来传递参数 由于数据一般存放在存储器中,故可用指针来指示数据的位置,这样可大大节省传递数据的工作量, 并可实现变长度运算。如果参数在内部RAM中,可用R0、R1作指针;参数在外部RAM或程序存储器中, 可用DPIR作指针。可变长度运算时,可用一个寄存器来指出数据长度,也可在数据中设置结東标记。微机控制技术·第 13 章·常用软件设计 3 JNC NADD INC DPH ; R2·2>256 时表空间增加一面 NADD: JMP @A+DPTR TBJ1: AJMP PRG0 AJMP PRGl AJMP PRG2 …… AJMP PRGn PRG0: …… …… PRG1: …… …… PRG2: …… …… …… PRGn: …… …… 这个散转程序由于在分支转移指令表中使用 AJMP 指令,其寻址范围为 2k 字节,如果 n 个散转分支 程序长度超过 2k 字节时,可改用 64k 寻址的 LJMP 指令。这时,上述程序中应给每个转移指令空出三个 字节空间。 对于散转分支程序超过 256 个时,即 n>255,一个字节存放不下,这时,可用两个字节,并利用对 DPTR 进行加法运算的方法,直接修改 DPTR;然后再用 JMP @A+DPTR 实现散转。 三、子程序调用时的参数传递方法 在 MCS-51 应用程序中,完成子程序调用的指令为 ACALL 和 LCALL,子程序返回指令为 RET。 在功能上子程序与中断服务程序有相似之处。但中断请求是随机的,转向中断处理的时刻与主程序无 直接关系,故一定要有现场保护与现场恢复,而对于子程序来说,它的调用安排是由主程序设定,故现场 不一定要加以保护,可按实际情况灵活处理。 子程序调用时有个参数传递问题,即在子程序调用时,主程序应先把有关参数放到某些约定的位置, 子程序在运行时,可以从约定位置得到有关参数,同样,子程序起运行结束前,也应把运算结果送到约定 位置。在返回主程序后,主程序从约定的位置上得到所需要的结果。 子程序调用时,可采用以下几种常用的参数传递方法。 1.用工作寄存器或累加器传递参数 这种方法是将输入参数或结果参数放在工作寄存器或累加器中。使用这种方法程序简单,运算速度也 高。是最常使用的参数传递方法,其缺点是传递参数不能太多。 2.用指针寄存器来传递参数 由于数据一般存放在存储器中,故可用指针来指示数据的位置,这样可大大节省传递数据的工作量, 并可实现变长度运算。如果参数在内部 RAM 中,可用 R0、R1 作指针;参数在外部 RAM 或程序存储器中, 可用 DPTR 作指针。可变长度运算时,可用一个寄存器来指出数据长度,也可在数据中设置结束标记
<<向上翻页
©2008-现在 cucdc.com 高等教育资讯网 版权所有