我写了一个bootloader,下了一个程序进到片子里当我跳到程序起始地址的时候,执行堆栈初始化没问题,sp被赋了正确的值。可是再往下走有一个call指令。正常情况下call跳转到子程序以后会把原指令下一条指令的地址压到堆栈里。可是在这条call执行后,sp发生了变化,但是在原本该存放下一条指令地址的地方没有任何东西不知道怎么回事,导致返回的时候跳到了0x0000.我写了很多测试代码测试但没有结果。我发现凡是非程序流程之内的代码对堆栈的修改都会出现这种情况,比如用数组包含一些机器指令,然后跳到数组里执行。不知道怎么回事。麻烦版主给看下。谢谢!谢谢,谢谢!我用的片子是9s12dg128。编译器是cw4.6 for s12. |