Sistemas integrados: lenguaje ensamblador

Los lenguajes ensambladores se desarrollaron para proporcionar mnemonicso símbolos para las instrucciones del código de nivel de máquina. Los programas en lenguaje ensamblador constan de mnemónicos, por lo que deben traducirse a código de máquina. Un programa que es responsable de esta conversión se conoce comoassembler. El lenguaje ensamblador a menudo se denomina lenguaje de bajo nivel porque trabaja directamente con la estructura interna de la CPU. Para programar en lenguaje ensamblador, un programador debe conocer todos los registros de la CPU.

Los diferentes lenguajes de programación como C, C ++, Java y varios otros lenguajes se denominan lenguajes de alto nivel porque no se ocupan de los detalles internos de una CPU. En contraste, un ensamblador se usa para traducir un programa en lenguaje ensamblador a código de máquina (a veces también llamadoobject code o opcode). De manera similar, un compilador traduce un lenguaje de alto nivel a código de máquina. Por ejemplo, para escribir un programa en lenguaje C, se debe usar un compilador C para traducir el programa al lenguaje máquina.

Estructura del lenguaje ensamblador

Un programa en lenguaje ensamblador es una serie de declaraciones, que son instrucciones en lenguaje ensamblador como ADD y MOV, o declaraciones llamadas directives.

Un instruction le dice a la CPU qué hacer, mientras que un directive (también llamado pseudo-instructions) da instrucciones al ensamblador. Por ejemplo, las instrucciones ADD y MOV son comandos que ejecuta la CPU, mientras que ORG y END son directivas de ensamblador. El ensamblador coloca el código de operación en la ubicación de memoria 0 cuando se usa la directiva ORG, mientras que END indica al final del código fuente. Una instrucción de lenguaje de programa consta de los siguientes cuatro campos:

[ label: ]   mnemonics  [ operands ]   [;comment ]

Un corchete ([]) indica que el campo es opcional.

  • los label fieldpermite que el programa se refiera a una línea de código por su nombre. Los campos de etiqueta no pueden exceder un cierto número de caracteres.

  • los mnemonics y operands fieldsjuntos realizan el trabajo real del programa y cumplen las tareas. Declaraciones como ADD A, C & MOV C, # 68 donde ADD y MOV son los mnemónicos, que producen códigos de operación; "A, C" y "C, # 68" son operandos. Estos dos campos pueden contener directivas. Las directivas no generan código de máquina y solo las usa el ensamblador, mientras que las instrucciones se traducen a código de máquina para que las ejecute la CPU.

1.0000         ORG  0H            ;start (origin) at location 0 
2 0000 7D25    MOV  R5,#25H       ;load 25H into R5 
3.0002 7F34    MOV  R7,#34H       ;load 34H into  R7 
4.0004 7400    MOV  A,#0          ;load 0 into A 
5.0006 2D      ADD  A,R5          ;add contents of R5 to A 
6.0007 2F      ADD  A,R7          ;add contents of R7 to A
7.0008 2412    ADD  A,#12H        ;add to A value 12 H 
8.000A 80FE    HERE: SJMP HERE    ;stay in this loop 
9.000C END                        ;end of asm source file
  • los comment field comienza con un punto y coma, que es un indicador de comentario.

  • Observe la etiqueta "AQUÍ" en el programa. Cualquier etiqueta que haga referencia a una instrucción debe ir seguida de dos puntos.

Montaje y ejecución de un programa 8051

Aquí discutiremos sobre la forma básica de un lenguaje ensamblador. Los pasos para crear, ensamblar y ejecutar un programa en lenguaje ensamblador son los siguientes:

  • Primero, usamos un editor para escribir un programa similar al programa anterior. Los editores como el programa EDIT de MS-DOS que viene con todos los sistemas operativos de Microsoft se pueden utilizar para crear o editar un programa. El editor debe poder producir un archivo ASCII. Un ensamblador usa la extensión "asm" para el archivo fuente en el siguiente paso.

  • El archivo fuente "asm" contiene el código del programa creado en el Paso 1. Se envía a un ensamblador 8051. El ensamblador luego convierte las instrucciones en lenguaje ensamblador en instrucciones de código de máquina y produce un.obj file (archivo objeto) y un .lst file(archivo de lista). También se llama comosource file, es por eso que algunos ensambladores requieren que este archivo tenga las extensiones "src". El archivo "lst" es opcional. Es muy útil para el programa porque enumera todos los códigos de operación y direcciones, así como los errores detectados por los ensambladores.

  • Los ensambladores requieren un tercer paso llamado linking. El programa de enlace toma uno o más archivos de objeto y produce un archivo de objeto absoluto con la extensión "abs".

  • A continuación, el archivo "abs" se alimenta a un programa llamado "OH" (convertidor de objeto a hexadecimal), que crea un archivo con la extensión "hexadecimal" que está listo para grabar en la ROM.

Tipo de datos

El microcontrolador 8051 contiene un solo tipo de datos de 8 bits, y cada registro también tiene un tamaño de 8 bits. El programador tiene que dividir los datos de más de 8 bits (00 a FFH, o 255 en decimal) para que puedan ser procesados ​​por la CPU.

DB (definir byte)

La directiva DB es la directiva de datos más utilizada en el ensamblador. Se utiliza para definir los datos de 8 bits. También se puede utilizar para definir datos en formato decimal, binario, hexadecimal o ASCII. Para decimal, la "D" después del número decimal es opcional, pero es necesaria para "B" (binario) y "Hl" (hexadecimal).

Para indicar ASCII, simplemente coloque los caracteres entre comillas ('así'). El ensamblador genera el código ASCII para los números / caracteres automáticamente. La directiva DB es la única directiva que se puede utilizar para definir cadenas ASCII de más de dos caracteres; por lo tanto, debe usarse para todas las definiciones de datos ASCII. Algunos ejemplos de DB se dan a continuación:

ORG  500H 
DATA1:  DB   28                     ;DECIMAL (1C in hex) 
DATA2:  DB   00110101B              ;BINARY  (35 in hex) 
DATA3:  DB   39H                    ;HEX 
        ORG  510H 
DATA4:  DB   "2591"                 ;ASCII  NUMBERS 
        ORG  520H                         
DATA6:  DA   "MY NAME IS Michael"   ;ASCII CHARACTERS

Se pueden usar comillas simples o dobles en cadenas ASCII. DB también se usa para asignar memoria en trozos de tamaño de bytes.

Directivas de ensamblador

Algunas de las directivas de 8051 son las siguientes:

  • ORG (origin)- La directiva de origen se utiliza para indicar el comienzo de la dirección. Toma los números en formato hexadecimal o decimal. Si se proporciona H después del número, el número se trata como hexadecimal, de lo contrario decimal. El ensamblador convierte el número decimal en hexadecimal.

  • EQU (equate)- Se utiliza para definir una constante sin ocupar un lugar de memoria. EQU asocia un valor constante con una etiqueta de datos para que la etiqueta aparezca en el programa, su valor constante será sustituido por la etiqueta. Mientras se ejecuta la instrucción "MOV R3, #COUNT", el registro R3 se cargará con el valor 25 (observe el signo #). La ventaja de usar EQU es que el programador puede cambiarlo una vez y el ensamblador cambiará todas sus ocurrencias; el programador no tiene que buscar en todo el programa.

  • END directive- Indica el final del archivo fuente (asm). La directiva END es la última línea del programa; El ensamblador ignora cualquier cosa después de la directiva END.

Etiquetas en lenguaje ensamblador

Todas las etiquetas en lenguaje ensamblador deben seguir las reglas que se detallan a continuación:

  • Cada nombre de etiqueta debe ser único. Los nombres utilizados para las etiquetas en la programación en lenguaje ensamblador consisten en letras alfabéticas en mayúsculas y minúsculas, números del 0 al 9, y caracteres especiales como signo de interrogación (?), Punto (.), A la tasa @, guión bajo (_), y dólar ($).

  • El primer carácter debe estar en carácter alfabético; no puede ser un número.

  • Las palabras reservadas no se pueden utilizar como etiqueta en el programa. Por ejemplo, las palabras ADD y MOV son las palabras reservadas, ya que son mnemotécnicos de instrucción.