环境:IAR for STM8 2.20,优化等级为none
这样一段C代码:
void TASKComm_ActiveCurrentRequest(u32 IDToBeActivated){
u8 micIDLSB = (u8)(IDToBeActivated);
u8 micIDMSBL = (u8) (IDToBeActivated >> 8);
u8 micIDMSBH = (u8) (IDToBeActivated >> 16);
activateMic(micIDMSBH, micIDMSBL, micIDLSB);
global_requestHandleStatus = REQUEST_HANDLE_OVER;
}
汇编为:
变量保存地址为:
问题现象:
入参IDToBeActivated为0x12345678(其他值也结果也类似),执行完“u8 micIDMSBL = (u8) (IDToBeActivated >> 8);” 这一步之后,IDToBeActivated的值已经变为0x12565678。
可以看到利用到了虚拟寄存器b8-b11,不明白为什么这一行代码的汇编指令是“MOV b9 b10”,会直接导致变量的值改变。
请问各位大神这是什么原理?需要怎样修改才可以实现功能呢?
十分感谢!
|