Ассемблер для преобразования C INCF и CPFSLT - PullRequest
0 голосов
/ 09 января 2012

Эти два кода означают одно и то же?

Assambler ->

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

C ->

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

Если нет, то как переводить код ассамблера?

С уважением:)

Ответы [ 2 ]

0 голосов
/ 09 января 2012

Может ли кто-нибудь еще это проверить, я думаю, что приведенный ниже код верен!

_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
0 голосов
/ 09 января 2012

Первый ответ - нет, но я не уверен, как его перевести!

INCF PR4,0, ДОСТУП // (INCF f, d) (Увеличение f) (f + 1 -> d) «Инкремент регистра PR4« Рабочий регистр (аккумулятор) »в ACCESS другими словами: Получи PR +1 к WREG

WREG = PR +1;

CPFSLT TMR4, ACCESS // (CPFSLT f) (Сравнить f / w, пропустить, если f

=> пропустить, если TMR4 если TMR4> = WREG

Должно дать:

if (TMR4 >= WREG)
    WREG = PR4 + 1;

Хм ... верно?

...