Resumen del Lenguaje de Programación AssemblerDescripción completa
Views 172 Downloads 3 File size 567KB
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