Assembler

Resumen del Lenguaje de Programación AssemblerDescripción completa

Views 172 Downloads 3 File size 567KB

Report DMCA / Copyright

DOWNLOAD FILE

Recommend stories

Citation preview

SISTEMAS MICROPROCESADOS

Objetivos • Entender la sintaxis de programación en Assembler • Entender los registros básicos • Realizar ejercicios Básicos

Modos de Direccionamiento Son los distintos modos de acceder a los datos en memoria por parte del procesador. La instrucción se compone de la operación y los operandos 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 de direccionamiento.

Modos de Direccionamiento Son Las instrucciones pueden ser clasificadas por el número de operandos. Instrucciones sin operandos Instrucciones con un operando  Operando de destino Instrucciones con dos operandos separados por una coma: • 1ero = Operando destino • 2do = Operando origen Clase de instrucción Instrucciones sin operandos Instrucciones con uno o dos operandos

Modo de Direccionamiento Implícito Inmediato Directo Indirecto simple, con disminución previa, con incremento posterior o con desplazamiento.

Modos de Direccionamiento Directo a un Registro: El operando destino está contenido en el registro, es decir situado en la dirección indicada en la instrucción.

Modos de Direccionamiento Directo a dos Registro: En la instrucción se especifican los números de los registros que contienen los operandos de origen (Rr) y de destino (Rd). .

Modos de Direccionamiento Inmediato: En la instrucción se especifica un número que corresponde al operando de origen, es decir el dato está codificado en la propia instrucción. .

Modos de Direccionamiento Directo al Registro de E/S: En la instrucción se especifica el número del registro de E/S que contiene el operando de origen o de destino.

Modos de Direccionamiento Directo a la SRAM: En la instrucción se indica mediante 16 bits la dirección de la localidad de la SRAM que contiene el operando de origen o de destino

FLASHEND y RAMEND = memoria más alta de la localidad en los datos y en el programa.

Modos de Direccionamiento Indirecto a la SRAM: En la instrucción se especifica el registro puntero que apunta a la localidad de la SRAM que contiene el operando de origen o de destino.

Modos de Direccionamiento Indirecto a la SRAM con disminución previa: En este caso el puntero disminuye previamente su contenido antes de ejecutar la operación

Modos de Direccionamiento Indirecto a la SRAM con desplazamiento: En la instrucción se especifica el puntero y un valor, que sumados apuntan a la localidad SRAM que contiene el operando de origen o de destino.

Modos de Direccionamiento Direccionamiento a memoria de programa: La dirección del Byte se especifica por el contenido del registro Z. En este caso el puntero Z permite leer constantes de un Byte de la memoria del programa.

Modos de Direccionamiento Direccionamiento a memoria de programa con incremento posterior: Similar al anterior direccionamiento, pero adicionalmente el punter incrementa su contenido después de ejecutar la operación.

Modos de Direccionamiento Direccionamiento a memoria de programa con incremento posterior: Similar al anterior direccionamiento, pero adicionalmente el punter incrementa su contenido después de ejecutar la operación.

Instrucciones Resumen: En los microcontroladores los registros son usados para almacenar 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 conocimiento sobre características del microcontrolador tales como: Los registros La arquitectura El modo de procesamiento de datos

Instrucciones Formatos para representar datos: Existen cuatro formas para representar datos en AVR assembler: FORMATO

REPRESENTACIÓN

Hexadecimal 0x / 0X al inicio del número

EJEMPLO 0x99 / 0X25 / 0x200 / 0x0F

$ al inicio del número

$99 /

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´

Binario

$25 /$200

 Para representar cadenas se emplean comillas dobles.  Para Definir cadenas ASCII se usa .DB

Instrucciones Directivas :

1) .EQU (Equate): Usada para definir un valor constante o una dirección fija. Esta directiva asocia un número constante con un dato o una etiqueta de dirección, de modo que cuando una etiqueta aparece en el programa, su constante será reemplazada por la etiqueta.  Ejemplo:

.EQU

COUNT = 0x25

Instrucciones Directivas : 2) .SET Usada para definir un valor constante o una dirección fija. A diferencia de .EQU, consiste en que el valor asignado por .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 de un archivo al programa.  Ejemplo: .INCLUDE "m164pdef.inc"

Instrucciones Estructura del lenguaje Assembler Una instrucción contiene 4 campos: [label:]

mnemonic

[operandos]

[; comentario]

 Label  Permite al programa asociar una línea de código con un nombre. salto: DEC tempo  Mnemonic y operandos  Trabajan en forma conjunta para indicar al micro la acción o tarea a realizar. LDI R23,$55

 LDI Mnemonic

Instrucciones Reglas para el Etiquetado  El nombre de las etiquetas debe ser único.  Para el nombre de las etiquetas se puede usar letras mayúsculas, minúsculas, los dígitos del 0 al 9, y caracteres especiales (? @ . _ $)  El inicio de la etiqueta debe ser una letra.  No se puede usar etiquetas con nombres similares a instrucciones.

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 entre distintas localidades de memoria

De salto y bifurcación

Permiten alterar el curso de ejecución de los programas.

Para Manipulación de bits

Permiten realizar operaciones a nivel de bits

Aritméticas y Lógicas

Utilizadas para realizar operaciones aritméticas con bytes

De control

Realizan acciones sobre todo el funcionamiento del microcontrolador.

22

Intrucciones de Uc ATmega164p • Nomencalatura: Registros y operandos NOMENCALTURA Rd

Registro destino

Rr

Registro fuente

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 direccionamiento directo

23

Intrucciones de Uc ATmega164p – Transferencia de datos INSTRUCCIÓN

FUNCIÓN

MOV, MOVW

Copiar datos entre registros

LDI

Cargar un valor al registro

LDD, LD, LDS, POP

Cargar un registro desde la SRAM

ST, STD, STS, PUSH

Almacenar en SRAM un registro

LPM

Cargar un registro desde la flash

IN, OUT

Entrada y salida de los pórticos 24

Intrucciones de Uc ATmega164p – Transferencia de datos

 LDI: a) Formato: LDI Rd, K valor K

; Cargar Rd con el

Donde: K = Valor de 8 bits [0-255] decimal ó [00-FF] hexadecimal Rd = [R16-R31] b) Ejemplo: LDI R20,0X25 ; Carga el registro R20 con0x25

25

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 al registro Rd Donde: Rd y Rr [R0-R31] b) Ejemplo: MOV R10,R20 ; R10=R20 26

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ósito General. a) Formato:

LDS Rd, k ; Cargar Rd con el contenido de la 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 la localidad $001

27

AVR

Atmega164p –Registros E/S – 32 Registros de $000 propósito general $01F

$000

64 Registros de $020 E/S $05F 160 Registros de $060 E/S adicionales

$020 Registros de E/S

$03F

$05F

$0FF 1 KB para datos $100 SRAM INTERNA $4FF

Dirección como registro E/S

Localidad de memoria 28

Intrucciones de Uc ATmega164p – Transferencia de datos

 LDS: b) Ejemplo: LDS R10,0x1 ; Carga R10 con el contenido de la localidad $001 La localidad 0x1 corresponde al primer Registro de Propósito General  R1 Entonces como resultado de la ejecución de la instrucción se copia el contenido del registro R1 a R10. 29 R10=R1

Intrucciones de Uc ATmega164p – Transferencia de datos

 LDS: b) Ejemplo: LDS R5,0x200 ; Carga R5 con el contenido de la localidad $200 LDS R1,R0

; R1=R0

30

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 espacio de memoria de datos. a) Formato:

STS k,Rr ; Guarda el registro Rr en la localización k Donde: k es una dirección entre [$000 a $4FF]  Espacio de datos b) Ejemplo: STS 0x1,R20 ; Copia el contenido de R20 en la localidad $001 31 R1=R20

Intrucciones de Uc ATmega164p – Transferencia de datos

 STS: b) Ejemplo: STS 0x220,R25 ; Guarda R25 en la localidad $220 de la SRAM interna STS 0x38, R15 ; Guarda R15 en la localidad $038 de los registros de E/S corresponde al Puerto B 32

Intrucciones de Uc ATmega164p – Transferencia de datos

No se puede copiar o guardar un valor directamente en la SRAM, este proceso debe ser hecho por medio de los Registros de Propósito General.  Ejemplo: LDI R19,OX99 STS 0X200, R19 0x200

; R19=0X99 ; Guarda R19 en la localización (SRAM INTERNA)

33

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 al Registro de Propósito General. Donde: A [$000 a $03F] y Rd [R0-R31] b) Ejemplo: IN R20, 0X16 ; Copiar el contenido del R16 34 (E/S) en R20

Intrucciones de Uc ATmega164p – Transferencia de datos

 IN: En el microcontrolador las 32 líneas E/S constituyen los 4 pórticos de 8 bits Para operar cada pórtico utiliza 3 registros:  Entrada  Pinx  Sentido o dirección del dato DDRx  Salida  PORTx 35

Intrucciones de Uc ATmega164p – Transferencia de datos  IN: En el microcontrolador las 32 líneas e E/S constituyen los 4 pórticos de 8 bits

$000 $001 $002 $003 $004 $005 $006

$03F

PINA DDRA PORTA PINB DDRB PORTB

$020 $021 $022 $023 $024 $025 $026

$05F

Para operar cada pórtico utiliza 3 registros:  Entrada  Pinx  Sentido o dirección del dato DDRx  Salida  PORTx 36

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

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

o

La instrucción IN ocupa menos memoria de código que LDS. o

IN= 2 bytes

o

LDS=4 bytes

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 localidad de E/S Donde: A [$000 a $03F] y Rd [R0-R31] b) Ejemplo: OUT PORTD, R12 ; Copiar el contenido del R12 a PORTD OUT SPL,R20 ; Copia el contenido de R20 a 39 SPL

Intrucciones de Uc ATmega164p – Transferencia de datos

No se puede copiar o guardar un valor directamente en una localidad SRAM, ni en un Registro de E/S.  Ejemplo: IN R20, PIND ; Carga R20 con el contenido de PIND (Reg. E/S) OUT PORTA, R20 ; Copia R20 en PORTA

40

Intrucciones de Uc ATmega164p – Aritméticas y Lógicas INSTRUCCIÓN

FUNCIÓN

ADD, ADDC, SUB, MUL, CP, CPC, CPI

Operaciones y comparaciones

INC, DEC

Incrementar y Disminuir

CPSE

Operaciones lógicas

COM, NEG

Complemento de uno y complement a dos.

41

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 el resultado en Rd b) Ejemplo: LDI R17, 0X25 ; Cargar 0x25 en R17 LDI R18, 0X35 ; Cargar 0x35 en R18 ADD R17, R18 ; Sumar el valor de R18 a R17 R17=R17+R18 R17= 0x60

42

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 b) Ejemplo: LDI R16, 0X35 ; Cargar 0x35 en R16 LDI R17, 0X25 ; Cargar 0x25 en R17 SUB R16, R17 ; R16=R16-R17 R16= 0x10

43

Intrucciones de Uc ATmega164p – Aritméticas y Lógicas

 INC: Incrementa el contenido de Rd en 1 a) Formato: INC Rd ; Incrementa Rd Donde: 0