You are on page 1of 16

Universidad

Rey Juan Carlos

ESTRUCTURA Y TECNOLOGA DE
COMPUTADORES
Programacin en ensamblador: conceptos bsicos

Luis Rincn Crcoles


Licesio J. Rodrguez-Aragn

Programacin en ensamblador: conceptos bsicos

Programa
1.
2.
3.
4.
5.

Introduccin.
Desarrollo de programas.
Sintaxis de un lenguaje ensamblador.
Pseudoinstrucciones en ensamblador.
Directivas en ensamblador.

Programacin en ensamblador: conceptos bsicos

Bibliografa
D.A. PATTERSON, J.L HENNESSY. Estructura y diseo de computadores.
Revert, 2000.
A. CLEMENTS. Microprocessor Systems Design. 3rd edition, ITP - PWS
Publishing Company, 1997.
J. SEPTIN, H. MECHA, R. MORENO, K. OLCOZ. La familia del MC68000.
Sntesis, 1995.
M68000 8/16/32 Bit Microprocessors Users Manual. 9th edition. Motorola, 1993.
Motorola M68000 Family Programmers Reference Manual. Motorola, 1992.
P. DE MIGUEL. Fundamentos de los computadores. 7 edicin, Paraninfo, 1999.
C. CERRADA, V. FELIU. Estructura y Tecnologa de Computadores I. UNED,
1993
W. STALLINGS. Organizacin y Arquitectura de Computadores. 5 edicin,
Prentice-Hall, 2000.

Programacin en ensamblador: conceptos bsicos

1. Introduccin
Los computadores ejecutan programas.
Programa: secuencia de operaciones conducentes a resolver un problema
determinado.
Caractersticas de los programas
Estn compuestos por secuencias de instrucciones o sentencias.
Se escriben utilizando una notacin formal conveniente.
Pueden ser escritos por personas (programadores), o bien pueden ser
generados automticamente mediante una herramienta adecuada.
Un programa en ejecucin se encuentra cargado en memoria principal.
Lenguaje de programacin: una notacin formal para describir algoritmos o
funciones que sern ejecutadas por un computador.

Programacin en ensamblador: conceptos bsicos

Tipos de lenguajes de programacin


Lenguajes de bajo nivel: cercanos a la arquitectura de la mquina.
Lenguajes de alto nivel: cercanos a la forma de pensar del programador.
Lenguaje mquina: el nico que la circuitera de la mquina es capaz de
interpretar.
Sus instrucciones se encuentran codificadas en binario.
Lenguajes simblicos: no son directamente interpretables por la circuitera de
la mquina.
Se codifican mediante smbolos alfanumricos, de puntuacin,
parntesis, separadores, etc.

Programacin en ensamblador: conceptos bsicos

Lenguajes de alto nivel


Son mtodos convenientes y sencillos de describir las estructuras de
informacin y las secuencias de acciones precisas para ejecutar tareas concretas.
Los lenguajes de alto nivel se acercan de alguna manera a la forma en que las
personas resolvemos los problemas.
Caractersticas:
Posibilidad de traduccin automtica a lenguaje mquina.
Independencia de la arquitectura del computador.
Transportabilidad entre diferentes computadores.

Algunos tipos de lenguajes de alto nivel:

Lenguajes de propsito general.


Lenguajes de propsito especfico (comerciales, cientficos, educativos, etc).
Lenguajes procedimentales
Lenguajes declarativos
Lenguajes de diseo de sistemas de informacin.

Los lenguajes de alto nivel son lenguajes simblicos no comprensibles


directamente por la circuitera del computador.
6

Programacin en ensamblador: conceptos bsicos

Lenguajes de bajo nivel


Se encuentran totalmente vinculados a la estructura del computador.
Estn diseados para sacar el mximo partido de las caractersticas fsicas del
computador.
Caractersticas:
Dependencia absoluta de la arquitectura del computador.
Imposibilidad de transportar programas entre distintas mquinas, salvo
que sean de la misma familia o compatibles.
Instrucciones poco potentes.
Programas muy largos.
Cdigos de operacin, datos y referencias en binario.
Tipos:
Lenguaje mquina.

Cdigos de operacin, datos y referencias en binario.


Directamente interpretable y ejecutable por la circuitera del computador.

Lenguaje ensamblador.
7

Programacin en ensamblador: conceptos bsicos

Lenguaje ensamblador
El lenguaje ensamblador (o lenguaje de ensamble, assembly language) es la
representacin simblica de la codificacin binaria de un computador.
Cdigos de operacin representados mediante cdigos nemotcnicos.
Datos y referencias codificadas mediante nombres simblicos (smbolos o
etiquetas).

Existe una correspondencia biunvoca entre las instrucciones de mquina y las


instrucciones de un lenguaje ensamblador.
Cada instruccin ensamblador es una codificacin simblica de una instruccin
de mquina.
Excepcin: ensambladores que proporcionan una mquina virtual con
pseudoinstrucciones.

Macroensambladores: permiten al programador definir secuencias de


instrucciones con nombre.
El lenguaje ensamblador debe ser traducido a lenguaje mquina para poder
ser interpretado y ejecutado directamente por el computador.
8

Programacin en ensamblador: conceptos bsicos

Lenguajes de alto nivel y lenguajes de bajo nivel


Cdigo mquina MC68000
Ensamblador
MC68000

Pascal
PROGRAM prueba;
VAR
n,s: INTEGER;
BEGIN
n := 18;
s := 81;
n := n+s;
END.

VAR
N
S

BEGIN

$400

????

$402

????

ORG

$400

EQU
DS.W
DS.W

*
1
1

$500 $31FC

ORG
EQU
MOVE.W
MOVE.W
MOVE.W
ADD.W
MOVE.B
TRAP
END

$500
*
#18,N
#81,S
S,D0
D0,N
#9,D0
#15

$506 $31FC

$0012
$0400
$0051
$0402
$50C

$3038
$0402

$510

$D178
$0400

$512

$103C
$0009

$518

$4E4F

Programacin en ensamblador: conceptos bsicos

Lenguajes de alto nivel y lenguajes de bajo nivel


La codificacin de programas en binario es conveniente y natural para la
circuitera del computador, pero es difcil para un programador humano.
El lenguaje ensamblador surgi para facilitar la escritura de programas de
computador.
Es un lenguaje simblico que da nombres a las instrucciones de mquina, y
permite dar nombres a posiciones de memoria que contienen instrucciones o
datos.

Los lenguajes de alto nivel facilitan la tarea de los programadores, ya que se


encuentran ms prximos a la forma de pensar de los humanos.
Control estructurado de flujo.
Comprobacin de tipos.

La programacin en lenguajes de alto nivel es ms productiva, ya que los


programas son ms cortos (en cuanto a lneas de cdigo).
Hoy en da la prctica totalidad de los programadores trabaja utilizando
lenguajes de alto nivel.
10

Programacin en ensamblador: conceptos bsicos

Lenguajes de alto nivel y lenguajes de bajo nivel


La circuitera del computador tan solo comprende los programas escritos en
lenguaje mquina.
Los programas escritos en lenguajes simblicos deben ser traducidos a
lenguaje mquina antes de ser ejecutados.
Compilador (compiler): traductor de lenguaje de alto nivel a lenguaje
ensamblador.
Hoy da los compiladores pueden traducir los programas directamente a lenguaje
mquina.
Ensamblador (assembler): traductor de lenguaje ensamblador a lenguaje
mquina.
Montador (linker): crea el cdigo mquina ejecutable final.
Cargador (loader): carga el cdigo ejecutable en memoria y lo prepara para su
ejecucin.
High-level language program

Program

Compiler

Assembler

Linker

Computer

Assembly language program

11

Programacin en ensamblador: conceptos bsicos

Terminologa
Cdigo (programa) fuente: cdigo escrito por el programador.
Puede estar escrito en cualquier lenguaje: alto nivel, ensamblador, cdigo
mquina (inusual).
Puede contener errores sintcticos porque el programador haya escrito mal el
programa.

Cdigo (programa) objeto: cdigo obtenido al traducir el cdigo a lenguaje


mquina.
No contiene errores sintcticos.
A veces no es directamente ejecutable.

Cdigo (programa) ejecutable: listo para ser ejecutado en el computador.


Puede contener errores lgicos debidos a que el programa no est bien diseado
y no realice correctamente la funcin para la cual se cre.

12

Programacin en ensamblador: conceptos bsicos

Jerarqua de traduccin
C program

Compiler

Assembly language program

Assembler

Object: Machine language module

Object: Library routine (machine language)

Linker

Executable: Machine language program

Loader

Memory

13

Programacin en ensamblador: conceptos bsicos

Lenguajes de alto nivel y lenguajes de bajo nivel


Factores que miden la calidad de los programas ejecutables:

Tamao en nmero de palabras de memoria.


Velocidad.

Tradicionalmente los compiladores generaban cdigo mquina de inferior calidad que el


que podan escribir programadores humanos.

Las memorias son mucho mayores hoy en da: el tamao ha dejado de ser crtico.

Los compiladores proporcionan hoy en da un cdigo mquina de alta calidad pequeo


y rpido, haciendo poco atractiva la programacin en ensamblador.

Los programadores de ensamblador siguen teniendo ventaja en cuanto a que disponen de


un mayor conocimiento global del programa que les permite realizar determinadas
optimizaciones del cdigo que resultan muy difciles para los compiladores.

Puede ser recomendable programar en ensamblador cuando la velocidad del programa


y su tamao sean crticos.

Caso especial: computadores empotrados (embedded computers).

Solucin mixta:

Programar en alto nivel la mayor parte del cdigo.


Programar en ensamblador las partes crticas en cuanto a velocidad.
Programar en ensamblador los sistemas con un tamao de memoria muy reducido.

14

Programacin en ensamblador: conceptos bsicos

2. Desarrollo de programas
Fases de desarrollo de un programa escrito en un lenguaje de alto nivel.
Descripcin del
problema

Edicin

Cdigo
fuente

Identificacin de
los datos de
entrada y de los
resultados

Compilacin

Cdigo
ensamblador
Cdigo
objeto

Diagrama de
flujo y/o
pseudocdigo

Errores
sintcticos

Ensamblaje

Cdigo
objeto

Montaje

Cdigo
ejecutable
Programa fuente
en lenguaje de
alto nivel

Errores lgicos

Verificacin

15

Programacin en ensamblador: conceptos bsicos

Desarrollo de programas en ensamblador: fases


1.
2.
3.
4.
5.
6.
7.
8.
9.

Especificacin del problema.


Elaboracin del algoritmo de la solucin.
Diseo del diagrama de flujo.
Codificacin en ensamblador.
Edicin del programa fuente.
Traduccin del programa fuente a cdigo mquina.
Montaje del programa ejecutable.
Carga y ejecucin del programa.
Verificacin del funcionamiento del programa.

16

Programacin en ensamblador: conceptos bsicos

Desarrollo de programas en ensamblador: fases


1. Especificacin del problema.
Estudio detallado de los requisitos que debe cumplir la solucin.
Anlisis de las entradas al programa y las salidas que debe producir.

2. Elaboracin del algoritmo de la solucin.


Establecimiento de los mdulos y las subrutinas que compondrn el programa.
Definicin y organizacin de los datos simples y las estructuras de datos
necesarias.
Si hay varios mdulos, se codifica cada uno de ellos por separado.

17

Programacin en ensamblador: conceptos bsicos

Desarrollo de programas en ensamblador: fases


3. Diseo del diagrama de flujo.
Diagrama de flujo: notacin grfica que permite representar la estructura de un
programa.

DIreccin del
flujo de ejecucin

Operacin

Operacin

Operacin
normal

Nombre

Operacin
de E/S

Llamada a
subprograma

Estructura de
seleccin
mltiple

Terminador
S
Condicin

Condicin
Opcin 1

Estructura de
decisin
simple

No

Opcin 2

...
Opcin N

Tipos:
Orientado al problema: capta la estructura del algoritmo de la solucin.
Orientado al lenguaje: capta peculiaridades del lenguaje de programacin utilizado.

18

Programacin en ensamblador: conceptos bsicos

Desarrollo de programas en ensamblador: fases


4. Codificacin en ensamblador.
El programa fuente se escribe en papel..
Si el diagrama de flujo es suficientemente detallado, esta fase es inmediata.
Si hay varios mdulos, se codifica cada uno de ellos por separado.

5. Edicin del programa fuente.


Transcripcin del programa escrito en lenguaje ensamblador a un fichero de
texto.
Para ello se utilizar como herramienta un editor de textos ASCII.
Si hay varios mdulos, se edita cada uno de ellos por separado.
19

Programacin en ensamblador: conceptos bsicos

Desarrollo de programas en ensamblador: fases


6. Traduccin del programa fuente a cdigo mquina.
Ensamblador
Traductor de lenguaje ensamblador a lenguaje mquina.
Genera un fichero con el cdigo objeto equivalente al cdigo fuente completo,
junto con informacin necesaria para el montaje.

Compilador
Traductor de lenguaje de alto nivel a ensamblador.
Hoy todos los compiladores traducen directamente a lenguaje mquina.
En tal caso generan un fichero con el cdigo objeto equivalente al cdigo fuente
completo, junto con informacin necesaria para el montaje.

Si el cdigo fuente contiene errores sintcticos, no se genera cdigo objeto.


Intrprete: traductor de lenguaje de alto nivel a lenguaje mquina.
Un intrprete traduce y ejecuta las instrucciones del programa fuente una por una,
sin generar fichero alguno con cdigo objeto.
Los intrpretes son propios de los llamados lenguajes interpretados (BASIC,
LISP, etc).

20

Programacin en ensamblador: conceptos bsicos

Desarrollo de programas en ensamblador: fases


7. Montaje del programa ejecutable.
El cdigo objeto procedente del traductor normalmente no puede ejecutarse
directamente, ya que le falta cierta informacin que lo impide.

Cdigo objeto procedente de bibliotecas predefinidas.


Cdigo objeto procedente de la traduccin de otros mdulos.
Referencias cruzadas entre objetos de diferentes mdulos.
Informacin dependiente del sistema operativo.

El montador se encarga de:


Resolver las referencias entre elementos de varios mdulos.
Asignar direcciones a los diferentes mdulos del programa.
Unir todos los mdulos generando un fichero conteniendo el mdulo ejecutable.

8. Carga y ejecucin del programa.


Consiste en la transferencia del programa ejecutable a la memoria del
computador desde el fichero en disco, y en el posterior lanzamiento de su
ejecucin.
Herramienta utilizada: cargador.
Pertenece al sistema operativo.
21

Programacin en ensamblador: conceptos bsicos

Montaje del programa ejecutable


Object file
sub:

Object file
Instructions

Relocation
records

Executable file

main:
jal ???

jal ???
Linker

call, sub
call, printf

C library
print:

main:
jal printf

jal sub
printf:

sub:

22

Programacin en ensamblador: conceptos bsicos

Desarrollo de programas en ensamblador: fases


9. Verificacin del funcionamiento del programa.
Comprobacin de los efectos causados por la ejecucin de las instrucciones
en las variables y el estado de la mquina.
Ejecutndolo directamente.
Utilizando un depurador.

Depurador: herramienta que permite verificar el funcionamiento de los


programas paso a paso a nivel de cdigo fuente.
Permite cargar programas en la memoria del computador.
Permite ejecutar programas paso a paso o de forma continua.
Permite establecer puntos de ruptura para detener la ejecucin del programa en
lugares determinados.
Permite ver los contenidos de los registros y la memoria, y modificar sus
contenidos en cualquier instante durante la ejecucin de los programas.

Caso particular: programa monitor.


Se encuentra grabado en la memoria ROM del computador.
Permite depurar programas en lenguaje mquina.
23

Programacin en ensamblador: conceptos bsicos

Desarrollo cruzado de programas


Se realiza cuando el programa ser ejecutado en una mquina (mquina
objetivo) con una arquitectura distinta de la del computador en que se ha
desarrollado (sistema de desarrollo).
Sistemas empotrados.
Sistemas an no implementados.

Traduccin: ensamblador cruzado.


El cdigo fuente y el cdigo mquina generado corresponden con la arquitectura
de la mquina objetivo, mientras que el traductor corre en el sistema de
desarrollo.

Montaje: montador de enlaces cruzado.


Genera cdigo para la mquina objetivo, pero corre en el sistema de desarrollo.

Verificacin: mediante un simulador o mediante la mquina objetivo.


Simulador: herramienta que corre en la mquina de desarrollo y que emula la
mquina objetivo.
Los simuladores ofrecen posibilidades de depuracin del programa ejecutable.

24

Programacin en ensamblador: conceptos bsicos

Desarrollo cruzado de programas

Descripcin del
problema

Edicin

Cdigo fuente
(ensamblador)
Identificacin de
los datos de
entrada y de los
resultados

Ensamblaje

Cdigo
objeto
Diagrama de
flujo y/o
pseudocdigo

Errores
sintcticos

Montaje
Errores lgicos
Cdigo
ejecutable

Programa fuente
en ensamblador

Verificacin en
un simulador

Verificacin en la
mquina objetivo

25

Programacin en ensamblador: conceptos bsicos

3. Sintaxis de un lenguaje ensamblador


Tipos de lneas en un programa en ensamblador:

Instrucciones: ejecutables por el computador.


Pseudoinstrucciones: secuencias de instrucciones con nombre predefinido.
Directivas: indicaciones para el traductor.
Lneas de comentario: suelen comenzar por un carcter especial, y son
ignoradas por el traductor en cuanto a la generacin de cdigo objeto.

Estructura de una instruccin en memoria:


Direccin

Cdigo de operacin Direcciones de operandos

Estructura de una lnea de un programa escrito en ensamblador:


Etiqueta

Nemotcnico

Operandos

Comentarios

Los campos de una lnea de programa se separan mediante delimitadores de


campo.

26

Programacin en ensamblador: conceptos bsicos

Etiquetas
La etiqueta identifica la lnea que encabeza.
Recomendaciones:
Utilizar slo letras o nmeros (comenzar por una letra).
Colocar la primera letra de la etiqueta en el primer carcter de la lnea.

Las etiquetas permiten al programador definir smbolos.


Smbolo: tira de caracteres que identifica un valor.

Cuando el traductor se encuentra con una etiqueta, la inserta en la tabla de


smbolos.

Nombre del smbolo

Tipo del smbolo

Valor del smbolo

SIMB1

TIPO1

VALOR1

SIMB2

TIPO2

VALOR2

...

...

...
27

Programacin en ensamblador: conceptos bsicos

Nemotcnico
Identifica:
Un cdigo de operacin de una instruccin del lenguaje.
Una pseudoinstruccin.
Una directiva.

El nemotcnico nunca comienza en el primer carcter de la lnea.

28

Programacin en ensamblador: conceptos bsicos

Campos de operandos
Identifican los operandos que intervienen en la instruccin o directiva.
Tipos de operandos:
Constantes
Numricas: suelen llevar un prefijo o un sufijo que identifica la base en que
estn expresadas: decimal (D), binaria (%,B), octal (O,@,Q,C) o
hexadecimal (H,$, 0x).
Alfabticas: entre comillas.
Smbolos
Predefinidos: registros, contador de direccin de ensamblaje, etc.
Implcitos.
Explcitos.
Expresiones
Pueden incluir constantes, smbolos implcitos o explcitos, el smbolo del
contador de direccin de ensamblaje, parntesis u operadores sencillos
(+,-,*,/,%,&,|,^,<<, etc).
LAS EXPRESIONES NO PUEDEN INCLUIR NOMBRES DE
REGISTROS NI USAR EL CONTENIDO DE LAS VARIABLES!
29

Programacin en ensamblador: conceptos bsicos

Comentarios
Son indicaciones para una mejor comprensin del programa ensamblador.
Pueden situarse a continuacin de los operandos, con al menos un espacio
en blanco entre medias.
En ocasiones puede exigirse incluir adems algn otro carcter
delimitador (*, ;, #).
En ocasiones se incluyen lneas completas de comentario.
En ese caso, la lnea de comentario comenzar con un carcter
delimitador en la primera posicin de la lnea (*, ;, #).

30

Programacin en ensamblador: conceptos bsicos

4. Pseudoinstrucciones en ensamblador
Una pseudoinstruccin es una instruccin ofrecida por el ensamblador, pero
no realizada por la circuitera.
A una pseudoinstruccin le corresponde una secuencia definida de
instrucciones realizadas por la circuitera.
Las pseudoinstrucciones proporcionan a la mquina un lenguaje ms rico
que el que realiza la circuitera.
Las pseudoinstrucciones facilitan la programacin en ensamblador sin
complicar la circuitera (aunque s complican el diseo del traductor).
No todos los traductores cuentan con pseudoinstrucciones.

31

Programacin en ensamblador: conceptos bsicos

5. Directivas en ensamblador
Informan al traductor acerca de cmo debe traducir el cdigo fuente a cdigo
mquina, pero no producen instrucciones en lenguaje mquina.
Las directivas pueden indicar informacin relativa a diversas cuestiones:

El aspecto del listado de ensamblaje.


La definicin de direcciones absolutas del programa.
Los tamaos y nombres simblicos adjudicados a constantes y variables.
Las direcciones de ensamblado de las instrucciones y los datos.
La definicin de smbolos importables y exportables.
La inclusin y delimitacin de secciones en el cdigo.
Etc.

Las directivas son procesadas por el traductor, que a partir de ellas adopta las
acciones pertinentes para realizar el proceso de ensamblaje y generacin de
listados y cdigo objeto.
El cdigo objeto no contiene ninguna directiva.
El programa ejecutable desconoce la existencia de directivas.
Las directivas nunca son tenidas en cuenta por el computador en tiempo de
ejecucin.
32