Este documento describe las instrucciones de salto en los microcontroladores ATmega. Explica los dos tipos de saltos, incondicionales y condicionados. Luego detalla las instrucciones de salto directo, indirecto y relativo, así como las instrucciones condicionales de salto que comparan registros, banderas y bits para bifurcar el flujo del programa.
Instrucciones de salto en microcontroladores ATmega
1. jaime.velarde@epn.edu.ec 1 SISTEMAS MICROPROCESADOS INSTRUCCIONES DE SALTO EN LOS MICROCONTOLADORESATmega Elaborado por: Ing. Jaime E. Velarde
2. jaime.velarde@epn.edu.ec 2 CLASIFICACIÓN DE LOS SALTOS EXISTE DOS TIPOS DE SALTOS: LOS DENOMINADOS INCONDICIONALES, QUE SON AQUELLOS QUE SE EJECUTAN SIEMPRE QUE SE ENCUENTRA EN EL PROGRAMA EXISTEN TAMBIÉN, LOS CONDICIONADOS PARA LOS CUALES EL MICROCONTROLADOR PRIMERO EVALÚA LA CONDICIÓN QUE SE ESPECIFICA EN LA INSTRUCCIÓN Y LUEGO SI LA RESPUESTA ES VERDADERA, SALTA. EN EL CASO CONTRARIO, NO SALTA Y CONTINUA EN LA SECUENCIA NORMAL DEL PROGRAMA
3. jaime.velarde@epn.edu.ec 3 SALTAR DIRECTAMENTE Y EN FORMA INCONDICIONAL SALTA A LA LOCALIDAD DE LA FLASH CON DIRECCIÓN k (0x0000000 … 0x3FFFFF = 4 Megas) MNEMÓNICO: JMP k[3] OPERACIÓN: PC ← k CÓDIGO: 1001 010k kkkk 110k kkkkkkkkkkkkkkkk SALTA A UNA LOCALIDAD DE LA FLASH DISTANTE k LOCALIDADES (-2048 … 2047), DESDE DONDE SE ENCUENTRA LA INSTRUCCIÓN DEL SALTO MNEMÓNICO: RJMP k [2] OPERACIÓN: PC ← PC+k+1 CÓDIGO: 1100 kkkkkkkkkkkk
4. jaime.velarde@epn.edu.ec SALTOS INCONDICIONALES EN FORMA DIRECTA A CUALQUIER PARTE DEL PROGRAMA JMP INSTRUCCIÓN DE DESTINO INSTRUCCIÓN DE SALTO (HACIA ADELANTE) PC k SIGUIENTE INSTRUCCIÓN PC k INSTRUCCIÓN DE SALTO (HACIA ATRÁS) INSTRUCCIÓN DE DESTINO SIGUIENTE INSTRUCCIÓN 4
5. jaime.velarde@epn.edu.ec SALTOS INCONDICIONALES EN FORMA RELATIVA DENTRO DE UN RANGO DE 4KILOPALABRAS RJMP INSTRUCCIÓN DE DESTINO INSTRUCCIÓN DE SALTO (SI k ES POSITIVO) PC PC + k SIGUIENTE INSTRUCCIÓN PC PC + k INSTRUCCIÓN DE SALTO (SI k ES NEGATIVO) INSTRUCCIÓN DE DESTINO SIGUIENTE INSTRUCCIÓN 5
6. jaime.velarde@epn.edu.ec 6 SALTAR INDIRECTAMENTE Y EN FORMA INCONDICIONAL SALTA A LA LOCALIDAD DE LA FLASH CUYA DIRECCIÓN ES EL CONTENIDO DEL PUNTERO Z (0x0000 … 0xFFFF = 64 Kilos) MNEMÓNICO: IJMP[2] OPERACIÓN: PC ← Z CÓDIGO: 1001 0100 0000 1001
7. jaime.velarde@epn.edu.ec SALTOS INCONDICIONALES EN FORMA INDIRECTA A CUALQUIER PARTE DEL PROGRAMA IJMP INSTRUCCIÓN DE DESTINO INSTRUCCIÓN DE SALTO (Z MAYOR QUE EL PC) PC Z SIGUIENTE INSTRUCCIÓN PC Z INSTRUCCIÓN DE SALTO (Z MENOR QUE EL PC) INSTRUCCIÓN DE DESTINO SIGUIENTE INSTRUCCIÓN 7
8. jaime.velarde@epn.edu.ec 8 COMPARAR EL CONTENIDO DE UN REGISTRO COMPARA EL REGISTRO CON UN VALOR INMEDIATO MNEMÓNICO: CPIRd,K[2] OPERACIÓN: Rd - K CÓDIGO: 0011 KKKKddddKKKK COMPARA ENTRE DOS REGISTROS MNEMÓNICO: CPRd,Rr[2] OPERACIÓN: Rd - Rr CÓDIGO: 0001 01rd ddddrrrr COMPARA ENTRE DOS REGISTROS Y EL LLEVO MNEMÓNICO: CPCRd,Rr[2] OPERACIÓN: Rd - Rr - C CÓDIGO: 0000 01rd ddddrrrr
9. jaime.velarde@epn.edu.ec 9 BANDERAS QUE SE MODIFICAN CON LAS COMPARACIONES LAS BANDERAS TOMAN EL VALOR DE UNO LÓGICO COMO RESULTADO DE LA RESTA O COMPARACIÓN DE LOS OPERANDOS: C = 1 CUANDO HAY DEBO EN EL BIT MAS SIGNIFICATIVO Z = 1 CUANDO TODOS LOS BITS SON CERO N = 1 CUANDO AL BIT MAS SIGNIFICATIVO ES UNO V = 1 CUANDO HAY DESBORDAMIENTO EN LA OPERACIÓN DE NÚMEROS CON SIGNO EN COMPLEMENTO DE 2 S = 1 COMO RESULTADO DE “N OR EXCLUSIVO V” H = 1 CUANDO HAY DEBO ENTRE EL BIT 3 AL BIT 4
10. jaime.velarde@epn.edu.ec 10 COMPARAR Y OMITIR SI SON IGUALES COMPARA ENTRE DOS REGISTROS Y OMITE LA SIGUIENTE INSTRUCCIÓN SI SON IGUALES MNEMÓNICO: CPSERd,Rr[1, 2 o 3] OPERACIÓN: Si Rd = Rr entonces PC ← PC + 2 (o 3) OMITE LA SIGUIENTE INSTRUCCIÓN Si Rd≠Rr entonces PC ← PC + 1 CONTINUA LA SECUENCIA NORMAL CÓDIGO: 0001 00rd ddddrrrr
12. jaime.velarde@epn.edu.ec 12 OMITIR DE ACUERDO AL BIT DEL REGISTRO OMITE LA SIGUIENTE INSTRUCCIÓN SI EL BIT DEL REGISTRO ES CERO MNEMÓNICO: SBRCRr,b[1, 2 o 3] OPERACIÓN: Si Rr(b) = 0 entonces PC ← PC + 2 (o 3) OMITE LA SIGUIENTE INSTRUCCIÓN Si Rr(b) = 1 entonces PC ← PC + 1 CONTINUA CÓDIGO: 1111 110r rrrr 0bbb OMITE LA SIGUIENTE INSTRUCCIÓN SI EL BIT DEL REGISTRO ES UNO MNEMÓNICO: SBRSRr,b[1, 2 o 3] OPERACIÓN: Si Rr(b) = 1 entonces PC ← PC + 2 (o 3) OMITE LA SIGUIENTE INSTRUCCIÓN Si Rr(b) = 0 entonces PC ← PC + 1 CONTINUA CÓDIGO: 1111 111r rrrr 0bbb
13. jaime.velarde@epn.edu.ec DIAGRAMAS DE OMITIR DE ACUERDO AL BIT DEL REGISTRO SBRC SBRS SI SI ES Rr(b) = 0? ES Rr(b) = 1? NO NO SIGUIENTE INSTRUCCIÓN SIGUIENTE INSTRUCCIÓN 13
14. jaime.velarde@epn.edu.ec 14 OMITIR DE ACUERDO AL BIT DEL REGISTRO DE E/S OMITE LA SIGUIENTE INSTRUCCIÓN SI EL BIT DEL REGISTRO DE E/S ES CERO MNEMÓNICO: SBICA,b[1, 2 o 3] OPERACIÓN: Si I/O A(b) = 0 entonces PC ← PC + 2 (o 3) OMITE LA SIGUIENTE INSTRUCCIÓN Si I/O A(b) = 1 entonces PC ← PC + 1 CONTINUA CÓDIGO: 1001 1001 AAAAAbbb OMITE LA SIGUIENTE INSTRUCCIÓN SI EL BIT DEL REGISTRO DE E/S ES UNO MNEMÓNICO: SBISA,b[1, 2 o 3] OPERACIÓN: Si I/O A(b) = 1 entonces PC ← PC + 2 (o 3) OMITE LA SIGUIENTE INSTRUCCIÓN Si I/O A(b) = 0 entonces PC ← PC + 1 CONTINUA CÓDIGO: 1001 1011 AAAAAbbb
15. jaime.velarde@epn.edu.ec DIAGRAMAS DE OMITIR DE ACUERDO AL BIT DEL REG. DE E/S SBIC SBIS SI SI ES A(b) = 0? ES A(b) = 1? NO NO SIGUIENTE INSTRUCCIÓN SIGUIENTE INSTRUCCIÓN 15
16. jaime.velarde@epn.edu.ec 16 BIFURCAR DE ACUERDO AL BIT DEL REGISTRO DE ESTADO BIFURCA EL PROGRAMA SI EL BIT DEL SREG ES CERO MNEMÓNICO: BRBCs,k[1 o 2] OPERACIÓN: Si SREG(s) = 0 entonces PC ← PC + k + 1 SALTA Si SREG(s) = 1 entonces PC ← PC + 1 CONTINUA CÓDIGO: 1111 01kk kkkkksss BIFURCA EL PROGRAMA SI EL BIT DEL SREG ES UNO MNEMÓNICO: BRBSs,k[1 o 2] OPERACIÓN: Si SREG(s) = 1 entonces PC ← PC + k + 1 SALTA Si SREG(s) = 0 entonces PC ← PC + 1 CONTINUA CÓDIGO: 1111 00kk kkkkksss Nota: el salto está comprendido entre -64 y 63 localidades
17. jaime.velarde@epn.edu.ec 17 DIAGRAMAS DE BIFURCAR DE ACUERDO AL BIT DEL SREG BRBC BRBS SI SI ES SREG(s) = 0? ES SREG(s) = 1? DESTINO DEL SALTO DESTINO DEL SALTO NO NO SIGUIENTE INSTRUCCIÓN SIGUIENTE INSTRUCCIÓN
18. jaime.velarde@epn.edu.ec 18 BIFURCAR DE ACUERDO A LA BANDERA C (BANDERA DEL LLEVO) BIFURCA EL PROGRAMA SI NO HAY LLEVO (CARRY CLEAR) MNEMÓNICO: BRCC k [1 o 2] OPERACIÓN: Si C = 0 entonces PC ← PC + k + 1 SALTA Si C = 1 entonces PC ← PC + 1 CONTINUA CÓDIGO: 1111 01kk kkkk k000 BIFURCA EL PROGRAMA SI HAY LLEVO (CARRY SET) MNEMÓNICO: BRCS k [1 o 2] OPERACIÓN: Si C = 1 entonces PC ← PC + k + 1 SALTA Si C = 0 entonces PC ← PC + 1 CONTINUA CÓDIGO: 1111 00kk kkkk k000
19. jaime.velarde@epn.edu.ec 19 BIFURCAR DE ACUERDO A LA BANDERA Z (BANDERA DE CERO) BIFURCA EL PROGRAMA SI NO SON IGUALES O RESULTADO DIFERENTE DE CERO MNEMÓNICO: BRNE k [1 o 2] OPERACIÓN: Si Z = 0 entonces PC ← PC + k + 1 SALTA Si Z = 1 entonces PC ← PC + 1 CONTINUA CÓDIGO: 1111 01kk kkkk k001 BIFURCA EL PROGRAMA SI SON IGUALES O RESULTADO CERO MNEMÓNICO: BREQ k [1 o 2] OPERACIÓN: Si Z = 1 entonces PC ← PC + k + 1 SALTA Si Z = 0 entonces PC ← PC + 1 CONTINUA CÓDIGO: 1111 00kk kkkk k001
20. jaime.velarde@epn.edu.ec 20 BIFURCAR DE ACUERDO A LA BANDERA N (BANDERA DE NEGACIÓN) BIFURCA EL PROGRAMA SI EL RESULTADO ES POSITIVO MNEMÓNICO: BRPL k [1 o 2] OPERACIÓN: Si N = 0 entonces PC ← PC + k + 1 SALTA Si N = 1 entonces PC ← PC + 1 CONTINUA CÓDIGO: 1111 01kk kkkk k010 BIFURCA EL PROGRAMA SI EL RESULTADO ES NEGATIVO MNEMÓNICO: BRMI k [1 o 2] OPERACIÓN: Si N = 1 entonces PC ← PC + k + 1 SALTA Si N = 0 entonces PC ← PC + 1 CONTINUA CÓDIGO: 1111 00kk kkkk k010
21. jaime.velarde@epn.edu.ec 21 BIFURCAR DE ACUERDO A LA BANDERA V (BANDERA DE DESBORDAMIENTO) BIFURCA EL PROGRAMA SI NO HAY DESBORDAMIENTO MNEMÓNICO: BRVC k [1 o 2] OPERACIÓN: Si V = 0 entonces PC ← PC + k + 1 SALTA Si V = 1 entonces PC ← PC + 1 CONTINUA CÓDIGO: 1111 01kk kkkk k011 BIFURCA EL PROGRAMA SI HAY DESBORDAMIENTO MNEMÓNICO: BRVS k [1 o 2] OPERACIÓN: Si V = 1 entonces PC ← PC + k + 1 SALTA Si V = 0 entonces PC ← PC + 1 CONTINUA CÓDIGO: 1111 00kk kkkk k011
22. jaime.velarde@epn.edu.ec 22 BIFURCAR DE ACUERDO A LA BANDERA S (BANDERA DEL SIGNO) BIFURCA EL PROGRAMA SI ES MAYOR O IGUAL MNEMÓNICO: BRGE k [1 o 2] OPERACIÓN: Si S = 0 entonces PC ← PC + k + 1 SALTA Si S = 1 entonces PC ← PC + 1 CONTINUA CÓDIGO: 1111 01kk kkkk k100 BIFURCA EL PROGRAMA SI ES MENOR MNEMÓNICO: BRLT k [1 o 2] OPERACIÓN: Si S = 1 entonces PC ← PC + k + 1 SALTA Si S = 0 entonces PC ← PC + 1 CONTINUA CÓDIGO: 1111 00kk kkkk k100
23. jaime.velarde@epn.edu.ec 23 BIFURCAR DE ACUERDO A LA BANDERA H (BANDERA DEL LLEVO INTERMEDIO) BIFURCA EL PROGRAMA SI NO HAY LLEVO INTERMEDIO MNEMÓNICO: BRHC k [1 o 2] OPERACIÓN: Si H = 0 entonces PC ← PC + k + 1 SALTA Si H = 1 entonces PC ← PC + 1 CONTINUA CÓDIGO: 1111 01kk kkkk k101 BIFURCA EL PROGRAMA SI HAY LLEVO INTERMEDIO MNEMÓNICO: BRHS k [1 o 2] OPERACIÓN: Si H = 1 entonces PC ← PC + k + 1 SALTA Si H = 0 entonces PC ← PC + 1 CONTINUA CÓDIGO: 1111 00kk kkkk k101
24. jaime.velarde@epn.edu.ec 24 BIFURCAR DE ACUERDO A LA BANDERA T BIFURCA EL PROGRAMA SI ES CERO LA BANDERA DE USUARIO MNEMÓNICO: BRTC k [1 o 2] OPERACIÓN: Si T = 0 entonces PC ← PC + k + 1 SALTA Si T = 1 entonces PC ← PC + 1 CONTINUA CÓDIGO: 1111 01kk kkkk k110 BIFURCA EL PROGRAMA SI ES UNO LA BANDERA DE USUARIO MNEMÓNICO: BRTS k [1 o 2] OPERACIÓN: Si T = 1 entonces PC ← PC + k + 1 SALTA Si T = 0 entonces PC ← PC + 1 CONTINUA CÓDIGO: 1111 00kk kkkk k110
25. jaime.velarde@epn.edu.ec 25 BIFURCAR DE ACUERDO A LA BANDERA I (BANDERA DE INTERRUPCIÓN GLOBAL) BIFURCA EL PROGRAMA SI LAS INTERRUPCIONES ESTÁN DESHABILITADAS MNEMÓNICO: BRID k [1 o 2] OPERACIÓN: Si I = 0 entonces PC ← PC + k + 1 SALTA Si I = 1 entonces PC ← PC + 1 CONTINUA CÓDIGO: 1111 01kk kkkk k111 BIFURCA EL PROGRAMA SI LAS INTERRUPCIONES ESTÁN HABILITADAS MNEMÓNICO: BRIE k [1 o 2] OPERACIÓN: Si I = 1 entonces PC ← PC + k + 1 SALTA Si I = 0 entonces PC ← PC + 1 CONTINUA CÓDIGO: 1111 00kk kkkk k111
26. jaime.velarde@epn.edu.ec 26 BIFURCAR DE ACUERDO A LA BANDERA C (NÚMEROS SIN SIGNO) BIFURCA EL PROGRAMA SI ES IGUAL O ESTA SOBRE MNEMÓNICO: BRSH k [1 o 2] OPERACIÓN: Si C = 0 entonces PC ← PC + k + 1 SALTA Si C = 1 entonces PC ← PC + 1 CONTINUA CÓDIGO: 1111 01kk kkkk k000 BIFURCA EL PROGRAMA SI ESTA BAJO MNEMÓNICO: BRLO k [1 o 2] OPERACIÓN: Si C = 1 entonces PC ← PC + k + 1 SALTA Si C = 0 entonces PC ← PC + 1 CONTINUA CÓDIGO: 1111 00kk kkkk k000
27. jaime.velarde@epn.edu.ec 27 LLAMAR A SUBRUTINA DIRECTAMENTE GUARDA EN EL STACK LA DIRECCIÓN DE LA PRÓXIMA INSTRUCCIÓN Y SALTA A LA LOCALIDAD DE LA FLASH CON DIRECCIÓN k (0x0000000 … 0x3FFFFF) MNEMÓNICO: CALL k[4] OPERACIÓN: STACK← PC + 2SP←SP - 2 PC ← k CÓDIGO: 1001 010k kkkk 111k kkkkkkkkkkkkkkkk GUARDA EN EL STACK LA DIRECCIÓN DE LA PRÓXIMA INSTRUCCIÓN Y SALTA A UNA LOCALIDAD DE LA FLASH DISTANTE k LOCALIDADES (-2048 … 2047), DESDE DONDE SE ENCUENTRA LA INSTRUCCIÓN DE LA LLAMADA MNEMÓNICO: RCALL k [3] OPERACIÓN: STACK← PC + 1SP←SP - 2 PC ← PC + k + 1 CÓDIGO: 1101 kkkkkkkkkkkk
28. jaime.velarde@epn.edu.ec 28 LLAMAR A SUBRUTINA INDIRECTAMENTE GUARDA EN EL STACK LA DIRECCIÓN DE LA SIGUIENTE DIRECCIÓN Y SALTA A LA LOCALIDAD DE LA FLASH CUYA DIRECCIÓN ES EL CONTENIDO DEL PUNTERO Z (0x0000 … 0xFFFF) MNEMÓNICO: ICALL[3] OPERACIÓN: STACK← PC + 1 SP←SP – 2 PC ← Z CÓDIGO: 1001 0101 0000 1001
29. jaime.velarde@epn.edu.ec 29 RETORNAR DE LA SUBRUTINA Y DE LA INTERRUPCIÓN RECUPERA DESDE EL STACK LA DIRECCIÓN QUE FUE GUARDADA POR LA LLAMADA DE SUBRUTINA MNEMÓNICO: RET[4] OPERACIÓN: PC ←STACKSP←SP + 2 CÓDIGO: 1001 0101 0000 1000 RECUPERA DESDE EL STACK LA DIRECCIÓN QUE FUE GUARDADA POR LA INTERRUPCIÓN MNEMÓNICO: RETI[4] OPERACIÓN: PC ←STACKSP←SP + 2 I ← 1 CÓDIGO: 1101 0101 0001 1000