Está en la página 1de 9

Lenguaje de máquina

El lenguaje de máquina o código máquina es el sistema de códigos


directamente interpretable por un circuito microprogramable, como
el microprocesador de una computadora o el microcontrolador de un autómata.
Este lenguaje está compuesto por un conjunto de instrucciones que determinan
acciones a ser tomadas por la máquina. Un programa consiste en una cadena
de estas instrucciones más un conjunto de datos sobre el cual se trabaja. Estas
instrucciones son normalmente ejecutadas en secuencia, con eventuales
cambios de flujo causados por el propio programa o eventos externos. El
lenguaje de máquina es específico de la arquitectura de la máquina, aunque el
conjunto de instrucciones disponibles pueda ser similar entre arquitecturas
distintas.
Los circuitos microprogramables son digitales, lo que significa que trabajan con
dos únicos niveles de tensión. Dichos niveles, por abstracción, se simbolizan
con los números 0 y 1, por eso el lenguaje de máquina sólo utiliza dichos
signos. Esto permite el empleo de las teorías del álgebra booleana y
del sistema binario en el diseño de este tipo de circuitos y en su programación.

1. ¿Qué es un programa?
Un programa es una secuencia de instrucciones mediante las cuales el ordenador ejecuta
diferentes acciones de acuerdo con los datos que esté procesando.

Otras definiciones:

 Definición de la RAE [fuente]

o Cada una de las operaciones que, en un orden determinado, ejecutan


ciertas máquinas.
o Conjunto unitario de instrucciones que permite a un ordenador realizar
funciones diversas, como el tratamiento de textos, el diseño de gráficos, la
resolución de problemas matemáticos, el manejo de bancos de datos, etc.
 Definición de la Wikipedia [fuente]

o Un programa informático es un conjunto de instrucciones que una vez


ejecutadas realizarán una o varias tareas en una computadora. Sin
programas, estas máquinas no pueden funcionar.1 2 Al conjunto general
de programas, se le denomina software, que más genéricamente se refiere
al equipamiento lógico o soporte lógico de una computadora digital.
 Definición de EcuRed [fuente]

o Es un conjunto de instrucciones que una vez ejecutadas realizarán una o


varias tareas en una computadora. Sin programas, estas máquinas no
pueden funcionar. Al conjunto general de programas, se le denomina
software, que más genéricamente se refiere al equipamiento lógico o
soporte lógico de una computadora digital.
2. Código fuente y código ejecutable
Diferencias entre código fuente (creado por personas) y código ejecutable (leído por
máquinas): [fuente]

 Código fuente: Conjunto de sentencias entendibles por el programador que


componen el programa o una parte de ello. Suele estar almacenado en un fichero
del tipo texto como los que se pueden abrir por ejemplo, con el bloc de notas o
Wordpad en los entornos Windows. El código fuente estará escrito en un lenguaje
de programación determinado, elegido por el programador, como pueden ser:
Basic, C, C++, C#, Java, Perl, Python, PHP.
 Código objeto: Conjunto de instrucciones y datos escritos en un lenguaje que
entiende el ordenador directamente: binario o código máquina. Provienen de la
traducción de cierto código fuente, es un fragmento del programa final y es
específico de la plataforma de ejecución.
 Código ejecutable: Reúne diferentes códigos u objetos generados por los
programadores junto con las “librerías de uso general” (propias del entorno o del
lenguaje de programación) componiendo el programa final. Este es el código que
ejecutan los usuarios del sistema, y es específico para una plataforma concreta:
Windows, Linux, Mac OS, o cierto sistema Hardware.
Definición de Wikipedia de código fuente [fuente]

 El código fuente de un programa informático (o software) es un conjunto de líneas


de texto que son las instrucciones que debe seguir la computadora para ejecutar
dicho programa. Por tanto, en el código fuente de un programa está escrito por
completo su funcionamiento.
Definición de Wikipedia de código ejecutable [fuente]

 Código ejecutable corresponde a las unidades de programas, donde el ordenador


puede realizar las instrucciones compiladas mediante el compilador y el enlazador
de librerías.
Diagrama en el que se muestra un código fuente y un código en 0s y 1s. [fuente]

Código fuente en Scratch [fuente]

Código en ceros y unos [fuente]


3. Programas y recetas:
1. Explica a alguien ir desde el sitio donde estas a la parada de bus más cercana.
(secuencia) + concepto de eficiencia del programa.
2. Explica a alguien cómo jugar al escondite (alternativas).
3. Explica a alguien enviar 50 felicitaciones de navidad (repetitivas).
Puesta en común:

 ¿Cómo optimizarías tu explicación del proceso de llegar a la parada? Es decir, la


secuencia.
 ¿Si se sigue al pie de la letra es posible llegar a la parada?
 ¿Faltaría alguna instrucción?
 En el escondite ¿todas las alternativas propuestas son posibles? ¿habría más?
 ¿Habría algún fallo en alguna de las repeticiones?

Existen dos tipos de lenguajes claramente diferenciados;


los lenguajes de bajo nivel y los de alto nivel.
El ordenador sólo entiende un lenguaje conocido como código binario o código
máquina, consistente en ceros y unos. Es decir, sólo utiliza 0 y 1 para codificar
cualquier acción. 

Los lenguajes más próximos a la arquitectura hardware se denominan


lenguajes de bajo nivel y los que se encuentran más cercanos a los
programadores y usuarios se denominan lenguajes de alto nivel. 

Lenguajes de bajo nivel 

Son lenguajes totalmente dependientes de la máquina, es decir que el


programa que se realiza con este tipo de lenguajes no se pueden migrar o
utilizar en otras maquinas. 

Al estar prácticamente diseñados a medida del hardware, aprovechan al


máximo las características del mismo. 

Dentro de este grupo se encuentran: 

 El lenguaje maquina: este lenguaje ordena a la máquina las operaciones fundamentales


para su funcionamiento. Cnsiste en la combinación de 0's y 1's para formar las ordenes
entendibles por el hardware de la maquina. 
Este lenguaje es mucho más rápido que los lenguajes de alto nivel. 
La desventaja es que son bastantes difíciles de manejar y usar, además de tener
códigos fuente enormes donde encontrar un fallo es casi imposible.
 El lenguaje ensamblador es un derivado del lenguaje maquina y esta formado por
abreviaturas de letras y números llamadas mnemotécnicos. Con la aparición de este
lenguaje se crearon los programas traductores para poder pasar los programas escritos
en lenguaje ensamblador a lenguaje máquina. Como ventaja con respecto al código
máquina es que los códigos fuentes eran más cortos y los programas creados ocupaban
menos memoria. Las desventajas de este lenguaje siguen siendo prácticamente las
mismas que las del lenguaje ensamblador, ñadiendo la dificultad de tener que aprender
un nuevo lenguaje difícil de probar y mantener.

Lenguajes de alto nivel 

Son aquellos que se encuentran más cercanos al lenguaje natural que al


lenguaje máquina. 
Están dirigidos a solucionar problemas mediante el uso de EDD's. 

Nota: EDD's son las abreviaturas de Estructuras Dinamicas de Datos,


algo muy utilizado en todos los lenguajes de programación. Son
estructuras que pueden cambiar de tamaño durante la ejecución del
programa. Nos permiten crear estructuras de datos que se adapten a
las necesidades reales de un programa.

Se tratan de lenguajes independientes de la arquitectura del ordenador. Por lo


que, en principio, un programa escrito en un lenguaje de alto nivel, lo puedes
migrar de una máquina a otra sin ningún tipo de problema. 

Estos lenguajes permiten al programador olvidarse por completo del


funcionamiento interno de la maquina/s para la que están diseñando el
programa. Tan solo necesitan un traductor que entiendan el código fuente
como las características de la maquina. 

Suelen usar tipos de datos para la programación y hay lenguajes de propósito


general (cualquier tipo de aplicación) y de propósito especifico (como
FORTRAN para trabajos científicos). 

Lenguajes de Medio nivel 

Se trata de un termino no aceptado por todos, pero q seguramente habrás


oído. Estos lenguajes se encuentran en un punto medio entre los dos
anteriores. Dentro de estos lenguajes podría situarse C ya que puede acceder
a los registros del sistema, trabajar con direcciones de memoria, todas ellas
características de lenguajes de bajo nivel y a la vez realizar operaciones de alto
nivel. 

Generaciones 

La evolución de los lenguajes de programación se puede dividir en 5 etapas o


generaciones. 
 Primera generación: lenguaje maquina.
 Segunda generación: se crearon los primeros lenguajes ensambladores.
 Tercera generación: se crean los primeros lenguajes de alto nivel. Ej. C, Pascal, Cobol…
 Cuarta generación. Son los lenguajes capaces de generar código por si solos, son los
llamados RAD, con lo cuales se pueden realizar aplicaciones sin ser un experto en el
lenguaje. Aquí también se encuentran los lenguajes orientados a objetos, haciendo
posible la reutilización d partes del código para otros programas. Ej. Visual, Natural
Adabes…
 Quinta generación: aquí se encuentran los lenguajes orientados a la inteligencia artificial.
Estos lenguajes todavía están poco desarrollados. Ej. LISP

Construcción de
programas
Cuando nos piden que hagamos un programa debemos seguir una
cierta cantidad de pasos para asegurarnos de que tendremos éxito en
la tarea. La acción irreflexiva (me piden algo, me siento frente a la
computadora y escribo rápidamente y sin pensarlo lo que me parece
que es la solución) no constituye una actitud profesional (e ingenieril)
de resolución de problemas. Toda construcción tiene que seguir una
metodología, un protocolo de desarrollo, dado.

Existen muchas metodologías para construir programas, pero en este


curso aplicaremos una metodología sencilla, que es adecuada para la
construcción de programas pequeños, y que se puede resumir en los
siguientes pasos:

1. Analizar el problema. Entender profundamente cuál es el problema


que se trata de resolver, incluyendo el contexto en el cual se usará.

Una vez analizado el problema, asentar el análisis por escrito.

2. Especificar la solución. éste es el punto en el cual se


describe qué debe hacer el programa, sin importar el cómo. En el caso
de los problemas sencillos que abordaremos, deberemos decidir
cuáles son los datos de entrada que se nos proveen, cuáles son las
salidas que debemos producir, y cuál es la relación entre todos ellos.
Al especificar el problema a resolver, documentar la especificación por
escrito.

3. Diseñar la solución. éste es el punto en el cuál atacamos


el cómo vamos a resolver el problema, cuáles son los algoritmos y las
estructuras de datos que usaremos. Analizamos posibles variantes, y
las decisiones las tomamos usando como dato de la realidad el
contexto en el que se aplicará la solución, y los costos asociados a
cada diseño.

Luego de diseñar la solución, asentar por escrito el diseño,


asegurándonos de que esté completo.

4. Implementar el diseño. Traducir a un lenguaje de programación


(en nuestro caso, y por el momento, Python) el diseño que elegimos
en el punto anterior.

La implementación también se debe documentar, con comentarios


dentro y fuera del código, al respecto de qué hace el programa, cómo
lo hace y por qué lo hace de esa forma.

5. Probar el programa. Diseñar un conjunto de pruebas para probar


cada una de sus partes por separado, y también la correcta
integración entre ellas. Utilizar el depurador como instrumento para
descubir dónde se producen ciertos errores.

Al ejecutar las pruebas, documentar los resultados obtenidos.

6. Mantener el programa. Realizar los cambios en respuesta a


nuevas demandas.

Cuando se realicen cambios, es necesario documentar el análisis, la


especificación, el diseño, la implementación y las pruebas que surjan
para llevar estos cambios a cabo.

Realizando un programa
sencillo
Al leer un artículo en una revista norteamericana que contiene
información de longitudes expresadas en millas, pies y pulgadas,
queremos poder convertir esas distancias de modo que sean fáciles
de entender. Para ello, decidimos escribir un programa que convierta
las longitudes del sistema inglés al sistema métrico decimal.
Antes de comenzar a programar, utilizamos la guía de la sección
anterior, para analizar, especificar, diseñar, implementar y probar el
problema.

1. Análisis del problema. En este caso el problema es sencillo: nos


dan un valor expresado en millas, pies y pulgadas y queremos
transformarlo en un valor en el sistema métrico decimal. Sin embargo
hay varias respuestas posibles, porque no hemos fijado en qué unidad
queremos el resultado. Supongamos que decidimos que queremos
expresar todo en metros.

2. Especificación. Debemos establecer la relación entre los datos de


entrada y los datos de salida. Ante todo debemos averiguar los valores
para la conversión de las unidades básicas. Buscando en Internet
encontramos la siguiente tabla:

 1 milla = 1.609344 km

 1 pie = 30.48 cm

 1 pulgada = 2.54 cm

ADVERTENCIAA lo largo de todo el curso usaremos punto decimal,


en lugar de coma decimal, para representar valores no enteros, dado
que esa es la notación que utiliza Python.
La tabla obtenida no traduce las longitudes a metros. La manipulamos
para llevar todo a metros:

 1 milla = 1609.344 m

 1 pie = 0.3048 m

 1 pulgada = 0.0254 m

Si una longitud se expresa como L millas, F pies y P pulgadas, su


conversión a metros se calculará como M = 1609,344 ∗ L + 0,3048 ∗
F + 0,0254 ∗ P.

Hemos especificado el problema. Pasamos entonces a la próxima


etapa.

3. Diseño. La estructura de este programa es sencilla: leer los datos


de entrada, calcular la solución, mostrar el resultado, o Entrada-
Cálculo-Salida.
Antes de escribir el programa, escribiremos en pseudocódigo (un
castellano preciso que se usa para describir lo que hace un programa)
una descripción del mismo:
Leer cuántas millas tiene la longitud dada

(y referenciarlo con la variable millas)

Leer cuántos pies tiene la longitud dada

(y referenciarlo con la variable pies)

Leer cuántas pulgadas tiene la longitud dada

(y referenciarlo con la variable pulgadas)

Calcular metros = 1609.344 * millas +

0.3048 * pies + 0.0254 * pulgadas

Mostrar por pantalla la variable metros

4. Implementación. Ahora estamos en condiciones de traducir este


pseudocódigo a un programa en lenguaje Python (lo
llamaremos ametrico.py):
def main():

print "Convierte medidas inglesas a sistema metrico"

millas = input("Cuántas millas?: ")

pies = input("Y cuántos pies?: ")

pulgadas = input("Y cuántas pulgadas?: ")

metros = 1609.344 * millas + 0.3048 * pies + 0.0254 *


pulgadas

print "La longitud es de ", metros, " metros"

main()
5. Prueba. Probaremos el programa para valores para los que
conocemos la solución:

 1 milla, 0 pies, 0 pulgadas.

 0 millas, 1 pie, 0 pulgada.

 0 millas, 0 pies, 1 pulgada.

La prueba la documentaremos con la sesión de Python


correspondiente a las tres invocaciones a ametrico.py.

En la sección anterior hicimos hincapié en la necesidad de


documentar todo el proceso de desarrollo. En este ejemplo la
documentación completa del proceso lo constituye todo lo escrito en
esta sección.

ADVERTENCIAAl entregar un ejercicio, se deberá presentar el


desarrollo completo con todas las etapas, desde el análisis hasta las
pruebas (y el mantenimiento, si hubo cambios).

También podría gustarte