问题描述:
相同的语句写法,不同的汇编结果;如图:
C语言如图1:
图1 C语言例句
图2 对应汇编
如图,图2为图1的反汇编,图2中红线框中会执行对图1中变量BatLogic.BatStatus的对应bit位直接清0;后再对对应位赋值。
图1中BatLogic.BatStatus定义位Uint16,田间语句中blOutput也为Uint16定义,blBatUnConnectFlg为具体的位定义。
我的疑问是,在相同的工程中,不同的变量,相同的定义,相同的写法,甚至C语句的右值为同一条件,转换的汇编不一致,如图3,和图4所示
图3 类似的C语言例句
图4 对应汇编
如图3图4所示,图4红框中的AH为缓存寄存器,此时这个操作,并不会直接把PVLogic中的位变量置为0;与图2存在巨大区别。
请问为什么会有此差异?