
代码运行过程中,发现赋值eobd_freeze_frame(eobd_freeze_frame 的地址为 0x8afc)变量时,将非变量区域的内容给更改了。DP未更新,什么情况下会出现改问题?怎么解决?
eobd_freeze_frame 的地址为 0x8afc,
dp = 0x22b(基地址是8AC0),
movw dp #0x22B ;0x22b->dp
movb @0x3C,#FF,unc ;0x8AC0+0x3C=0x8AFC,0xFF->0x8AFC
moviz r0h,#0x4283 ;0x4283->r0h
movb acc,#0x0 ;0->acc
moviz r2h,#0x4357 ;0x4357->r2h
mvb @0x3D,#0xFF,unc ;0x8AC0+0x3D=0x8AFE,0xFF->0x8AFD
movxi r1h,#0xFF00, ;0xFF00->r1h
movb @0x3E,#0xFF,unc ;0xFF->0x8AFF
movxi r0h,#0x11EC ;0x11EC->r0h
movl @0x0,acc ;acc->0x8AC0,实际想更新0x8B00,由于DP的值,更新了8AC0的值
后续汇编均更新0x8AC0后的内容。执行上述代码的时候会把8AC0的内容覆盖掉