C源代码编译后,对照汇编,发现问题,不知该如何解决
原码:
if(g_CtrlData.errTb >= 20)
{//200ms
g_CtrlData.errTb = 20;
gp_RamCtoM->errNum = DEF_ERR_TB;
}
对应汇编:
91 if(g_CtrlData.errTb >= 20)
102a9d: 761F0260 MOVW DP, #0x260
102a9f: 921F MOV AL, @0x1f
102aa0: 5214 CMPB AL, #0x14
93 g_CtrlData.errTb = 20;
102aa1: 56B7141F MOVB @0x1f, #0x14, HIS
94 gp_RamCtoM->errNum = DEF_ERR_TB;
102aa3: 761F0238 MOVW DP, #0x238
102aa5: 8A0E MOVL XAR4, @0xe
102aa6: 56B712A0 MOVB @AR0, #0x12, HIS
102aa8: 56B70194 MOVB *+XAR4[AR0], #0x01, HIS
问题在于CMPB比较指令之后,少了SB判断标志并跳转的指令,导致不管if的条件是否成立,都继续执行{}中的代码了,如果比较值大于256,编译后生成的是CMP指令,之后肯定会有SB跳转指令,程序则运行正常.
现在找不到解决方法,求助高手帮忙