Está en la página 1de 12

1 1

9. Conceptos basicos sobre


programacin en ensamblador.
Luis Rincn Crcoles
ngel Serrano Snchez de Len
Estructura y Tecnologa de Computadores (ITIG)
2
Tema 9. Conceptos bsicos sobre programacin en ensamblador.
1. Introduccin.
2. Tipos de lenguajes de programacin.
2.1. Lenguajes de alto nivel.
2.2. Lenguajes de bajo nivel.
3. Traduccin de programas a lenguaje mquina.
4. Desarrollo de programas.
5. Sintaxis de un lenguaje ensamblador.
6. Bibliografa.
Conceptos bsicos: lenguaje de programacin (alto/bajo nivel, simblico,
ensamblador, mquina), compilador, ensamblador, montador, cargador, depurador,
cdigo (fuente, objeto, ejecutable), tabla de smbolos, instrucciones,
pseudoinstrucciones, etiquetas, mnemotcnicos, directivas.
Programa
2 2
3
Tema 9. Conceptos bsicos sobre programacin en ensamblador.
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.
4
Tema 9. Conceptos bsicos sobre programacin en ensamblador.
2. Tipos de lenguajes de programacin
Lenguajes de alto nivel: cercanos a la forma de pensar del programador.
Ejemplo: PASCAL, Java, C, C++, Visual Basic, FORTRAN, etc.
Lenguajes simblicos: no son directamente interpretables por la
circuitera de la mquina.
Se codifican mediante smbolos alfanumricos, de puntuacin,
parntesis, separadores, etc.
Lenguajes de bajo nivel: cercanos a la arquitectura de la mquina.
Lenguaje mquina: el nico que la circuitera de la mquina es capaz de
interpretar.
Sus instrucciones se encuentran codificadas en binario.
3 3
5
Tema 9. Conceptos bsicos sobre programacin en ensamblador.
2.1. 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
Tema 9. Conceptos bsicos sobre programacin en ensamblador.
2.2. 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 (binario).
Cdigos de operacin, datos y referencias en binario.
Directamente interpretable y ejecutable por la circuitera del computador.
Lenguaje ensamblador (mnemotcnicos).
4 4
7
Tema 9. Conceptos bsicos sobre programacin en ensamblador.
Lenguaje ensamblador
El lenguaje ensamblador (assembly language) es la representacin simblica
de la codificacin binaria de un computador.
Cdigos de operacin representados mediante cdigos mnemotcnicos.
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.
El lenguaje ensamblador debe ser traducido a lenguaje mquina para poder
ser interpretado y ejecutado directamente por el computador.
8
Tema 9. Conceptos bsicos sobre programacin en ensamblador.
Ejemplo
swap (int v [], int k)
{i nt temp ;
tem p = v[ k] ;
v[ k] = v[k+1 ];
v[ k+ 1] = t emp;
}
swap:
m uli $2 , $5, 4
a dd $ 2, $ 4,$ 2
l w $15, 0( $2)
l w $16, 4( $2)
sw $16, 0( $2 )
sw $15, 4( $2)
j r $3 1
000 000 001010 000100 000 0000 00 1100 0
000 000 0010 00 111000 011 0000 01 0000 1
100 011 0001 10 001000 000 0000 00 0000 0
100 011 0011 11 001000 000 0000 00 0010 0
101 011 0011 11 001000 000 0000 00 0000 0
101 0 11 00 0110 001000 000 0000 00 0010 0
000 0 00 11 1110 000000 000 0000 00 0100 0
Bin ary mach ine
lang uage
pro gra m
(for MIPS)
C c omp il er
Ass e mble r
Ass e mb ly
lang uage
pro gra m
(for MIPS)
Hig h-l evel
lang uage
pro gra m
(in C)
5 5
9
Tema 9. Conceptos bsicos sobre programacin en ensamblador.
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
Tema 9. Conceptos bsicos sobre programacin en ensamblador.
3. Traduccin de programas a 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.
Cdigo (programa) fuente: cdigo escrito por el programador.
Escrito en cualquier lenguaje: alto nivel, ensamblador, cdigo mquina (inusual).
Puede contener errores sintcticos (el programador haya escrito mal el programa).
Cdigo (programa) objeto: cdigo obtenido al traducir el cdigo a lenguaje
mquina.
No contiene errores sintcticos. Si los hay, no se genera el cdigo objeto.
A veces no es directamente ejecutable.
Cdigo (programa) ejecutable: listo para ser ejecutado en el computador.
Puede contener errores lgicos debidos (programa no bien diseado).
6 6
11
Tema 9. Conceptos bsicos sobre programacin en ensamblador.
Assembler
Assembly language program
Compiler
C program
Linker
Executable: Machine language program
Loader
Memory
Object: Machine language module Object: Library routine (machine language)
Jerarqua de traduccin
12
Tema 9. Conceptos bsicos sobre programacin en ensamblador.
4. Desarrollo de programas
Edicin
Ensamblaje
Montaje
Verificacin
Errores lgicos
Errores
sintcticos
Cdigo fuente
(ensamblador)
Cdigo
objeto
Cdigo
ejecutable
Descripcin del
problema
Identificacin de
los datos de
entrada y de los
resultados
Diagrama de
flujo y/o
pseudocdigo
Programa fuente
en ensamblador
Fases de desarrollo de un programa escrito en un lenguaje ensamblador:
7 7
13
Tema 9. Conceptos bsicos sobre programacin en ensamblador.
Fases de desarrollo de programas
1. Especificacin del problema.
2. Elaboracin del algoritmo de la solucin.
3. Diseo del diagrama de flujo.
4. Codificacin en ensamblador.
5. Edicin del programa fuente.
6. Traduccin del programa fuente a cdigo mquina.
7. Montaje del programa ejecutable.
8. Carga y ejecucin del programa.
9. Verificacin del funcionamiento del programa.
14
Tema 9. Conceptos bsicos sobre programacin en ensamblador.
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.
3. Diseo del diagrama de flujo:
Diagrama de flujo: notacin grfica que permite representar la estructura de un
programa.
Nombre Operacin
Condicin
Terminador
Operacin
Llamada a
subprograma
DIreccin del
flujo de ejecucin
Operacin
de E/S
Operacin
normal
Estructura de
decisin
simple
S
No
Condicin
Estructura de
seleccin
mltiple
Opcin 1
Opcin 2
Opcin N
...
8 8
15
Tema 9. Conceptos bsicos sobre programacin en ensamblador.
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.
6. Traduccin del programa fuente a cdigo objeto:
Compilador: Lje. de alto nivel Lje. ensamblador (y generalmente Lje. Mquina).
Ensamblador: Lje. ensamblador Lje. Mquina.
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).
16
Tema 9. Conceptos bsicos sobre programacin en ensamblador.
7. Montaje del programa ejecutable (linkado):
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.
Buscar las rutinas de biblioteca y aadirlas como mdulos objeto.
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 principal del
computador desde el fichero en disco, y en el posterior lanzamiento de su ejecucin.
Herramienta utilizada: cargador o loader (pertenece al sistema operativo).
9 9
17
Tema 9. Conceptos bsicos sobre programacin en ensamblador.
Montaje del programa ejecutable
Object file
Instructions
Relocation
records
main:
jal ???

jal ???
call, sub
call, printf
Executable file
main:
jal printf

jal sub
printf:

sub:

Object file
sub:

C library
print:

Linker
18
Tema 9. Conceptos bsicos sobre programacin en ensamblador.
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 (debugger): 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.
Ejecutar programas paso a paso o de forma continua.
Establecer puntos de ruptura para detener la ejecucin del programa en lugares
determinados.
Ver los contenidos de los registros y la memoria, y modificar sus contenidos en cualquier
instante durante la ejecucin de los programas.
10 10
19
Tema 9. Conceptos bsicos sobre programacin en ensamblador.
5. 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
(alias).
Directivas: indicaciones para el traductor. En MIPS comienzan por ..
Comentario: suelen comenzar por un carcter especial (en MIPS es #), y son
ignoradas por el traductor en cuanto a la generacin de cdigo objeto.
Estructura de una lnea de un programa escrito en ensamblador:
Etiquetas: Identifican la lnea que encabezan. Recomendaciones:
Utilizar slo letras o nmeros (comenzar por una letra).
Colocar la primera letra de la etiqueta en el primer carcter de la lnea.
En MIPS las etiquetas terminan por el carcter :.
Comentarios Operandos Mnemotcnico Etiqueta
20
Tema 9. Conceptos bsicos sobre programacin en ensamblador.
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.
Mnemotcnicos (nunca comienza en el primer carcter de la lnea).
Identifican:
Un cdigo de operacin de una instruccin del lenguaje.
Una pseudoinstruccin.
Una directiva.
... ... ...
Valor del smbolo Tipo del smbolo Nombre del smbolo
VALOR1 TIPO1 SIMB1
VALOR2 TIPO2 SIMB2
11 11
21
Tema 9. Conceptos bsicos sobre programacin en ensamblador.
Operandos: Identifican los operandos que intervienen en la instruccin o
directiva.
Tipos de operandos:
Constantes (Inmediatos):
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 (empiezan por $).
Implcitos.
Explcitos.
Expresiones:
Pueden incluir constantes, smbolos implcitos o explcitos, parntesis u operadores
sencillos (+,-,*,/,%,&,|,^,<<, etc).
LAS EXPRESIONES NO PUEDEN INCLUIR NOMBRES DE REGISTROS NI
USAR EL CONTENIDO DE LAS VARIABLES!
Ejemplo: add $s0, $s1, $s2 + 2 Error!! No se puede sumar el registro $s2
ms 2 de esta manera.
22
Tema 9. Conceptos bsicos sobre programacin en ensamblador.
Pseudoinstrucciones en ensamblador
Una pseudoinstruccin es una instruccin ofrecida por el ensamblador,
pero no realizada por la circuitera.
Es como un alias al que 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.
Facilitan la programacin en ensamblador sin complicar la circuitera (aunque
s complican el diseo del traductor).
No todos los traductores cuentan con pseudoinstrucciones.
12 12
23
Tema 9. Conceptos bsicos sobre programacin en ensamblador.
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.
24
Tema 9. Conceptos bsicos sobre programacin en ensamblador.
D.A. PATTERSON, J.L HENNESSY. Computer Organization and Design. Morgan
Kaufmann, 2005.
D.A. PATTERSON, J.L HENNESSY. Estructura y diseo de computadores. Revert,
2000.
D. SWEETMAN. See MIPS Run. Morgan Kaufmann, 2002.
E. FARQUHAR, P. BUNCE. The MIPS Programmers Handbook. Morgan Kaufmann,
1994.
J. GOODMAN, K. MILLER. A Programmers View of Computer Architecture. Saunders
College Pub., 1993.
MIPS32 Architecture For Programmers Volume I: Introduction to the MIPS32
Architecture. MIPS Technologies Inc., 2003.
MIPS32 Architecture For Programmers Volume II: The MIPS32 Instruction Set. MIPS
Technologies Inc., 2003.
MIPS32 Architecture For Programmers Volume III: The MIPS32 Privileged Resource
Architecture. MIPS Technologies Inc., 2003.
MIPS64 Architecture For Programmers Volume I: Introduction to the MIPS64
Architecture. MIPS Technologies Inc., 2003.
MIPS64 Architecture For Programmers Volume II: The MIPS64 Instruction Set. MIPS
Technologies Inc., 2003.
MIPS64 Architecture For Programmers Volume III: The MIPS64 Privileged Resource
Architecture. MIPS Technologies Inc., 2003.
http://www.mips.com/
6. Bibliografa