Mostrando entradas con la etiqueta código máquina. Mostrar todas las entradas
Mostrando entradas con la etiqueta código máquina. Mostrar todas las entradas

martes, 9 de agosto de 2016

El código máquina...

Eran tiempos revueltos en mi vida cuando alguien me contó como funcionaban realmente las máquinas, como era realmente la vida de un ordenador.

En aquel tiempo yo programaba ya bastante bien en el basic del Spectrum, de hecho hacía mis programas de contabilidad, mis horarios, las chuletas para estudiar en el colegio, los primeros juegos... Luego lo guardaba en cinta y andando.

Pero en las revistas que me llegaban a casa con programas aparecía siempre una palabra, la palabra "POKE", que significaba meter, y luego una cadena de caracteres o de pares de números alfanuméricos, que tenías que meter uno a uno y sin confundirte, ya que si no, el programa o el juego no funcionaba.

Todo eso llamó mi atención y leyendo aquí y allá entendí que lo que hacía el poke era meter una información en un dirección de memoria. 

En aquellos días me dieron un libro, que si mal no recuerdo era "El Zilog Z80", en el cual me explicaban que lo el ordenador lo que hacía era colocar información en memoria, y mandarla a los periféricos.

Pero el ordenador ni siquiera funcionaba con esos hexadecimales sino que funcionaba con 0 y 1, con largas series de 0 y 1 que eran mandatos de la forma pon esto aquí o llevaló allí, o cambia el estado de tal posición...

Eso era el código máquina, el código que usaba el ordenador para mover la información de un lado a otro, para "MOV" o "GO" o "ADD"... Ese código máquina era tan difícil de leer y tan farragoso que lo que se había hecho es crear un lenguaje algo más legible, el lenguaje ensamblador, que correspondía uno a uno a aquellos códigos que yo metía en el POKE.

Ese lenguaje ensamblador era muy complejo en aquellos tiempos y lo que habían hecho los creadores del Spectrum era crear un interprete, es decir, un traductor que se encargaba de hacer que lo que yo escribía en Basic fuera entendido por el ordenador en código máquina. De esta forma cuando ponías print el Basic lo traducía a un código más entendible al ordenador:

print "jose" era traducido a una cadena de comandos de ensamblador que hacían que la cadena jose apareciera en la pantalla, de modo que primero se seleccionaba la traducción del comando PRINT y luego se pasaba a código binario la cadena jose, y se iba imprimiendo punto a punto cada letra de la cadena "jose" en la pantalla.

En los ordenadores actuales, cuando tu enciendes un ordenador y lo haces funcionar, nada se hace en inglés o en español o chino, todo se actualiza a 0 y 1 y fluye de una zona a otra en forma de bits de un lado a otro de tu ordenador o tu movil o tu tablet.

Por eso es tan importante saber que existe y qué es el código máquina.

jueves, 4 de junio de 2015

ESTRUCTURAS básicas en un programa: VARIABLES (Introducción)

Estamos siguiendo nuestra andadura y por algún lado tendremos que comenzar. Cuando nos acercamos al mundo de la programación lo primero que hay que saber es que quiere uno hacer.


Una vez que sabes qué, el siguiente problema es el cómo, y este cómo implica  en primer lugar que herramientas vas a utilizar, ya que a lo mejor si nuestro objetivo (target) es una página web, tal vez es necesario usar un programa que nos facilite el trabajo.

Es posible que incluso sin saber nada de programación seas capaz de crear una página web que sea bonita y útil, por ejemplo usando jimdo.com:


Pero si nos vamos a meter en faena y vamos a ensuciarnos las manos con código, es posible que necesitamos algún lenguaje de programación.

En los primeros ordenadores, aquellos que se construían con válvulas de vacío, los programas se "programaban" ensamblando partes, es decir, uniendo con cables unas partes con otras, y os podéis imaginar el trabajo tan tedioso que llevaba primero construir el programa y luego buscar errores.

Aquí tenéis la explicación de porqué cuando se compila un programa se le llama "Build" construir, porque en origen se construía de verdad.

También viene de esta época el término bug, error en programa, pues estas máquinas generaban tanto calor que los insectos se metían entre los cables y hacían que el programa fallara...


Posteriormente al inventar el transistor, el tamaño de los ordenadores ser redujo de forma radical, pasando de ocupar naves enteras a habitaciones y luego a caber en la palma de la mano...


Primeros lenguajes:


Cuando se empieza a programar una de las cosas más importantes de entender es donde se guardan los programas. Ese lugar es la memoria, la memoria es el lugar donde almacenamos el programa pero también los datos que usará ese programa.

Cuando se programaba en código de máquina esto era fácil de entender, ya que el código máquina lo que hacía era verter contenidos en memoria, moverlos y compararlos... Con eso se hacen todos los programas del mundo.

4A 3F 33 33
23
22 33 03 05

Pero el código máquina era tan farragoso, y tan complicado que lo primero que se creó fue un lenguaje el Assembler o ensamblador, que permitía en lugar de usar solo números identificar cada código con un nombre:

Mov ax, bx



El siguiente paso fue crear lenguajes más amables, más fáciles de entender y de esta época surge el BASIC, el Cobol, el Fortran...

Todos estos lenguajes se podían compilar o interpretar, pero tenían algo en común el uso de variables.

Variables:


Ya es el momento, ¿qué es una variable?

Una variable es una posición de memoria, es un lugar dentro de la memoria del ordenador, al que se le ha asignado un nombre.


A ese lugar se puede acceder nombrándolo, es decir, llamándolo para que nos devuelva el valor que tienen o también se le puede llamar para cambiar el contenido.

Un ejemplo sera muy gráfico. Volvamos al Basic por un momento, que es antiguo pero era muy claro:

10 let a=5
20 print a
30 let a=10
40 print a

Let en inglés es dejar, en este caso "deja en a el valor 5", luego Print es imprimir, al imprimir a en la linea 20, se llama a la dirección de memoria de a y se pide que devuelva el valor de a y luego lo saque en pantalla, con lo cual aparecerá en pantalla "5".

En la linea 30 se cambia el valor que hay almacenado en la dirección de memoria de a por el valor "10", y por ello en la linea 40, al consultar el valor de a, saldrá en pantalla el valor "10".

Esto ocurría en Basic de los primeros ordenadores, en los que solo existían dos tipos de variables:

Las que aparecían solo con letras más números eran variables enteras, eran para operaciones numéricas.

Las que aparecían seguidas del símbolo del dolar, eran variables alfanuméricas, es decir, eran como las variables de texto actuales y permitían operaciones del tipo añadir o sustraer.

10 let a$="Jocarmartom"
20 print a$
30 let b$=" siempre intenta aprender cosas nuevas"
40 print b$
50 let c$=a$+b$
60 print c$

Al poner el símbolo del dolar "$" automáticamente el interprete de BASIC reconocía el tipo de variable que se usaba como alfanumérica. De esta manera las operaciones cambiaban a ser las específicas para ello.

En la linea 50 lo que hacemos es concatenar, unir las variables a$ y b$. De esta forma lo que obtenemos es la siguiente salida en pantalla.

Joscarmartom
siempre intenta aprender cosas
Joscamartom siempre intenta aprender cosas 

[Continuará]