Actualizado el 12 de Mayo del 2021 (Publicado el 8 de Mayo del 2018)
1.105 visualizaciones desde el 8 de Mayo del 2018
147,2 KB
33 paginas
Creado hace 23a (13/03/2002)
Facultad de Informática
Universidad Complutense de Madrid
Curso 2001/02
Cuaderno de Prácticas
Laboratorio de Fundamentos de
Computadores
PARTE II:
Programación en ensamblador
Facultad de Informática
Universidad Complutense de Madrid
Laboratorio de Fundamentos de Computadores
1
Facultad de Informática
Universidad Complutense de Madrid
Curso 2001/02
EL PROGRAMA ENSAMBLADOR
1. Descripción
El programa ensamblador es el programa que realiza la traducción de un
programa escrito en ensamblador a lenguaje máquina. Esta traducción es directa e
inmediata, ya que las instrucciones en ensamblador no son más que nemotécnicos
de las instrucciones máquina que ejecuta directamente la CPU.
2. Estructura
Un programa en ensamblador está compuesto por líneas, conteniendo cada una
de ellas un comentario, una única instrucción o una directiva.
En lo que sigue se utilizan los símbolos <> para encerrar un identificador o un
número que el programador debe escribir; los símbolos [] encierran elementos
opcionales;
los símbolos {} encierran elementos que se puede escribir
consecutivamente varias veces; el carácter | separa elementos opcionales.
2.1 Comentarios
Una línea con un asterisco (*) en la primera columna se interpretará como un
comentario.
Ej:
* Esto son dos líneas de comentario porque el carácter
* de la primera columna es un asterisco
Un comentario también puede escribirse al final de la misma línea en que se
escribe una instrucción.
Ej:
ADD
D0,D1
Comentario sobre la instrucción ADD
Laboratorio de Fundamentos de Computadores
2
Facultad de Informática
Universidad Complutense de Madrid
Curso 2001/02
2.2 Instrucciones
[<etiq>] <Cód_ope>.<tamaño> <Fuente>,<Dest.> [<Coment.>]
La etiqueta etiq es opcional; si existe debe empezar en la primera columna; si
no existe debe haber por lo menos un espacio en blanco antes el código de
operación. El comentario también es opcional.
No todas las instrucciones tienen dos operandos. Las hay con uno solo, e
incluso sin ningún operando. Ejemplos:
Copiar el contenido de D0 en D1
Etiq1
MOVE.W D0,D1
ADD.W
NEG.W
BEQ.S
NOP
#3,D2
D2
Etiq1
2.3 Directivas
Controlan acciones auxiliares que realiza el programa ensamblador. No son
traducibles a código máquina, sino que indican al ensamblador las preferencias del
programador de cómo ha de efectuarse la traducción a lenguaje máquina. Ejemplo:
Variable
DS.B
1
Variable es la etiqueta, DS.B es la directiva y 1 es su argumento.
2.4 Control de ensamblado
IDNT:
Identificación del programa (Identification). Debe ser la primera línea
(no comentario) del programa. Tiene dos argumentos: los números de
la versión y la revisión del programa. Ej:
Programa1
IDNT 1,0
ORG:
Establece en qué posición de memoria absoluta se cargará el programa
(ORiGin). Ej:
Laboratorio de Fundamentos de Computadores
3
Facultad de Informática
Universidad Complutense de Madrid
Curso 2001/02
ORG
$2000
END:
Marca el final del programa. A partir de esta directiva se ignora el resto
del archivo. Ej:
END
2.5 Definición de símbolos
<Símbolo> EQU <Valor>
Sustituye <Símbolo> por <Valor> en el resto del programa (EQUal).
2.6 Definición y reserva de memoria
<Símbolo> DC.<tamaño>
<Valor>[{,Valor}]
DC (Define Constant) reserva una o varias posiciones de memoria, cada una de
tamaño <tamaño>, inicializándola con <Valor>. En el resto del programa podremos
referirnos a esta posición de memoria por su <Símbolo>.
<Símbolo> DS.<tamaño>
<Cantidad>
DS (Define Storage) reserva <Cantidad> posiciones de memoria de tamaño
<tamaño>, sin asignarles ningún contenido inicial. En el resto del programa
podremos referirnos a la posición inicial de este espacio de memoria por su
<Símbolo>.
2.7 Bases de numeración
Un número puede expresarse en diferentes bases de numeración,
precediéndolo del carácter que indica la base:
& (o nada) decimal
Laboratorio de Fundamentos de Computadores
4
Facultad de Informática
Universidad Complutense de Madrid
Curso 2001/02
$
%
@
''
hexadecimal
binario
octal
cadenas ASCII
Se recomienda trabajar siempre en hexadecimal, ya que esta es la base de
numeración que emplea el simulador al mostrar las direcciones de memoria y el
contenido de la memoria y de los registros.
3. Modelo de programa
Todos los programas que se desarrollen en este laboratorio deben seguir el
siguiente esquema:
1.- Directivas iniciales: identificación (IDNT) y especificación del origen absoluto
del programa en la posición $2000 (ORG $2000).
2.- Bifurcación incondicional (JMP Inicio) al principio del programa, que se
encuentra a continuación de la zona de datos.
3.- Declaración de símbolos EQU.
4.- Reserva de espacio de memoria para los datos del programa. (DC y DS)
5.- Instrucciones que componen el programa.
6.- Instrucción STOP #$2700, que causa que el simulador pare de simular. Esta
flujo de ejecución del
instrucción debe ser alcanzable sea cual sea el
programa.
7.- Directiva END, que el ensamblador reconoce como el fin del código fuente.
Se añadirán comentarios,
tanto en líneas separadas como en aquellas
instrucciones que se consideren necesario. Además se respetará el formato de
sangrías del siguiente ejemplo:
Laboratorio de Fundamentos de Computadores
5
Facultad de Informática
Universidad Complutense de Madrid
Curso 2001/02
************************************************
*
*
************************************************
*
Cálculos
PRACTICA 0: Ejemplo
IDNT
ORG
JMP
1,1
$2000
Inicio
*
Valor1
*
X
*
Inicio
EQU
7
DC.W
Valor1
MOVE.W
STOP
END
X,D0
#$2700
Laboratorio de Fundamentos de Computadores
6
Facultad de Informática
Universidad Complutense de Madrid
Curso 2001/02
PRÁCTICA 0: Codificación y depuración de
programas en ensamblador.
El objetivo de esta primera práctica es la toma de contacto con las herramientas
de ensamblado y simulación de programas ensamblador del Motorola 68000, que
se utilizarán para la realización de las prácticas de que consta esta parte de la
asignatura.
El desarrollo de un programa se compone de las siguientes etapas:
- Especificación del problema.
- Diseño de un diagrama de flujo orientado al
lenguaje objetivo
(ensamblador del 68000).
- Escritura del programa en lenguaje ensamblador (codificación).
- Edición del programa fuente.
- Ensamblado y enlace.
- Simulación.
- Depuración de errores.
- Optimización.
En esta primera práctica se aprenderán las nociones básicas necesarias para la
realización de las cinco últimas fases, que son las más directamente relacionadas
con el trabajo a efectuar en el laboratorio.
En lo que sigue, utilizaremos un problema ejemplo sobre el que basaremos esta
práctica. Este ejemplo consiste en la siguiente especificación:
Dados dos números X e Y, calcular:
1.- su suma
2.- el mayor de ellos.
Una especificación más formal del problema es la siguiente:
Dados dos números naturales X e Y, se pide calcular los resultados Suma y
Mayor:
Laboratorio de Fundamentos de Computadores
7
Facultad de Informática
Universidad Complutense de Madrid
Curso 2001/02
Suma
Y+X=
Mayor
=
siX,
YX
≥
siY,
Y<X
Como primera aproximación,
realizaremos un diagrama de flujo de las
operaciones, en donde detallamos los registros que necesitamos y la colocación
espacial de los bloques. Debemos tener en cuenta que un programa en
ensamblador no se compone únicamente de instrucciones que expresan de forma
abstracta el algoritmo que implementa, sino que, al contrario de lo que ocurre en
alto nivel, el programador necesita sopesar
las distintas opciones que la
arquitectura final ofrece: dónde y cómo almacenar variables, cómo manejar datos y
control, etc.
Inicio
D0 ← X
D1← Y
D1 ← D0 + D1
Suma ← D1
D1 ← Y
no
D0 ≥ D1
sí
Mayor ← D1
Mayor ← D0
Fin
Laboratorio de Fundamentos de Computadores
8
Facultad de Informática
Universidad Complutense de Madrid
Curso 2001/02
Tras el diagrama de flujo en donde, como vemos, hemos reflejado las etiquetas,
las variables intermedias, etc, editaremos el código sustituyendo las expresiones
por instrucciones en ensamblador, resultando el siguiente listado, que corresponde
al programa fuente:
************************************************
*
*
************************************************
*
Cálculos IDNT
PRACTICA 0: Cálculos
*
ORG
JMP
1,1
$2000
Inicio
Nombre del programa
Dirección de ubicación del
programa
Salta a la primera instrucción
7
25
EQU
EQU
*
* Constantes
*
Valor1
Valor2
*
* Variables
*
X
Y
Suma
Mayor
*
* Programa principal
*
Inicio
DC.W
DC.W
DS.W
DS.W
Valor1
Valor2
1
1
Valor inicial para X
Valor inicial para Y
Número X
Número Y
Primer resultado
Segundo resultado
Copia la var. X al registro D0
Copia la var. Y al registro D1
Suma los registros D0 y D1
MOVE.W X,D0
MOVE.W Y,D1
ADD.W D0,D1
MOVE.W D1,Suma Almacena el resultado en Suma
MOVE.W Y,D1
CMP.W D1,D0
BGE.S Then
MOVE.W D1,Mayor Almacena D1 en la var. Mayor
BRA.S Fin
MOVE.W D0,Mayor Almacena D0 en Mayor
Vuelve a cargar Y en D1
Compara los registros (D0-D1)
Salto si D0 es >= que D1
Salto al final del programa
STOP
END
#$2700
Finaliza el programa
Then
*
Fin
Laboratorio de Fundamentos de Computadores
9
Facultad de Informática
Universidad Complutense de Madrid
Curso 2001/02
Observemos en ese listado lo que serán las zonas que poseerá todo programa
en ensamblador, zonas heredadas de las existentes en los programas de alto nivel.
1.-Información del programa: número de práctica, nombre,...
2.- Una identificación del mismo: directiva IDNT.
3.- Especificación del lugar de carga del programa: directiva ORG.
4.- Salto incondicional a la primera instrucción que implementa el algoritmo.
5.- Zona de datos del programa, desglosada en declaración de constantes
(directiva EQU) y en declaración de almacenamiento de variables (directivas
DC y DS).
6.- Cuerpo del programa.
7.- Instrucción de fin de ejecución: STOP #$2700.
8.- Cua
Comentarios de: PARTE II: Programación en ensamblador (0)
No hay comentarios