Manual de Prácticas
Microprocesadores y Microcontroladores
Aplicación de la plataforma de desarrollo
N.° de práctica: 3
Nombre completo del alumno: Aparicio Caamaño Omar Firma
N.° de brigada: - Fecha de elaboración: 27/8/2019 Grupo: 3
Introducción:
El lenguaje ensamblador refleja directamente la arquitectura y las instrucciones en lenguaje de
máquina de la CPU, y pueden ser muy diferentes de una arquitectura de CPU a otra.
Cada arquitectura de microprocesador tiene su propio lenguaje de máquina, y en consecuencia su
propio lenguaje ensamblador ya que este se encuentra muy ligado a la estructura del hardware
para el cual se programa. Los microprocesadores difieren en el tipo y número de operaciones que
soportan; también pueden tener diferente cantidad de registros, y distinta representación de los
tipos de datos en memoria. Aunque la mayoría de los microprocesadores son capaces de cumplir
esencialmente las mismas funciones, la forma en que lo hacen difiere y los respectivos lenguajes
ensamblador reflejan tal diferencia.
Instrucciones de CPU:
La mayoría de las CPU tienen más o menos los mismos grupos de instrucciones, aunque no
necesariamente tienen todas las instrucciones de cada grupo. Las operaciones que se pueden
realizar varían de una CPU a otra. Una CPU particular puede tener instrucciones que no tenga otro
y viceversa.
Los primeros microprocesadores de 8 bits no tenían operaciones para multiplicar o dividir números,
por ejemplo, y había que hacer subrutinas para realizar esas operaciones. Otras CPU puede que
no tengan operaciones de punto flotante y habría que hacer o conseguir bibliotecas que realicen
esas operaciones.
Las instrucciones de la CPU pueden agruparse, de acuerdo a su funcionalidad, en:
Operaciones con enteros: (de 8, 16, 32 y 64 bits dependiendo de la arquitectura de la CPU, en los
sistemas muy viejos también de 12, 18, 24, 36 y 48 bits).
Estas son operaciones realizadas por la Unidad aritmético lógica de la CPU:
Operaciones aritméticas. Como suma, resta, multiplicación, división, módulo, cambio de signo
Operaciones booleanas. Operaciones lógicas bit a bit como AND, OR, XOR, NOT
Operaciones de bits.
El lenguaje ensamblador tiene mnemónicos para cada una de las instrucciones de la CPU en
adición a otros mnemónicos a ser procesados por el programa ensamblador (como por ejemplo
macros y otras sentencias en tiempo de ensamblado).
Ensamblado
La transformación del lenguaje ensamblador en código máquina la realiza un
programa ensamblador, y la traducción inversa la puede efectuar un desensamblador. A diferencia
de los lenguajes de alto nivel, aquí hay usualmente una correspondencia 1 a 1 entre las
instrucciones simples del ensamblador y el lenguaje de máquina. Sin embargo, en algunos casos,
un ensamblador puede proveer "pseudo instrucciones" que se expanden en un código de máquina
más extenso a fin de proveer la funcionalidad necesaria y simplificar la programación. Por ejemplo,
para un código máquina condicional como "si X mayor o igual que", un ensamblador puede utilizar
una pseudoinstrucción al grupo "haga si menor que", y "si = 0" sobre el resultado de la condición
anterior. Los Ensambladores más completos también proveen un rico lenguaje de macros que se
utiliza para generar código más complejo y secuencias de datos.
Para el mismo procesador y el mismo conjunto de instrucciones de CPU, diferentes programas
ensambladores pueden tener, cada uno de ellos, variaciones y diferencias en el conjunto de
mnemónicos o en la sintaxis de su lenguaje ensamblador. Por ejemplo, en un lenguaje
ensamblador para la arquitectura x86, se puede expresar la instrucción para mover 5 al
registro AL de la siguiente manera: MOV AL, 5, mientras que para otro ensamblador para la misma
arquitectura se expresaría al revés: MOV 5, AL. Ambos lenguajes ensambladores harían
exactamente lo mismo, solo que está expresado de manera diferente. El primero usa la sintaxis
de Intel, mientras que el segundo usa la sintaxis de AT&T.
El uso del ensamblador no resuelve definitivamente el problema de cómo programar un sistema
basado en microprocesador de modo sencillo ya que para hacer un uso eficiente del mismo, hay
que conocer a fondo el microprocesador, los registros de trabajo de que dispone, la estructura de
la memoria, y muchas cosas más referentes a su estructura básica de funcionamiento.
Objetivos:
Implementar y verificar las sintaxis de un programa en lenguaje ensamblador utilizando el software y
tarjeta de desarrollo.
Se aprenderá a usar instrucciones básicas en lenguaje ensamblador para el core ARM, realizando
operaciones de carga y almacenamiento de datos, desde y hacia, registros y memoria. Ademas
utilizara las herramientas de depuración para analizar los resultados de la ejecución de las
instrucciones y asi hallar posibles errores y corregirlos.
Material y equipo:
Documentos: Set de instrucciones del core ARM M4, spnu118o ARM Assembly Language Tools
[Link] User´s Guide.
Tarjeta de desarrollo y ambiente IDE CSS.
Desarrollo:
1- Analice el empleo de directivas de reserva de datos, lectura y escritura de datos en memoria.
2- Empleando la sesión de depuración ejecute cada instrucción y analice el resultado.
3- Localice los símbolos declarados en la ventana Memory Browser y también identifique su
valor de dirección y el valor que contiene las celdas de memoria.
4- Describa el comportamiento de cada directiva e instrucción empleados:
a) Inicialización de datos en memoria RAM
b) Operaciones realizadas
c) Estado de registros antes y después de ejecutarse.
Conclusiones:
Se aprendió a utilizar algunas de las instrucciones instrucciones básicas en lenguaje ensamblador lo
cual se fueron realizando operaciones de carga y almacenamiento de datos hacia, registros y
memoria. Todo esto nos ayudó a realizar cada inciso que se nos pidió en la práctica y al utilizar la
depuración para analizar los resultados de la ejecución del programa y asi localizar errores.
Bibliografía: ARM Assembly Language Tools [Link] – User´s Guide. Literature
Number: SPNU118O January 2016. Disponible en
[Link]