Un ejemplo
(totalmente inventado)
Nuestra máquina



Hemos fabricado una máquina que dibuja
sobre un papel cuadriculado.
Dispone de un ploter que podemos
programar.
La máquina está diseñada para realizar
tres tareas: mover el ploter, dibujar y girar
el ploter.
Lenguaje máquina


Para comunicarnos con la máquina,
diseñamos un lenguaje para indicarle cuál
de entre las tareas que puede hacer,
queremos que haga en cada momento.
Decidimos que cada orden estará escrita
con 6 bits
Lenguaje máquina

Los dos primeros bits, indicarán a la
máquina, cual de las tareas tiene que
realizar:




00
01
10
11
->
->
->
->
Gira un octavo de vuelta en sentido antihorario
Gira un octavo de vuelta en sentido horario
Pinta
Mueve sin pintar
Lenguaje máquina

Los siguientes 4 bits indicarán cuántas
veces se realiza la tarea en cuestión
(cuántos cuadros se avanza o cuántas
octavos de vuelta hay que girar).
Un programa
Como la longitud de cada instrucción es fija,
la máquina no tiene ninguna dificultad en
separar el código en instrucciones: es una
tarea totalmente mecánica y no requiere
ningún tipo de razonamiento.
010001100010010010100010000001100010010011
100010010001100101010001100010010011100011
Un programa
Como la longitud de cada instrucción es fija,
la máquina no tiene ninguna dificultad en
separar el código en instrucciones: es una
tarea totalmente mecánica y no requiere
ningún tipo de razonamiento.
010001 100010010010100010000001100010 010011
100010 010001100101010001100010010011 100011
Un programa
Como la longitud de cada instrucción es fija,
la máquina no tiene ninguna dificultad en
separar el código en instrucciones: es una
tarea totalmente mecánica y no requiere
ningún tipo de razonamiento.
010001 100010 010010100010000001 100010 010011
100010 010001 100101010001100010 010011 100011
Un programa
Como la longitud de cada instrucción es fija,
la máquina no tiene ninguna dificultad en
separar el código en instrucciones: es una
tarea totalmente mecánica y no requiere
ningún tipo de razonamiento.
010001 100010 010010 100010 000001 100010 010011
100010 010001 100101 010001 100010 010011 100011
Un programa
También es mecánico interpretar cada
instrucción, puesto que siempre, los dos
primeros bits son el comando y los otros
cuatro el parámetro.
010001 100010 010010 100010 000001 100010 010011
100010 010001 100101 010001 100010 010011 100011
Un programa
Ejecuta la orden 01
(gira a la derecha)
0001 veces (es decir, 1 vez)
010001 100010 010010 100010 000001 100010 010011
100010 010001 100101 010001 100010 010011 100011
Un programa
Ejecuta la orden 10
(dibuja) 0010 cuadros
(es decir, 2 cuadros)
010001 100010 010010 100010 000001 100010 010011
100010 010001 100101 010001 100010 010011 100011
Un programa
Escribe un programa que dibuje un cuadrado
de 5 cuadraditos de lado. Recuerda:
00
01
10
11
->
->
->
->
Gira un octavo de vuelta en sentido antihorario
Gira un octavo de vuelta en sentido horario
Pinta
Mueve sin pintar
Lenguaje ensamblador


La máquina sólo entenderá lo que se le diga con
ceros y unos pero para el programador resulta
muy incómodo.
El problema es fácil de resolver. Basta con
asignar a cada orden un conjunto de caracteres
fáciles de recordar:




00
01
10
11
->
->
->
->
GiraI
GiraD
Pinta
Mueve
Lenguaje ensamblador


También nos resultaría más cómodo permitirnos
escribir los parámetros en la base decimal en
lugar de la binaria.
Ya hemos diseñado un lenguaje ensamblador.
Ahora, naturalmente, hay que escribir un
programa que traduzca estas instrucciones en
ensamblador a las instrucciones en lenguaje
máquina que son las únicas que comprenderá
nuestro aparato.
Lenguaje ensamblador

Pero este traductor es fácil de diseñar
porque hace una tarea totalmente mecánica:
10
Pinta 6
0110
Lenguaje ensamblador

En este lenguaje ensamblador, el
programa anterior nos resulta mucho más
inteligible:





GiraD 1
Pinta 2
GiraD 2
Pinta 2
GiraI 1





Pinta 2
GiraD 3
Pinta 2
GiraD 1
Pinta 5




GiraD 1
Pinta 2
GiraD 3
Pinta 3
Lenguaje de alto nivel


Nuestra máquina sólo sabe hacer cuatro
tareas y aun así, darle órdenes en su
lenguaje, sin usar un lenguaje
ensamblador, es una tarea complicada.
Incluso en lenguaje ensamblador, la
programación es muy costosa para dibujos
que no sean muy sencillos, ya que sólo
disponemos de cuatro instrucciones (las
cuatro básicas).
Lenguaje de alto nivel

Será una tarea muy larga y tediosa si
queremos programar a nuestra máquina
para que haga el siguiente dibujo:
Lenguaje de alto nivel

Hay que pintar 28 segmentos. Entre cada dos de
ellos hay que hacer un giro y en varias
ocasiones hay que hacer un desplazamiento sin
pintar (no se puede hacer de un único trazo).
Lenguaje de alto nivel

Necesitamos más de 60 instrucciones
básicas de la máquina, sean en lenguaje
máquina o en lenguaje ensamblador.
Lenguaje de alto nivel


En lugar de resignarnos a utilizar sólo las
instrucciones de la máquina (y por tanto
muchas, si la tarea no es demasiado
sencilla), podemos utilizar instrucciones
complejas que equivalgan a varias
instrucciones básicas.
Por ejemplo, una instrucción que dibuje un
cuadrado, desde el punto actual hacia
arriba-derecha, arriba-izquierda, abajoderecha o abajo-izquierda.
Lenguaje de alto nivel

Por ejemplo, la sintaxis para dibujar un
cuadrado de 5 unidades de lado hacia
arriba a la derecha desde el punto actual,
podría ser:
Cuadrado(A, D, 5)
Lenguaje de
alto nivel
Pinta 5
GiraD 2
Pinta 5
GiraD 2
Pinta 5
GiraD 2
Pinta 5
GiraD2
Lenguaje
ensamblador
100101
010010
100101
010010
100101
010010
100101
010010
Lenguaje de alto nivel

Un leguaje que disponga de sentencias como
ésta, simplifica mucho nuestro programa:
Cuadrado( A, I, 1)
 GiraD 3
 Pinta1
 GiraI 1
 Cuadrado( B, D, 3)
 GiraD 3
 Mueve 1
etc

Lenguaje de alto nivel


La traducción del lenguaje de alto nivel al
lenguaje máquina es más compleja que
antes y tanto más cuanto más
complicadas sean las instrucciones que
queremos que contenga.
Ésto hace que los programas resulten algo
menos eficientes que los programados
directamente en lenguaje máquina (o en
ensamblador).
Lenguaje de alto nivel


A cambio, el lenguaje puede ser más
universal y que usuarios de distintas
máquinas puedan usar los mismos
programas.
Para ello basta que el lenguaje (que será
una sintáxis y un traductor al lenguaje de
una máquina) venga equipado con
traductores a distintas máquinas.
Lenguaje de alto nivel

Así, la instrucción anterior puede tener
distintas traducciones a máquinas distintas,
pero eso no es asunto del usuario final.
Lenguaje de
alto nivel
Cuadrado(A, D, 5)
Traducción a
otra máquina
Pinta 5
GiraD 2
Pinta 5
GiraD 2
Pinta 5
GiraD 2
Pinta 5
GiraD2
Lenguaje
ensamblador
1101100110
1101001101
1000010011
0010010010
1111011011
100101
010010
100101
010010
100101
010010
100101
010010
Descargar

8 Un ejemplo de lenguaje