Programación estructurada.
Enviado por Mikki • 25 de Abril de 2018 • 3.084 Palabras (13 Páginas) • 410 Visitas
...
rjmp significa salto relativo (relative jump, en inglés). En este tipo de salto el operando k, que en este caso representa una distancia relativa, se suma al contenido actual del contador de programa (PC, por sus siglas en inglés), lo que causa que éste continúe su ejecución en una nueva dirección. En lenguaje ensamblador esta distancia se define por medio de una etiqueta, que el ensamblador se encarga de calcular. Esta distancia no debe exceder de 2048, hacia adelante (valor positivo) o hacia atrás (valor negativo).
Ejemplo de uso:
loop:
inc r16
rjmp loop
En este ejemplo, el salto relativo es rjmp loop, que "apunta" a la etiqueta de la instrucción inc r16, que como está antes del salto relativo ocupa una dirección menor en la memoria; por lo tanto, en este caso k deberá ser un valor negativo, pero de eso se encarga el ensamblador, nosotros no debemos preocuparnos por eso.
Instrucción ijmp
ijmp significa salto indirecto (indirect jump, por sus siglas en inglés). Para ejecutar este tipo de operando es necesario guardar previamente en el registro Z (concatenación de los registros 30 y 31) la dirección a la que se desea realizar el salto. El siguiente ejemplo ilustra su uso:
ldi zh,high(16384)
ldi zl,low(16384)
:
ijmp
La instrucción ldi zh,high(16384) guarda el byte alto de la dirección 16386, valor que se convierte a 16 bits, en el registro zh (r31). La instrucción ldi zl,low(16384) guarda en zh (r30) el byte bajo de 16384.
En este ejemplo, el salto indirecto llevará al procesador a ejecutar la instrucción almacenada en la dirección 16384 y continuará en la 16385, y así sucesivamente.
Las llamadas a procedimientos rcall e icall las veremos más adelante, en otra sección del curso.
Tema 4.3 Saltos Condicionales
Antes de entrar de lleno en las instrucciones de salto condicional, vamos a conocer con más detalle el registro de estado (SREG) de los procesadores AVR.
Registro de estado
En los procesadores AVR este registro se encuentra direccionado en el espacio de E/S en la dirección $3F, y está definido como:
Bit/Nombre/Valor inicial
7
6
5
4
3
2
1
0
I
T
H
S
V
N
Z
C
0
0
0
0
0
0
0
0
Registro SREG
Donde:
El bit 7, bit I, de interrupciones, es el bit global de interrupciones. Si I = 0, las interrupciones están deshabilitadas. Si I = 1, las interrupciones están habilitadas.
El bit 6, bit T, es el bit de Almacena Copia (Copy Storage), es el origen o destino de las instrucciones BLD (Bit Load) y BST (Bit Store).
El bit 5, bit H, de Half-Carry, es el bit de bandera H, que es el bit de acarreo medio, que su utiliza en algunas instrucciones aritméticas.
El bit 4, bit S, de Signo, S = N ⊕ V, es siempre el OR-exclusivo entre los bits N y V.
El bit 3, bit V, es el bit de desbordamiento del complemento a dos, que se utiliza en aritmética en complemento a dos.
El bit 2, bit N, Negativo, indica un resultado negativo después de una operación aritmética o lógica.
El bit 1, bit Z, de Cero (Zero) indica que el resultado de la operación aritmética o lógica es exactamente cero.
El bit 0, bit C, de Acarreo (Carry Bit). Indica que la última operación ejecutada produjo un bit de acarreo.
Instrucciones de salto condicional
Los procesadores AVR tienen un conjunto muy completo de instrucciones de saltos condicionales. En la siguiente tabla se muestran estas instrucciones:
Mnemónico
Operandos
Descripción
Operación
SBRC
Rr,b
Salta (skip) si bit b en Rr está en cero (clear).
Si (Rr(b)= 0) entonces PC ← PC + 2 o 3
SBRS
Rr,b
Salta si bit b en Rr está en uno (set).
Si (Rr(b) = 1) entonces PC ← PC + 2 o 3
SBIC
P,b
Salta si bit b en el puerto P está en cero (clear).
Si (P(b) = 0) entonces PC ← PC + 2 o 3
SBIS
P,b
Salta si bit b en el puerto P está en uno (set).
Si (P(b) = 1) entonces PC ← PC + 2 o 3
BRBS
s,k
Salta
...