ORG 2000H
LCALL 3000H
ORG 3000H
RET
程序执行完ret指令后 PC=2003H 为什么不是3000H?
这里,关键问题,你没有理解执行 LCALL 3000H指令后的PC状态,实际上,单片机执行完 LCALL 3000H指令,PC 要加3,因为LCALL指令是3个字节。所以,这时的PC2003H,这个地址就是所谓的断点地址。当执行RET指令返回后,注意是要从 3000H开始的子程序回来的。然后要从断点处继续执行,当然就是要从原来的断点地址开始执行了,所以,PC=2003H。
而3000H,只是LCALL指令的转移目标地址,是去时的地址,并不是返回后的地址。