Tema 3: Lenguaje ensamblador La primera abstracción de la máquina para el programador Índice • Introducción. • Generación código máquina: ensamblador, montador y cargador. • Instrucciones y directivas. • Macros y subrutinas. • Interfaz binario de aplicación (ABI). • Convenios de llamada a procedimientos. ¿Qué es? • Lenguaje: notación formal para describir algoritmos que serán ejecutados por un compilador. • Lenguaje ensamblador: representación simbólica del lenguaje máquina permitiendo que sea más legible y fácil de utilizar. Mnemónicos para instrucciones, símbolos en lugar de bits, etiquetas en lugar de direcciones, macros en lugar de repetir. Traductores inicio: JmI: fin: movf subwf btfss goto movf addwf goto movf subwf movwf sleep Lenguaje ensamblador I,W J,W STATUS,C JmI G,W H,W ;suma fin ;hemos terminado G,W H,W RESULT Lenguaje máquina 080C 020D 1D83 2807 080F 070E 2809 080F 070E 0090 0063 * Las instrucciones empleadas son del lenguaje ensamblador de los microcontroladores PIC de Microchip. Elementos del lenguaje ensamblador Símbolos inicio: Mnemónicos Etiquetas JmI: fin: movf subwf btfss goto movf addwf goto movf subwf movwf sleep I,W J,W STATUS,C JmI G,W H,W ;suma fin ;hemos terminado G,W H,W Comentarios RESULT Ensamblador Listado del programa Fichero objeto Segunda pasada Primera pasada Tabla de símbolos Montador y Cargador Fuente 1 Fuente 2 Fuente 3 Ensamblador Objeto 1 Objeto 2 Montador Objeto 3 Ejecutable Cargador Formato de una sentencia en ensamblador • ETIQUETA: Nombre que se le asigna a una posición de la memoria de programa. Empieza en la 1ª columna y suele ir seguida de ':‘. • MNEMÓNICO: Representación simbólica del campo de operación (COP). • OPERANDOS: Representados por símbolos o constantes, separados por comas. • COMENTARIOS: Comienzan con ';‘. inicio_bucle: addwf a,W ;Comienzo del bucle Tipos de sentencias • Instrucciones simbólicas del lenguaje máquina. o Corresponden con instrucciones del repertorio de instrucciones (ISA). o Son ejecutadas por el computador. • Directivas o pseudoinstrucciones. o No tienen traducción en lenguaje máquina. o Controlan la operación del programa ensamblador y la generación del programa en lenguaje máquina. • Comentarios. o Forman parte de los archivo fuente tipo texto. o No tienen traducción en lenguaje máquina. o Facilitan la comprensión del código. Tipos de directivas • De control: Compilación condicional. • De datos: Asignación de memoria, símbolos. • De formato de informes. • De definición de macros. • Para la creación de archivos objeto. Directivas de control • Permiten compilar código de forma condicional. • Permiten incluir otros archivos. #include “p16f84.inc” ifndef DEBUG ... endif if NIVEL_LOG > 5 ... endif Directivas de datos • Permiten controlar la ubicación de datos e instrucciones en la memoria. • Permiten hacer referencia a operandos de forma simbólica. STATUS equ 0x03 regs equ 0x0c cblock regs I,; I vale 0x0C J ; J vale 0x0D endc org 0x10 btfsc STATUS,2 main:movf I,0 addwf J,1 goto main Determina la dirección de Macros • Permiten asignar nombre a una secuencia de instrucciones: o Cuando se referencia, se produce una sustitución (expansión) de la macro. o No existe un salto a la macro, sino copias de la secuencia de instrucciones. o Aumenta la longitud del programa. o No requieren llamada ni retorno. o ¡Cuidado con los saltos a/desde una macro! Ejemplo de macro jge macro reg,cte,dest movlw cte & 0xff subwf reg,W btfsc STATUS,C goto dest endm movlw MAX_LUZ MAX_LUZ && 0xff 0xff movlw movlw & 0xff subwfMAX_LUZ nivel_luz, W subwf nivel_luz, W subwf nivel_luz, W btfsc STATUS,C btfsc STATUS,C STATUS,C btfsc goto apagar_luz apagar_luz goto goto apagar_luz jge nivel_luz, nivel_luz, MAX_LUZ, MAX_LUZ, apagar_luz apagar_luz jge jge nivel_luz, MAX_LUZ, apagar_luz Literales y expresiones • Cadenas de caracteres entre comillas. • Constantes numéricas en distintas bases: Tipo Sintaxis Decimal D'<dígitos>' Hexadecimal H'<dígitos>' 0x<dígitos>' Octal O'<dígitos>' Binario B'<dígitos>' ASCII A'<dígitos>' Ejemplo D'100' H'F5' 0xf5 O'206' B'100' A'o' • Operadores: $, aritméticos, high, low Subrutinas • Conjunto de instrucciones que implementan una función bien definida (funciones o procedimientos). o Unidad básica de abstracción. o Elemento básico de reutilización de código. o Hacen el código más estructurado, entendible y facil de utilizar. • Se implementan almacenando el PC en la pila. o call salva el PC en la pila. o return y semejantes, lo recuperan. Ejemplo de subrutina org 0 call proc goto $ proc: movf I,W subwf J,W btfsc STATUS,Z goto L1 movf G,W addwf H,W movwf F L1: movf F,W subwf I,W movwf RET return Conceptos importantes • Estructura general de sentencias ensamblador. • Pseudoinstrucciones o directivas. • Definición y utilitzación de macros. • Definición y utilización de subrutinas. • Empleo de la pila de en llamadas a subrutinas.