0

这两个代码的意思是一样的吗?

装配工->

_asm
    INCF PR4,0,ACCESS
    CPFSLT TMR4,ACCESS
_endasm

C->

++PR4;
if (PR4 < TMR4)
   PIR3bits.TMR4IF = 1;

如果不是,应该如何翻译 assambler 代码?

亲切的问候 :)

4

2 回答 2

0

第一个答案是否定的,但我不确定如何翻译!

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;

嗯……对吧?

于 2012-01-09T17:19:00.303 回答
0

其他人可以验证这一点,我认为下面的代码是正确的!

_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
于 2012-01-09T19:49:20.620 回答