Assembler
description
Transcript of Assembler
Objetivos• Entender la sintaxis de programación en Assembler
• Entender los registros básicos
• Realizar ejercicios Básicos
• Entender la sintaxis de programación en Assembler
• Entender los registros básicos
• Realizar ejercicios Básicos
Modos de DireccionamientoSon los distintos modos de acceder a los datos en memoria por partedel procesador. La instrucción se compone de la operación y losoperandos
Operación Acción que se realiza sobre los operandos.Los operandos Son los datos que intervienen en la operación.
Se representan mediante los modos dedireccionamiento.
Son los distintos modos de acceder a los datos en memoria por partedel procesador. La instrucción se compone de la operación y losoperandos
Operación Acción que se realiza sobre los operandos.Los operandos Son los datos que intervienen en la operación.
Se representan mediante los modos dedireccionamiento.
Modos de DireccionamientoSon Las instrucciones pueden ser clasificadas por el número deoperandos.Instrucciones sin operandosInstrucciones con un operando Operando de destinoInstrucciones con dos operandos separados por una coma:
• 1ero = Operando destino• 2do = Operando origen
Son Las instrucciones pueden ser clasificadas por el número deoperandos.Instrucciones sin operandosInstrucciones con un operando Operando de destinoInstrucciones con dos operandos separados por una coma:
• 1ero = Operando destino• 2do = Operando origen
Clase de instrucción Modo de DireccionamientoInstrucciones sin operandos ImplícitoInstrucciones con uno o dos operandos Inmediato
DirectoIndirecto simple, con disminuciónprevia, con incremento posterior ocon desplazamiento.
Modos de DireccionamientoDirecto a un Registro: El operando destino está contenido en elregistro, es decir situado en la dirección indicada en la instrucción.
Modos de DireccionamientoDirecto a dos Registro: En la instrucción se especifican losnúmeros de los registros que contienen los operandos de origen(Rr) y de destino (Rd)..
Modos de DireccionamientoInmediato: En la instrucción se especifica un número quecorresponde al operando de origen, es decir el dato estácodificado en la propia instrucción..
Modos de DireccionamientoDirecto al Registro de E/S: En la instrucción se especifica elnúmero del registro de E/S que contiene el operando de origen ode destino.
Modos de DireccionamientoDirecto a la SRAM: En la instrucción se indica mediante 16 bits ladirección de la localidad de la SRAM que contiene el operando deorigen o de destino
FLASHEND y RAMEND =memoria más alta de lalocalidad en los datos yen el programa.
Modos de DireccionamientoIndirecto a la SRAM: En la instrucción se especifica el registropuntero que apunta a la localidad de la SRAM que contiene eloperando de origen o de destino.
Modos de DireccionamientoIndirecto a la SRAM con disminución previa: En este caso elpuntero disminuye previamente su contenido antes de ejecutar laoperación
Modos de DireccionamientoIndirecto a la SRAM con desplazamiento: En la instrucción seespecifica el puntero y un valor, que sumados apuntan a lalocalidad SRAM que contiene el operando de origen o de destino.
Modos de DireccionamientoDireccionamiento a memoria de programa: La dirección del Bytese especifica por el contenido del registro Z. En este caso elpuntero Z permite leer constantes de un Byte de la memoria delprograma.
Modos de DireccionamientoDireccionamiento a memoria de programa con incrementoposterior: Similar al anterior direccionamiento, peroadicionalmente el punter incrementa su contenido después deejecutar la operación.
Modos de DireccionamientoDireccionamiento a memoria de programa con incrementoposterior: Similar al anterior direccionamiento, peroadicionalmente el punter incrementa su contenido después deejecutar la operación.
InstruccionesResumen:
En los microcontroladores los registros son usados paraalmacenar datos en forma temporal.
La información puede ser un Byte de dato para ser procesado,ó una dirección que apunta a los datos para ser recuperados.Para programar en assembler se debe tener conocimientosobre características del microcontrolador tales como:
Los registrosLa arquitecturaEl modo de procesamiento de datos
Resumen:
En los microcontroladores los registros son usados paraalmacenar datos en forma temporal.
La información puede ser un Byte de dato para ser procesado,ó una dirección que apunta a los datos para ser recuperados.Para programar en assembler se debe tener conocimientosobre características del microcontrolador tales como:
Los registrosLa arquitecturaEl modo de procesamiento de datos
InstruccionesFormatos para representar datos:Existen cuatro formas para representar datos en AVRassembler:
FORMATO REPRESENTACIÓN EJEMPLO
Hexadecimal 0x / 0X al inicio del número 0x99 / 0X25 / 0x200 / 0x0F
$ al inicio del número $99 / $25 /$200$ al inicio del número $99 / $25 /$200
Binario 0b al inicio del número 0b10001110
0B al inicio del número 0B10001110
Decimal Sólo el número 12 / 20 / 32
ASCII Comillas simples ‘2’ / ´20´
Para representar cadenas se emplean comillas dobles. Para Definir cadenas ASCII se usa .DB
InstruccionesDirectivas :
1) .EQU (Equate): Usada para definir un valor constante o unadirección fija. Esta directiva asocia un número constante con undato o una etiqueta de dirección, de modo que cuando unaetiqueta aparece en el programa, su constante será reemplazadapor la etiqueta. Ejemplo:
.EQU COUNT = 0x25
InstruccionesDirectivas :
2) .SET Usada para definir un valor constante o una direcciónfija. A diferencia de .EQU, consiste en que el valor asignadopor .SET puede ser reasignado después.
3) .ORG (Origin): Indica el comienzo de la dirección.
4) .INCLUDE: Indica a assembler que agregue el contenido deun archivo al programa. Ejemplo:
.INCLUDE "m164pdef.inc"
2) .SET Usada para definir un valor constante o una direcciónfija. A diferencia de .EQU, consiste en que el valor asignadopor .SET puede ser reasignado después.
3) .ORG (Origin): Indica el comienzo de la dirección.
4) .INCLUDE: Indica a assembler que agregue el contenido deun archivo al programa. Ejemplo:
.INCLUDE "m164pdef.inc"
InstruccionesEstructura del lenguaje Assembler
Una instrucción contiene 4 campos:
[label:] mnemonic [operandos] [; comentario]
Label Permite al programa asociar una línea de código conun nombre.
salto: DEC tempo
Mnemonic y operandos Trabajan en forma conjunta paraindicar al micro la acción o tarea a realizar.
LDI R23,$55 LDI Mnemonic
Una instrucción contiene 4 campos:
[label:] mnemonic [operandos] [; comentario]
Label Permite al programa asociar una línea de código conun nombre.
salto: DEC tempo
Mnemonic y operandos Trabajan en forma conjunta paraindicar al micro la acción o tarea a realizar.
LDI R23,$55 LDI Mnemonic
InstruccionesReglas para el Etiquetado
El nombre de las etiquetas debe ser único.
Para el nombre de las etiquetas se puede usar letrasmayúsculas, minúsculas, los dígitos del 0 al 9, y caracteresespeciales (? @ . _ $)
El inicio de la etiqueta debe ser una letra.
No se puede usar etiquetas con nombres similares ainstrucciones.
El nombre de las etiquetas debe ser único.
Para el nombre de las etiquetas se puede usar letrasmayúsculas, minúsculas, los dígitos del 0 al 9, y caracteresespeciales (? @ . _ $)
El inicio de la etiqueta debe ser una letra.
No se puede usar etiquetas con nombres similares ainstrucciones.
Intrucciones de Uc ATmega164p– Las instrucciones son clasificadas de acuerdo a la acción
que realizan:
INSTRUCCIÓN FUNCIÓN
De transferencia de datos Empleadas para mover datos entredistintas localidades de memoria
22
De salto y bifurcación Permiten alterar el curso deejecución de los programas.
Para Manipulación de bits Permiten realizar operaciones anivel de bits
Aritméticas y Lógicas Utilizadas para realizar operacionesaritméticas con bytes
De control Realizan acciones sobre todo elfuncionamiento delmicrocontrolador.
Intrucciones de Uc ATmega164p
• Nomencalatura: Registros y operandosNOMENCALTURA
Rd Registro destino
Rr Registro fuente
R Resultado de ejecución de una instrucción
23
R Resultado de ejecución de una instrucción
K Dato inmediato (constante)
k Dirección de memoria
b Bit de un registro E/S (7-0)
s Bit en el registro de estado SREG
X, Y, Z Registros de direccionamiento indirecto
P Registros del bloque E/S
q Desplazamiento (6-bit) por direccionamientodirecto
Intrucciones de Uc ATmega164p– Transferencia de datos
INSTRUCCIÓN FUNCIÓNMOV, MOVW Copiar datos entre registrosLDI Cargar un valor al registroLDD, LD, LDS, POP Cargar un registro desde la
SRAM
24
LDD, LD, LDS, POP Cargar un registro desde laSRAM
ST, STD, STS, PUSH Almacenar en SRAM unregistro
LPM Cargar un registro desde laflash
IN, OUT Entrada y salida de lospórticos
Intrucciones de Uc ATmega164p– Transferencia de datos LDI:
a) Formato:
LDI Rd, K ; Cargar Rd con elvalor K
25
LDI Rd, K ; Cargar Rd con elvalor K
Donde: K = Valor de 8 bits [0-255] decimal ó [00-FF]hexadecimalRd = [R16-R31]
b) Ejemplo:
LDI R20,0X25 ; Carga el registroR20 con0x25
Intrucciones de Uc ATmega164p– Transferencia de datos MOV: Permite copiar datos entre los Registros de Propósito
General.a) Formato:
LDI Rd, Rr ; Copiar Rr alregistro Rd
26
LDI Rd, Rr ; Copiar Rr alregistro Rd
Donde: Rd y Rr [R0-R31]
b) Ejemplo:
MOV R10,R20 ; R10=R20
Intrucciones de Uc ATmega164p– Transferencia de datos LDS: Indica a la CPU que cargue o copie un byte desde una
dirección en la memoria de datos a los Registros de PropósitoGeneral.a) Formato:
LDS Rd, k ; Cargar Rd con el contenido dela dirección k
27
LDS Rd, k ; Cargar Rd con el contenido dela dirección k
Donde: Rd [R0-R31]k es una dirección entre [$000 a $4FF] Espacio de memoria de
datos
b) Ejemplo:
LDS R10,0x1 ; Carga R10 con el contenido de lalocalidad $001
Atmega164p –Registros E/S –AVR
32 Registros depropósito
general
$000
$01F64 Registros de
E/S$020
$05F
$000
$03F
RegistrosdeE/S
$020
$05F
$020
$05F160 Registros deE/S adicionales
$060
$0FF1 KB para datosSRAM INTERNA
$100
$4FF
$000
$03F
RegistrosdeE/S
$020
$05F
Direccióncomo registro
E/S
Localidad dememoria
28
Intrucciones de Uc ATmega164p– Transferencia de datos
LDS:
b) Ejemplo:
LDS R10,0x1 ; Carga R10 con el contenido de lalocalidad $001
La localidad 0x1 corresponde al primer Registro de PropósitoGeneral R1Entonces como resultado de la ejecución de la instrucción secopia el contenido del registro R1 a R10.
R10=R1 29
b) Ejemplo:
LDS R10,0x1 ; Carga R10 con el contenido de lalocalidad $001
La localidad 0x1 corresponde al primer Registro de PropósitoGeneral R1Entonces como resultado de la ejecución de la instrucción secopia el contenido del registro R1 a R10.
R10=R1
Intrucciones de Uc ATmega164p– Transferencia de datos
LDS:
b) Ejemplo:
LDS R5,0x200 ; Carga R5 con el contenido de lalocalidad $200
LDS R1,R0 ; R1=R0
30
b) Ejemplo:
LDS R5,0x200 ; Carga R5 con el contenido de lalocalidad $200
LDS R1,R0 ; R1=R0
Intrucciones de Uc ATmega164p– Transferencia de datos STS: Indica a la CPU que guarde el contenido de los Registros
de Propósito General a una dirección localizada en el espaciode memoria de datos.a) Formato:
STS k,Rr ; Guarda el registro Rr en lalocalización k
31
STS k,Rr ; Guarda el registro Rr en lalocalización k
Donde: k es una dirección entre [$000 a $4FF] Espacio dedatos
b) Ejemplo:STS 0x1,R20 ; Copia el contenido de R20 en
la localidad $001R1=R20
Intrucciones de Uc ATmega164p– Transferencia de datos
STS:
b) Ejemplo:
STS 0x220,R25 ; Guarda R25 en la localidad $220 dela SRAM interna
STS 0x38, R15 ; Guarda R15 en la localidad $038 delos registros de
E/S corresponde al Puerto B
32
b) Ejemplo:
STS 0x220,R25 ; Guarda R25 en la localidad $220 dela SRAM interna
STS 0x38, R15 ; Guarda R15 en la localidad $038 delos registros de
E/S corresponde al Puerto B
Intrucciones de Uc ATmega164p– Transferencia de datos
Ejemplo:LDI R19,OX99 ; R19=0X99STS 0X200, R19 ; Guarda R19 en la localización0x200
(SRAM INTERNA)
No se puede copiar o guardar un valor directamente en laSRAM, este proceso debe ser hecho por medio de losRegistros de Propósito General.
33
Ejemplo:LDI R19,OX99 ; R19=0X99STS 0X200, R19 ; Guarda R19 en la localización0x200
(SRAM INTERNA)
Intrucciones de Uc ATmega164p– Transferencia de datos IN: Indica a la CPU cargar un byte desde un Registro de
E/S a un Registro de Propósito General.a) Formato:
IN Rd,A ; Cargar una localidad de E/S alRegistro de
Propósito General.
34
IN Rd,A ; Cargar una localidad de E/S alRegistro de
Propósito General.
Donde: A [$000 a $03F] y Rd [R0-R31]
b) Ejemplo:
IN R20, 0X16 ; Copiar el contenido del R16(E/S) en R20
Intrucciones de Uc ATmega164p– Transferencia de datos IN:En el microcontrolador las 32 líneas E/S constituyen los 4pórticos de 8 bits
Para operar cada pórtico utiliza 3registros:
Entrada Pinx Sentido o dirección del
datoDDRx Salida PORTx
35
Para operar cada pórtico utiliza 3registros:
Entrada Pinx Sentido o dirección del
datoDDRx Salida PORTx
Intrucciones de Uc ATmega164p– Transferencia de datos IN:En el microcontrolador las 32 líneas e E/S constituyen los 4 pórticos de 8bits
Para operar cada pórtico utiliza 3registros:
Entrada Pinx Sentido o dirección del
datoDDRx Salida PORTx
$000$001$002$003$004$005$006
$03F
$020$021$022$023$024$025$026
$05F
PINA
DDRA
36
Para operar cada pórtico utiliza 3registros:
Entrada Pinx Sentido o dirección del
datoDDRx Salida PORTx
$000$001$002$003$004$005$006
$03F
$020$021$022$023$024$025$026
$05F
DDRAPORTA
PINB
DDRB
PORTB
Intrucciones de Uc ATmega164p– Transferencia de datos
IN:
b) Ejemplo:
IN R19,0X03 ; Carga R19 con la ubicación $003(R19=PINB)
– También:
IN R19,PINB ; Carga R19 con PINB
* En este caso se require incluir cabeceras en el programa 37
b) Ejemplo:
IN R19,0X03 ; Carga R19 con la ubicación $003(R19=PINB)
– También:
IN R19,PINB ; Carga R19 con PINB
* En este caso se require incluir cabeceras en el programa
Intrucciones de Uc ATmega164p– Transferencia de datos IN vs LDS: Permiten copiar el contenido de un Registro de E/S a un
Registro de propósito general.o El microcontrolador ejecuta la instrucción IN más rápido que la LDS.
IN= 1 ciclo de máquina LDS=2 ciclos de máquina
o La instrucción IN ocupa menos memoria de código que LDS.o IN= 2 byteso LDS=4 bytes
o La instrucción IN permite identificar a los Registros de E/S [$000-$03F]
– Transferencia de datos IN vs LDS: Permiten copiar el contenido de un Registro de E/S a un
Registro de propósito general.o El microcontrolador ejecuta la instrucción IN más rápido que la LDS.
IN= 1 ciclo de máquina LDS=2 ciclos de máquina
o La instrucción IN ocupa menos memoria de código que LDS.o IN= 2 byteso LDS=4 bytes
o La instrucción IN permite identificar a los Registros de E/S [$000-$03F]
38
Intrucciones de Uc ATmega164p– Transferencia de datos OUT: Indica a la CPU cargar un Registro de Propósito
General a un Registro de E/S.a) Formato:OUT A,Rr ; Carga el registro a la localidadde E/S
39
OUT A,Rr ; Carga el registro a la localidadde E/S
Donde: A [$000 a $03F] y Rd [R0-R31]
b) Ejemplo:
OUT PORTD, R12 ; Copiar el contenido del R12 aPORTDOUT SPL,R20 ; Copia el contenido de R20 aSPL
Intrucciones de Uc ATmega164p– Transferencia de datos
Ejemplo:IN R20, PIND ; Carga R20 con el contenido
de PIND (Reg. E/S)OUT PORTA, R20 ; Copia R20 en PORTA
No se puede copiar o guardar un valor directamente enuna localidad SRAM, ni en un Registro de E/S.
40
Ejemplo:IN R20, PIND ; Carga R20 con el contenido
de PIND (Reg. E/S)OUT PORTA, R20 ; Copia R20 en PORTA
Intrucciones de Uc ATmega164p– Aritméticas y Lógicas
INSTRUCCIÓN FUNCIÓNADD, ADDC, SUB, MUL, CP,CPC, CPI
Operaciones ycomparaciones
41
INC, DEC Incrementar y Disminuir
CPSE Operaciones lógicasCOM, NEG Complemento de uno y
complement a dos.
Intrucciones de Uc ATmega164p– Aritméticas y Lógicas ADD: Indica a la CPU añadir el valor de Rr a Rd y
guardar el resultado en el Registro Rd.a) Formato:ADD Rd,Rr ; Añadir Rr a Rd y almacena elresultado en Rd
42
ADD Rd,Rr ; Añadir Rr a Rd y almacena elresultado en Rd
b) Ejemplo:LDI R17, 0X25 ; Cargar 0x25 en R17LDI R18, 0X35 ; Cargar 0x35 en R18ADD R17, R18 ; Sumar el valor de R18 a R17
R17=R17+R18R17= 0x60
Intrucciones de Uc ATmega164p– Aritméticas y Lógicas SUB: Indica a la CPU restar el valor de Rr de Rd y
guardar el resultado en Rd.a) Formato:
SUB Rd, Rr ; Restar Rd-Rr
43
SUB Rd, Rr ; Restar Rd-Rr
b) Ejemplo:
LDI R16, 0X35 ; Cargar 0x35 en R16LDI R17, 0X25 ; Cargar 0x25 en R17SUB R16, R17 ; R16=R16-R17
R16= 0x10
Intrucciones de Uc ATmega164p– Aritméticas y Lógicas
INC: Incrementa el contenido de Rd en 1a) Formato:
INC Rd ; Incrementa Rd
44
INC Rd ; Incrementa Rd
Donde: 0<d<31b) Ejemplo:
INC R3 ; R3 = R3+1
Intrucciones de Uc ATmega164p– Aritméticas y Lógicas
DEC: Decrementa el contenido de Rd en 1a) Formato:
DEC Rd ; Rd = Rd-1
45
DEC Rd ; Rd = Rd-1
Donde: 0<d<31b) Ejemplo:LDI R20,3 ; R20 = 3DEC R20 ; R20 = 2DEC R20 ; R20 = 1DEC R20 ; R20 = 0
Intrucciones de Uc ATmega164p– Aritméticas y Lógicas COM: Invierte o complementa el contenido de Rd, y
guarda el resultado en Rd.a) Formato:
COM Rd ; Complemento de Rd
46
COM Rd ; Complemento de Rd
b) Ejemplo:LDI R20,0x55 ; R20 = 0x55OUT PORTB,R20 ; Copiar R20 en PORTBCOM R20 ; Complemento de R20OUT PORTB,R20 ; Copiar R20 a PORTB
PORTB= 0xAA
Intrucciones de Uc ATmega164p– Salto y bifurcación
INSTRUCCIÓN FUNCIÓNRJMP, IJMP, JMP Saltos incondicionalesRCALL,ICALL,CALL, RET Llamadas y retornos desde
subrutinas
47
Llamadas y retornos desdesubrutinas
CPSE Comparación y saltoincluído
SBRC, SBRS,SBIC, SBIS Saltos condicionadosBRxC, BRxS Bifurcaciones de acuerdo al
estado de las banderas
Salto: Es el proceso de repetir una secuenciade instrucciones o una operación undeterminado número de veces
Intrucciones de Uc ATmega164p– Salto y bifurcación: BRNE: Usa la bandera 0 (Z) del registro de estado. Si el resultado
de una operación es cero Z=1.
a) Formato:
BACK: ……………………; inicio del lazo
………………….. ; cuerpo del lazo
DEC Rn ; decrementar Rn,
BRNE BACK ; Salta a BACK si Z=0
48
BACK: ……………………; inicio del lazo
………………….. ; cuerpo del lazo
DEC Rn ; decrementar Rn,
BRNE BACK ; Salta a BACK si Z=0
Intrucciones de Uc ATmega164p– Salto y bifurcación:
Ejemplo 1: Añadir 3 al registro 19, 10 veces.INCLUDE "m164pdef.inc"LDI R16,10 ; Se define uncounter R16 = 10LDI R19,0 ; R19 = 0LDI R20,3 ; R20 = 3
REPETIR:ADD R19,R20 ; Sumar R19=R19+R20(R19=3)
DEC R16 ; Decrementar elcontador
BRNE REPETIR ; Repetir hasta queel contador=0
OUT PORTB, R19 ; Guardar la sumaen PORTB
49
Ejemplo 1: Añadir 3 al registro 19, 10 veces.INCLUDE "m164pdef.inc"LDI R16,10 ; Se define uncounter R16 = 10LDI R19,0 ; R19 = 0LDI R20,3 ; R20 = 3
REPETIR:ADD R19,R20 ; Sumar R19=R19+R20(R19=3)
DEC R16 ; Decrementar elcontador
BRNE REPETIR ; Repetir hasta queel contador=0
OUT PORTB, R19 ; Guardar la sumaen PORTB
Intrucciones de Uc ATmega164p– Salto y bifurcación:
Ejemplo 2: Escribir un programa para cargar al PORTBcon el valor 0x25 y obtenga el complemento delPORTB 700 veces.
700 es mayor a 255 La máxima capacidad de un Registrode Propósito General. Por lo tanto es necesario utilizar 2registros para implementar el contador.
50
Ejemplo 2: Escribir un programa para cargar al PORTBcon el valor 0x25 y obtenga el complemento delPORTB 700 veces.
700 es mayor a 255 La máxima capacidad de un Registrode Propósito General. Por lo tanto es necesario utilizar 2registros para implementar el contador.
Intrucciones de Uc ATmega164p– Salto y bifurcación:
Ejemplo 2:.INCLUDE "m164pdef.inc“.ORG 0 ;Programa inicia en 0x000
LDI R16,0x25 ; Cargo 0x25 en R16OUT PORTB,R16 ; Copia el contenido de R16 enPORTBLDI R20,10 ; Defino Lazo exterior (R20=10)
LazoEx: LDI R21,70 ; Defino Lazo interior (R21=70)LazoIn: COM R16 ; Complemento R16
OUT PORTB,R16 ; Copiar en PORTB el complementode R16
DEC R21 ; Decrementar lazo interiorBRNE LazoIN ; Repetir 70 vecesDEC R20 ; Decrementar lazo exteriorBRNE LazoEx ; Repetir 10 vece 51
Ejemplo 2:.INCLUDE "m164pdef.inc“.ORG 0 ;Programa inicia en 0x000
LDI R16,0x25 ; Cargo 0x25 en R16OUT PORTB,R16 ; Copia el contenido de R16 enPORTBLDI R20,10 ; Defino Lazo exterior (R20=10)
LazoEx: LDI R21,70 ; Defino Lazo interior (R21=70)LazoIn: COM R16 ; Complemento R16
OUT PORTB,R16 ; Copiar en PORTB el complementode R16
DEC R21 ; Decrementar lazo interiorBRNE LazoIN ; Repetir 70 vecesDEC R20 ; Decrementar lazo exteriorBRNE LazoEx ; Repetir 10 vece
Intrucciones de Uc ATmega164p– Salto y bifurcación:
En forma general las instrucciones de salto se clasificanen:o Incondicionales: Cambian el flujo del programa cada vez que
son llamadas sin ningún requisito o condición.
1. JMP Salto directo
2. RJMP Salto relativo
3. IJMP Salto indirecto
o Condicionales: Para su ejecución dependen delcumplimiento de una condición. Si la condición no se cumpleno se ejecuta el salto.
– Salto y bifurcación:
En forma general las instrucciones de salto se clasificanen:o Incondicionales: Cambian el flujo del programa cada vez que
son llamadas sin ningún requisito o condición.
1. JMP Salto directo
2. RJMP Salto relativo
3. IJMP Salto indirecto
o Condicionales: Para su ejecución dependen delcumplimiento de una condición. Si la condición no se cumpleno se ejecuta el salto.
52
Intrucciones de Uc ATmega164p– Salto y bifurcación: Incondicionales:JMP: Salta a una localidad de la memoria Flash (Memoria delprograma). El destino de salto puede ser una dirección ó unaetiqueta.• Formato:
– Salto y bifurcación: Incondicionales:JMP: Salta a una localidad de la memoria Flash (Memoria delprograma). El destino de salto puede ser una dirección ó unaetiqueta.• Formato:
53
JMP k ; k = dirección/etiqueta
El programa se va a ejecutar a partir de la dirección/etiquetaque indica la instrucción. El ensamblador calcula la direccióndel salto.
PC k
Intrucciones de Uc ATmega164p– Salto y bifurcación:
Incondicionales:RJMP: Salta a una localidad de la memoria Flash (Memoria delprograma) distante k localidades.• Formato:
– Salto y bifurcación:
Incondicionales:RJMP: Salta a una localidad de la memoria Flash (Memoria delprograma) distante k localidades.• Formato:
54
RJMP k
La dirección de salto se obtiene sumando una constante consigno (k) al PC.
PC PC+k+1
Intrucciones de Uc ATmega164p– Salto y bifurcación:
Incondicionales:IJMP: La dirección de salto es indicada por el contenido delregistro puntero Z.• Formato: IJMP
– Salto y bifurcación:
Incondicionales:IJMP: La dirección de salto es indicada por el contenido delregistro puntero Z.• Formato:
55
IJMP
La dirección de salto se obtiene del registro puntero Z.PCZ
• Ejemplo:LDI R30, 0 ; Parte baja de la dirección
de saltoLDI R31, 0X8 ; Parte alta de la dirección
de saltoIJMP ; Salto a la dirección $800
Intrucciones de Uc ATmega164p Condicionales:Instrucciones que operan con la influencia de SREG (Registro de Estado).
INSTRUCCIÓN CONDICIÓN
BRLO Bifurcar si C = 1
C= Bandera del carrySi existe carry C=1Si no existe carry C=0
Z= Bandera del 0Si el resultado de la operación=0Z=1Si el resultado de la operación distinto
de 0Z=0N=Bandera de Negación
Si el bit D7 del resultado = 0N=0(Signo +)
Si el bit D7 del resultado = 1N=1(Signo -)V=Bandera de desbordamiento
Se activa cuando el resultado de unaoperación
con números con signo es demasiado larga.56
BRLO Bifurcar si C = 1BRSH Bifurcar si C = 0BREQ Bifurcar si Z = 1BRNE Bifurcar si Z = 0BRMI Bifurcar si N = 1BRPL Bifurcar si N = 0BRVS Bifurcar si V = 1BRVC Bifurcar si V = 0
C= Bandera del carrySi existe carry C=1Si no existe carry C=0
Z= Bandera del 0Si el resultado de la operación=0Z=1Si el resultado de la operación distinto
de 0Z=0N=Bandera de Negación
Si el bit D7 del resultado = 0N=0(Signo +)
Si el bit D7 del resultado = 1N=1(Signo -)V=Bandera de desbordamiento
Se activa cuando el resultado de unaoperación
con números con signo es demasiado larga.
Intrucciones de Uc ATmega164p– Salto y bifurcación Registro de Estado y ALU:
32Registros de
Propósito General
57
ALU
SREGSREG
H,S,V,N,Z,C
BANDERAS
Intrucciones de Uc ATmega164p– Salto y bifurcación Registro de Estado y ALU:
32RPG
C= Bandera del carry (Detecta errores enoperaciones aritméticas sin signo.)
Si existe carry C=1Si no existe carry C=0
Z= Bandera del 0Si el resultado de la operación=0Z=1Si el resultado de la operación distinto
de 0Z=0N=Bandera de Negación
Si el bit D7 del resultado = 0N=0 (Signo +)Si el bit D7 del resultado = 1N=1 (Signo -)
58
ALU
SREGSREG
H,S,V,N,Z,CBANDERAS
C= Bandera del carry (Detecta errores enoperaciones aritméticas sin signo.)
Si existe carry C=1Si no existe carry C=0
Z= Bandera del 0Si el resultado de la operación=0Z=1Si el resultado de la operación distinto
de 0Z=0N=Bandera de Negación
Si el bit D7 del resultado = 0N=0 (Signo +)Si el bit D7 del resultado = 1N=1 (Signo -)
D7
D6
D5
D4
D3
D2
D1
D0
Intrucciones de Uc ATmega164p– Salto y bifurcación Registro de Estado y ALU:
32RPG
V=Bandera de desbordamientoSe activa cuando el resultado de una
operación con números consigno es demasiado larga.
S= Bit de signoOR EXCLUSIVE entre bandera N y V.
H= Bandera del carry intermedioSi existe un carry intermedio desde D3 a D4
durante una ADD ó SUB senecesita activar H.
59
ALU
SREGSREG
H,S,V,N,Z,CBANDERAS
V=Bandera de desbordamientoSe activa cuando el resultado de una
operación con números consigno es demasiado larga.
S= Bit de signoOR EXCLUSIVE entre bandera N y V.
H= Bandera del carry intermedioSi existe un carry intermedio desde D3 a D4
durante una ADD ó SUB senecesita activar H.
D7
D6
D5
D4
D3
D2
D1
D0
Intrucciones de Uc ATmega164p– Salto y bifurcación Registro de Estado y ALU:
32RPG Los estados de las banderas
indican condiciones queresultan después de laejecución de las instrucciones.Cada bandera puede ser usada
para realizar una bifurcacióncondicional.
60
ALU
SREGSREG
H,S,V,N,Z,CBANDERAS
Los estados de las banderasindican condiciones queresultan después de laejecución de las instrucciones.Cada bandera puede ser usada
para realizar una bifurcacióncondicional.
Intrucciones de Uc ATmega164p– Salto y bifurcación Registro de Estado y ALU:
Ejemplo:
LDI R19,3 ; R19 = 3 Z=0DEC R19 ; R19 = 2 Z=0DEC R19 ; R19 = 1 Z=0DEC R19 ; R19 = 0 Z=1
– Salto y bifurcación Registro de Estado y ALU:
Ejemplo:
LDI R19,3 ; R19 = 3 Z=0DEC R19 ; R19 = 2 Z=0DEC R19 ; R19 = 1 Z=0DEC R19 ; R19 = 0 Z=1
61
Intrucciones de Uc ATmega164p– Salto y bifurcación Registro de Estado y ALU:
Ejemplo:Mostrar el estado de las banderas C, H y Z :LDI R20,0x38 ; R20 = $38LDI R19,0x2F ; R19 = $2FADD R19,R20 ; R19 = R19+R20
– Salto y bifurcación Registro de Estado y ALU:
Ejemplo:Mostrar el estado de las banderas C, H y Z :LDI R20,0x38 ; R20 = $38LDI R19,0x2F ; R19 = $2FADD R19,R20 ; R19 = R19+R20
62
Bandera
Estado Detalle Valores
C 0 No hay carry despuésde D7
D7 = 0 0110 0111
H 1 Si existe carry entreD3 y D4
Carry = 1
Z 0 R20 no es igual a cero R20 = 0110 0111$67
Intrucciones de Uc ATmega164p– Salto y bifurcación Registro de Estado y ALU:
Ejemplo:Mostrar el estado de las banderas C, H y Z :LDI R19,0x9C ; R19 = $9CLDI R20,0x64 ; R20 = $64ADD R20,R19 ; R20 = R20+R19
– Salto y bifurcación Registro de Estado y ALU:
Ejemplo:Mostrar el estado de las banderas C, H y Z :LDI R19,0x9C ; R19 = $9CLDI R20,0x64 ; R20 = $64ADD R20,R19 ; R20 = R20+R19
63
Bandera
Estado Detalle Valores
C 1 Si hay carry despuésde D7
1 0000 0000
H 1 Si existe carry entreD3 y D4
Carry = 1
Z 1 R20 es igual a cero R20 = 1 0000 0000
Intrucciones de Uc ATmega164p– Salto y bifurcación / Manipulación de bits:
Condicionales:SBRC: No considera la siguiente instrucción si el bit delregistro es cero.• Formato: SBRC Rr, b
– Salto y bifurcación / Manipulación de bits:
Condicionales:SBRC: No considera la siguiente instrucción si el bit delregistro es cero.• Formato:
64
SBRC Rr, b
• Ejemplo:
SBRC R0,7 ; Omitir la siguiente instrucción si elbit 7 de R0 es 0
Intrucciones de Uc ATmega164p– Salto y bifurcación / Manipulación de bits:
Condicionales:SBRS: No considera la siguiente instrucción si el bit delregistro es uno.• Formato: SBRS Rr, b
– Salto y bifurcación / Manipulación de bits:
Condicionales:SBRS: No considera la siguiente instrucción si el bit delregistro es uno.• Formato:
65
SBRS Rr, b
• ejemplo:
SBRS R0,7 ; Omitir la siguiente instrucción si elbit 7 de R0 es 1
Intrucciones de Uc ATmega164p– Salto y bifurcación / Manipulación de bits:
Condicionales:SBIC: No considera la siguiente instrucción si el bit delRegistro de E/S es cero.• Formato: SBIC A, b ; A =
Registro E/S
– Salto y bifurcación / Manipulación de bits:
Condicionales:SBIC: No considera la siguiente instrucción si el bit delRegistro de E/S es cero.• Formato:
66
SBIC A, b ; A =Registro E/S
• ejemplo:
SBIC 0x3F,7 ; Omitir la siguiente instrucción si elbit 7 del R63 es 0
Intrucciones de Uc ATmega164p– Salto y bifurcación / Manipulación de bits:
Condicionales:SBIS: No considera la siguiente instrucción si el bit delRegistro de E/S es uno.• Formato: SBIS A, b ; A =
Registro E/S
– Salto y bifurcación / Manipulación de bits:
Condicionales:SBIS: No considera la siguiente instrucción si el bit delRegistro de E/S es uno.• Formato:
67
SBIS A, b ; A =Registro E/S
• ejemplo:
SBIC 0x3F,7 ; Omitir la siguiente instrucción si elbit 7 del R63 es 1
Intrucciones de Uc ATmega164p– Salto y bifurcación:
Condicionales: Comparar el contenido de un registro
Instrucción Formato FunciónCPI CPI Rd, k Compara el registro con un valor
inmediato.
68
CPI CPI Rd, k Compara el registro con un valorinmediato.
CP CP Rd, Rr Compara entre dos registrosCPC CPC Rd, Rr Compara entre dos registros y el
carry.CPSE CPSE Rd, Rr Compara entre dos registros y no
considera la siguiente instrucción sison iguales
Salto
Intrucciones de Uc ATmega164p– Salto y bifurcación:
Condicionales: Comparar el contenido de un registro
Instrucción
69
InstrucciónCPICP
CPCCPSE
NEMÓNICO FUNCIÓN
BREQ Saltar si son iguales
BRNE Saltar si no son iguales
BRSH Saltar si es igual o mayor
BRLO Saltar si es menor
Intrucciones de Uc ATmega164p– Salto y bifurcación Llamar a subrutinas CALL: Guarda en el Stack Pointer la dirección de la próxima instrucción
y salta a la localidad de la flash con dirección k.» Formato:
CALL k
70
CALL k
RCALL: Guarda en el Stack Pointer la dirección de lapróxima instrucción y salta a la localidad de la flashdistante k localidades, desde la ubicación de la instrucciónllamada.
Formato: RCALL k
Intrucciones de Uc ATmega164p– Salto y bifurcación Llamar a subrutinas
ICALL: Guarda en el Stack Pointer la dirección de la próximainstrucción, la ejecución del programa continua en ladirección especificada en el contenido del puntero Z.
» Formato: ICALL
– Salto y bifurcación Llamar a subrutinas
ICALL: Guarda en el Stack Pointer la dirección de la próximainstrucción, la ejecución del programa continua en ladirección especificada en el contenido del puntero Z.
» Formato:
71
ICALL
RET: Se emplea para volver de una subrutina previamentellamada por CALL
Formato: RET
RETI: Obtiene desde el Stack la dirección que fue guardadapor la interrupción.
Formato: RETI
Intrucciones de Uc ATmega164p– Subrutinas
Empleadas para facilitar y optimizar la programación.
Son manejadas por Instruciones de Salto.
Las direcciones de retorno se almacenan en la PILA o STACK.
Puede existir subrutinas anidadas.
Una subrutina debe terminar con la instrucción de retorno (RET).
– Subrutinas
Empleadas para facilitar y optimizar la programación.
Son manejadas por Instruciones de Salto.
Las direcciones de retorno se almacenan en la PILA o STACK.
Puede existir subrutinas anidadas.
Una subrutina debe terminar con la instrucción de retorno (RET).
72
Intrucciones de Uc ATmega164p– Transferencia de datos/ Manipulación de bits:SBI: Instrucción que permite escribir un bit del
Puerto a 1 L.
• Formato: SBI PORTx, b ; b =0,1,2,3,4,5,6,7
– Transferencia de datos/ Manipulación de bits:SBI: Instrucción que permite escribir un bit del
Puerto a 1 L.
• Formato:
73
SBI PORTx, b ; b =0,1,2,3,4,5,6,7
• Ejemplo:
SBI PORTB,7 ; Pin 7 del Puerto B tiene a lasalida 1 Lógico
Intrucciones de Uc ATmega164p
– Transferencia de datos/ Manipulación de bits:CBI: Instrucción que permite escribir un bit del
Puerto a 0L.
• Formato: CBI PORTx, b ; b =0,1,2,3,4,5,6,7
– Transferencia de datos/ Manipulación de bits:CBI: Instrucción que permite escribir un bit del
Puerto a 0L.
• Formato:
74
CBI PORTx, b ; b =0,1,2,3,4,5,6,7
• Ejemplo:
CBI PORTB,0 ; Pin 0 del Puerto B tiene a lasalida 0 Lógico
Intrucciones de Uc ATmega164p
– Instrucciones
Nemónico FunciónCLR Limpia un registroROL Recorre todos los bits del
registro destino a la izquierda.La bandera del acarreo se pasaal Bit 0 del registro y el Bit 7 sepasa a la bandera del acarreo, C.
75
ROL Recorre todos los bits delregistro destino a la izquierda.La bandera del acarreo se pasaal Bit 0 del registro y el Bit 7 sepasa a la bandera del acarreo, C.
SEC Configura a uno el bit de labandera de acarreo, C
CLC Limpia la bandera de acarreo, C.
Intrucciones de Uc ATmega164p
– Creación del programa:Editar Programa
Proyecto1.asm Código del programa/Archivo fuente
76
Depurar/Ejecutar
.eep .hex .map .lst .obj .err
Inicializarla
EEPROM
FLASH Etiquetasdefinidas
en elprograma.
Muestra el binario, elcódigo fuente y la
cantidad de memoriaque usa el programa
Entrada alsimulador
Errores
Intrucciones de Uc ATmega164p– Instrucciones de transferencia especiales LD: Carga el valor desde una localidad de la SRAM a los Registros de
Propósito General, utilizando direccionamiento indirecto.» Formato:
LD Rd, Registros_punteros
77
• Ejemplo:
LD R16, X ;Cargo en R16 el contenidoapuntado por X
Intrucciones de Uc ATmega164p– Instrucciones de transferencia especiales LD con Post-incremento: El valor del puntero se incrementa
posteriormente.» Formato:
LD Rd, Registros_punteros +
78
• Ejemplo:
-1era ejecución R16=Contenido apuntado por X-2da ejecución R16=Contenido apuntado por Xincrementado en 1
LD R16, X+
Intrucciones de Uc ATmega164p– Instrucciones de transferencia especiales LD con Pre-Disminución: El valor del puntero se disminuye
previamente.» Formato:
LD Rd, - Registros_punteros
79
• Ejemplo:
-1era ejecución R16=Contenido apuntado por Xdecrementado en 1
LD R16, -X
Intrucciones de Uc ATmega164p– Instrucciones de transferencia especiales LD con Desplazamiento: El valor del puntero se suma el
desplazamiento.» Formato:
LDD Rd, Registros_punteros(X/Y) + q
80
LDD Rd, Registros_punteros(X/Y) + q
• Ejemplo:• Ejemplo:
-1era ejecución R16=Contenido de la localidad apuntadapor Y pero desplazada en 8.
LDD R16, Y+8
Intrucciones de Uc ATmega164p– Instrucciones de transferencia especiales ST: Guardar el contenido de los Registros de Propósito General a una
dirección localizada en la SRAM mediante direccionamiento indirecto.
» Formato:
ST Registros_punteros,Rr
81
ST Registros_punteros,Rr
• Ejemplo:
Guardo en la localidad apuntada por X el contenido de R16
ST X,R16
Intrucciones de Uc ATmega164p– Instrucciones de transferencia especiales ST con Post-incremento: El valor del puntero se incrementa
posteriormente.» Formato:
ST Registros_punteros +, Rr
82
ST Registros_punteros +, Rr
• Ejemplo:
-1era ejecución, la localidad apuntada por X recibe elcontenido de R16-2da ejecución, la localidad apuntada por X recibe elcontenido de R16 incrementada en 1
ST X+,R16
Intrucciones de Uc ATmega164p– Instrucciones de transferencia especiales ST con Pre-Disminución: El valor del puntero se disminuye
previamente.» Formato:
ST -Registros_punteros,Rr
83
• Ejemplo:
-1era ejecución, la localidad apuntada por X recibe elcontenido de R16 decrementado en 1
ST -X , R16
Intrucciones de Uc ATmega164p– Instrucciones de transferencia especiales STD con Desplazamiento: El valor del puntero se suma el
desplazamiento.» Formato:
STD Registros_punteros(Z/Y) + q, Rr
84
STD Registros_punteros(Z/Y) + q, Rr
• Ejemplo:
-1era ejecución, la localidad apuntada por X perodesplazada en 8, recibe el contenido de R16
STD Z+8, R16
Intrucciones de Uc ATmega164p– Instrucciones de transferencia especiales LPM: Carga un byte del registro apuntado por Z a un registro destino
mediante direccionamiento indirecto. .• Ejemplo:
LDI ZH,high(Tabla*2) ;Inicializa elregistro ZLDI ZL,low(Tabla*2)LPM r16,Z ;Carga una constante dela memoria de
programa apuntada por Z
85
• Ejemplo:LDI ZH,high(Tabla*2) ;Inicializa elregistro ZLDI ZL,low(Tabla*2)LPM r16,Z ;Carga una constante dela memoria de
programa apuntada por Z
15 8 71 0
Dirección Selección