PDF de programación - PARTE II: Programación en ensamblador

Imágen de pdf PARTE II: Programación en ensamblador

PARTE II: Programación en ensambladorgráfica de visualizaciones

Actualizado el 12 de Mayo del 2021 (Publicado el 8 de Mayo del 2018)
900 visualizaciones desde el 8 de Mayo del 2018
147,2 KB
33 paginas
Creado hace 22a (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



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
  • Links de descarga
http://lwp-l.com/pdf10953

Comentarios de: PARTE II: Programación en ensamblador (0)


No hay comentarios
 

Comentar...

Nombre
Correo (no se visualiza en la web)
Valoración
Comentarios...
CerrarCerrar
CerrarCerrar
Cerrar

Tienes que ser un usuario registrado para poder insertar imágenes, archivos y/o videos.

Puedes registrarte o validarte desde aquí.

Codigo
Negrita
Subrayado
Tachado
Cursiva
Insertar enlace
Imagen externa
Emoticon
Tabular
Centrar
Titulo
Linea
Disminuir
Aumentar
Vista preliminar
sonreir
dientes
lengua
guiño
enfadado
confundido
llorar
avergonzado
sorprendido
triste
sol
estrella
jarra
camara
taza de cafe
email
beso
bombilla
amor
mal
bien
Es necesario revisar y aceptar las políticas de privacidad