Lenguaje máquina

Lenguaje máquina

Considerando estas definiciones podemos adaptar y ampliar nuestra propia definición de Lenguaje Máquina:

Lenguaje máquina es el sistema estructurado de símbolos y reglas sintácticas y semánticas basadas en el sistema de numeración binario que permiten controlar el comportamiento físico y lógico de una computadora y que son interpretadas directamente por el CPU sin requerir ningún cambio.

El lenguaje máquina en la práctica.

Lenguaje máquina
Lenguaje máquina

Antes de poder echar un vistazo a la estructura del lenguaje máquina necesitamos conocer algunas términos adicionales primero.

Nota: Para explicar los siguientes párrafos, utilizaré ejemplos ficticios y MUY SIMPLIFICADOS, pero que describen la realidad. Es importante que no olvides esta observación durante la lectura, está enfocado al público general.

Bit

La pieza elemental con la que podemos trabajar es con el bit, la palabra bit es una contracción de la palabra inglesa binary digit = bit (dígito binario)

Un bit puede tener 2 estados, o valores: 1 y 0 (de ahí su nombre) esta asignación es arbitraria y por convención, universalmente aceptada.

Byte, nibble

Byte
Byte

Por cuestiones de diseño y por convención las instrucciones del lenguaje máquina se fueron agrupando en grupos de 4 y 8 dígitos binarios:

  • A un grupo de 4 bit se le denominó nibble
  • A un grupo de 8 bit se le denominó Byte

y en un Byte se codificó la información mínima utilizable en los sistemas de cómputo.

En un Byte pueden existir 2^8 valores, que nos permiten representar 256 valores distintos.

De 00000000 a 11111111, pasando por todos los valores intermedios (00000001, 00000010, 00000100… etc.), en total 256 combinaciones.

Un Bit: Un Byte
De 0 a 1 De 00000000 a 11111111
2 estados 256 estados

Instrucciones del procesador

De forma arbitraria podríamos asignar a cada Byte una acción que controle alguna función del procesador, por ejemplo podríamos definir las siguientes reglas:

Instrucción Significado (Definidas por el fabricante del CPU)
0000 0000 – No hacer nada
0000 0001 – Sumar V1 y V2 y guardar el resultado
0000 0011 – Muestra en pantalla la variable R
0000 0111 – Guarda en memoria lo que se te da en una variable llamada V1
0000 1111 – Guarda en memoria lo que se te da en una variable llamada V2
0001 0000 – Mover de la memoria el valor de Suma a la variable R

A este grupo de instrucciones que definen que puede hacer el procesador y la forma en que se utilizan se les denomina: Conjunto de Instrucciones del Procesador, y son específicas del procesador o de la familia del procesador.

Del mismo modo que podemos definir las instrucciones del procesador, podemos hacerlo con los datos que utilizaremos.

Dato Significado (Ya sea por un estándar o por nosotros)
0000 0001 – 1 (el número 1)
0000 0011 – 2 (el número 2)
0000 0100 – 3 (el número 3)

Con estas reglas primitivas podríamos hacer lo siguiente (siempre recuerda que Nosotros definimos qué significa cada combinación, así como las reglas que queremos usar de forma arbitraria):

Instrucción Dato
00000111 00000001
00001111 00000011
00000001
0001 0000
00000011
00000000

Podríamos “traducir” lo anterior como:

  1. Guarda en en la variable V1 el número 1
  2. Guarda en en la variable V2 el número 2
  3. Realizamos las suma del valor de V1 más el valor de V2 (1 + 2, en nuestro ejemplo)
  4. Asignamos a la variable R el valor de suma  (R = 3)
  5. Mostrar en pantalla la variable R
  6. No hagas nada

Poniendo todo junto podríamos ponerlo de la siguiente forma (para entenderlo mejor nosotros):

Instrucción Dato Pseudo código
00000111 00000001 Guarda en en la variable V1 el número 1
00001111 00000011 Guarda en en la variable V2 el número 2
00000001 Realizamos las suma del valor de V1 más el valor de V2 (1 + 2, en nuestro ejemplo)
00010000 Asignamos a la variable R el valor de suma  (R = 3)
00000011 Mostrar en pantalla la variable R
00000000 No hagas nada

Y el resultado sería mostrar en la pantalla la suma de 2 números.

Aunque el procesador solo leerá:

0000011100000001000011110000001100000001000100000000001100000000

Lenguaje binario
Lenguaje binario

Podrás preguntarte cómo “sabe” el procesador en donde empieza y termina una instrucción, bueno un primer acercamiento (recuerda, estoy simplificando demasiadas cosas) a la respuesta es: considerando la agrupación por Byte de los bits que componen la instrucción, de este modo cada 8 bit, el procesador “sabrá” que empieza otra instrucción y/o dato. De forma adicional el procesador tiene integrado un “diccionario” que le indica cómo interpretar cada byte y qué hacer de acuerdo a la instrucción recibida.

Claro, hay una GRAN cantidad de puntos omitidos, pero para el objetivo del curso, con lo expuesto es suficiente.

El conjunto de instrucciones del procesador

En el caso de los procesadores comerciales, los fabricantes son quienes proporcionan a los desarrolladores y programadores una serie de instrucciones que “entiende” el procesador. Éste es el Conjunto de Instrucciones del Procesador. Y todos los programas deben utilizar este conjunto de instrucciones de a cuerdo a las reglas y estructura que el fabricante implementa en el procesador.

Recuerda: Este es un ejemplo extremadamente simplificado pero que permite comprender como es que con 1’s y 0’s podemos dar instrucciones a una computadora.

Este documento es un borrador y se encuentra en fase de desarrollo. Si tienes alguna aportación y/o corrección será bienvenida

Por Roberto C. González
Para Ethical Hack

 


¿Deseas participar en nuestro grupo de estudio para aplicar la certificación CEH? 

Aplicación de medidas para la implantación de la L.O.P.D. en las empresas

Obtendrás información ampliada a la que has leído en este artículo, y material adicional, visita https://ehack.mx/portfolio-view/material-de-estudio-ceh-online/ para más información o ecríbenos a ceh@ehack.mx

 

Ethical hack
Ethical hack

 


Fuente Imágenes:

“El lenguaje de las computadoras: El lenguaje máquina”: Imagen cortesía by Stuart Miles en FreeDigitalPhotos.net
“CPU: Unidad Central de Procesamiento”: Imagen cortesía by Intel
“Lenguaje máquina”: Imagen cortesía by dream designs en FreeDigitalPhotos.net
“Lenguaje binario”: Imagen cortesía by Stuart Miles en FreeDigitalPhotos.net
“Byte”: Imagen cortesía by Stuart Miles en FreeDigitalPhotos.net
“Bit”: Imagen cortesía by Nala Systems en nalasys.mx

 

Licencia de Creative Commons¿Por qué aprender a programar? by Roberto C. González para Ethical Hack is licensed under a Creative Commons Reconocimiento-NoComercial-CompartirIgual 4.0 Internacional License.
Comentarios de Facebook

Leave a Reply

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *

Este sitio usa Akismet para reducir el spam. Aprende cómo se procesan los datos de tus comentarios.