位置:51电子网 » 技术资料 » 汽车电子

子程序调用与返回指令

发布时间:2014/6/5 21:10:51 访问次数:2610

   1.绝对调用

   绝对调用指令ACALL是一条两字节指令, AD536AJDZ指令提供了11位目标地址addrll,所以和前面AJMP指令相似,其调用地址必须与ACALL指令的下一条指令首字节位于程序存储器的同一个2KB区内。ACALL指令与AJMP指令不同的是它需要保存子程序的返回地址,

而AJMP指令不用。

   指令执行过程是:执行ACALL指令时,PC+2后获得了下一条指令的地址,然后把PC的当前值压栈(栈指针SP加l,PC低字节进栈,SP再加l,PC高字节进栈)。最后把PC的高5位和指令给出的11位地址addrll连接组成16位目标地址(PCis~11aio~ao),并作为

子程序入口地址送入PC中,使CPU转向执行子程序。因此,所调用的子程序入口地址必须和ACALL揩令下一条指令的第一个字节在同一个2KB区域的程序存储器空间,否则就调用不到了。

   2.长调用指令

   LCALL addr16(长调用指令)

    可以在64KB程序存储器内调用子程序的指令,它是三字节指令。指令执行过程是:把PC加3获得的下一条指令的地址进栈(先压入低字节,后压入高字节),进栈操作使SP加l两次。接着把指令的第二和第三字节(a15~a8,a7~ao)分别装入PC的高位和低位字节中,然后从该地址addr16(ais~a o)开始执行子程序。

   3.子程序返回

   这条返回指令的功能是从堆栈中取出断点地址,送给PC,并从断点处开始继续执行程序。RET应放在一般子程序的末尾。

   4.中断返回   

   这条返回指令的功能也是从堆栈中取出断点地址,送给PC,并从断点处开始继续执行程序。RETI应放在中断服务子程序的末尾。在执行RETI指令时,还将清除MCS-51中断响应时所置位的优先级状态触发器,开放中断逻辑,使得已申请的较低级中断源可以响应。且必须在RETI指令执行完之后,至少要再执行一条指令才能响应这个中断。



   1.绝对调用

   绝对调用指令ACALL是一条两字节指令, AD536AJDZ指令提供了11位目标地址addrll,所以和前面AJMP指令相似,其调用地址必须与ACALL指令的下一条指令首字节位于程序存储器的同一个2KB区内。ACALL指令与AJMP指令不同的是它需要保存子程序的返回地址,

而AJMP指令不用。

   指令执行过程是:执行ACALL指令时,PC+2后获得了下一条指令的地址,然后把PC的当前值压栈(栈指针SP加l,PC低字节进栈,SP再加l,PC高字节进栈)。最后把PC的高5位和指令给出的11位地址addrll连接组成16位目标地址(PCis~11aio~ao),并作为

子程序入口地址送入PC中,使CPU转向执行子程序。因此,所调用的子程序入口地址必须和ACALL揩令下一条指令的第一个字节在同一个2KB区域的程序存储器空间,否则就调用不到了。

   2.长调用指令

   LCALL addr16(长调用指令)

    可以在64KB程序存储器内调用子程序的指令,它是三字节指令。指令执行过程是:把PC加3获得的下一条指令的地址进栈(先压入低字节,后压入高字节),进栈操作使SP加l两次。接着把指令的第二和第三字节(a15~a8,a7~ao)分别装入PC的高位和低位字节中,然后从该地址addr16(ais~a o)开始执行子程序。

   3.子程序返回

   这条返回指令的功能是从堆栈中取出断点地址,送给PC,并从断点处开始继续执行程序。RET应放在一般子程序的末尾。

   4.中断返回   

   这条返回指令的功能也是从堆栈中取出断点地址,送给PC,并从断点处开始继续执行程序。RETI应放在中断服务子程序的末尾。在执行RETI指令时,还将清除MCS-51中断响应时所置位的优先级状态触发器,开放中断逻辑,使得已申请的较低级中断源可以响应。且必须在RETI指令执行完之后,至少要再执行一条指令才能响应这个中断。



热门点击

 

推荐技术资料

频谱仪的解调功能
    现代频谱仪在跟踪源模式下也可以使用Maker和△Mak... [详细]
版权所有:51dzw.COM
深圳服务热线:13692101218  13751165337
粤ICP备09112631号-6(miitbeian.gov.cn)
公网安备44030402000607
深圳市碧威特网络技术有限公司
付款方式


 复制成功!