Hola gente!
Bueno, me estoy encontrando frente a un problema el cual creo alguuuna vez he leido algo, pero ahora no se donde fue...
Estoy intentando hacer un computed goto de la siguiente manera:
BEGIN_LOW
rlncf Aux2,W ;multiply OCPODE per 2
addwf PCL,F
goto OP00 ;OP =
goto OP01 ;OP =
...
...
Pero no me funciono bien. El problema saltó de inmediato al mirar el código que genera el MPASM:
346: BEGIN_LOW
007E 456C RLNCF 0x6c, W, BANKED 347: rlncf Aux2,W ;multiply OCPODE per 2
0080 26F9 ADDWF 0xff9, F, ACCESS 348: addwf PCL,F
0082 EF09 GOTO 0x612 349: goto OP00 ;OP =
0084 F003 NOP
0086 EFBC GOTO 0x978 350: goto OP01 ;OP =
0088 F004 NOP
Como pueden ver, el MPASM al ensamblar, agrega un NOP despues de cada GOTO.
No pude encontrar explicacion alguna en el datasheet.
Si el GOTO es una instruccion que ocupa 2 Words como el resto, no encuentro explicación de por qué me agrega un NOP a continuación de cada uno.
¿Está impuesto por la arquitectura?¿O es una opción del MPASM que puede deshabilitarse?
Gracias a quien puedan ayudarme.