Assembler

85
SISTEMAS MICROPROCESADOS

description

Resumen del Lenguaje de Programación Assembler

Transcript of Assembler

SISTEMASMICROPROCESADOS

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