这两个代码的意思是一样的吗?
装配工->
_asm
INCF PR4,0,ACCESS
CPFSLT TMR4,ACCESS
_endasm
C->
++PR4;
if (PR4 < TMR4)
PIR3bits.TMR4IF = 1;
如果不是,应该如何翻译 assambler 代码?
亲切的问候 :)
第一个答案是否定的,但我不确定如何翻译!
INCF PR4,0,ACCESS //(INCF f,d) (Increment f) (f + 1 -> d) "Increment PR4 Register "Working register (accumulator)" in ACCESS 换句话说:获取PR +1到WREG
WREG = PR +1;
CPFSLT TMR4,ACCESS //(CPFSLT f) (比较 f/w,如果 f< w 则跳过)(fW,如果 f < W 则跳过)比较 TMR4 < WREG
=> 如果 TMR4 < WREG => 如果 TMR4 >= WREG 则跳过
应该给:
if (TMR4 >= WREG)
WREG = PR4 + 1;
嗯……对吧?
其他人可以验证这一点,我认为下面的代码是正确的!
_asm
INCF PR4,0,ACCESS //PR4+1 destination WREG, Access bank
CPFSLT TMR4,ACCESS //Compare TMR4 with contents of WREG in Access bank, Skip if TMR4 < WREG
_endasm
/* Above says: if (TMR4 <= PR4 + 1)*/
PIR3bits.TMR4IF = 1; // Then do this line