写出ACALL和LCALL两个调用指令的调用范围,试写出这两条指令执行时,CPU的操作过程。
正确答案:
ACALL的调用范围是包括调用指令下一条指令的第一个字节所在的2KB范围的程序存储器空间。
ACALL调用指令的执行过程是:PC加2(本指令代码为两个字节获得下一条指令的地址,并把该断点地址(当前的PC值入栈,然后将断点地址的高五位与11位目标地址(指令代码第一字节的高3位,以及第二字节的八位连接构成16位的子程序入口地址,使程序转向子程序。调用子程序的入口地址和ACALL指令的下一条指令的地址,其高五位必须相同。因此子程序的入口地址和ACALL指令下一条指令的第一个字节必须在同一个2KB范围的程序存储器空间内。
LCALL调用指令的目标地址以16位给出,允许子程序放在64KB空间的任何地方。
指令的执行过程是把PC加上本指令代码数(三个字节获得下一条指令的地址,并把该断点地址入栈(断点地址保护,接着将被调子程序的入口地址(16位目标地址装入PC,然后从该入口地址开始执行子程序。
ACALL调用指令的执行过程是:PC加2(本指令代码为两个字节获得下一条指令的地址,并把该断点地址(当前的PC值入栈,然后将断点地址的高五位与11位目标地址(指令代码第一字节的高3位,以及第二字节的八位连接构成16位的子程序入口地址,使程序转向子程序。调用子程序的入口地址和ACALL指令的下一条指令的地址,其高五位必须相同。因此子程序的入口地址和ACALL指令下一条指令的第一个字节必须在同一个2KB范围的程序存储器空间内。
LCALL调用指令的目标地址以16位给出,允许子程序放在64KB空间的任何地方。
指令的执行过程是把PC加上本指令代码数(三个字节获得下一条指令的地址,并把该断点地址入栈(断点地址保护,接着将被调子程序的入口地址(16位目标地址装入PC,然后从该入口地址开始执行子程序。
答案解析:有
微信扫一扫手机做题