Lenguaje de máquina

Lenguaje máquina (o código máquina ), en informática , indica el lenguaje en el que están escritos los programas informáticos ejecutables : puede clasificarse como un lenguaje de programación , aunque esta última expresión se reserva más a menudo para indicar lenguajes de alto nivel con que escribe programas que no son directamente ejecutables, pero que requieren una traducción a lenguaje de máquina, p. por medio de un compilador .

Descripción

El lenguaje máquina se basa en un alfabeto llamado binario ya que incluye solo dos símbolos, generalmente indicados con 0 y 1 : un símbolo de este alfabeto se llama bit . El procesador (o CPU) es ese componente de hardware de una computadora que es capaz de ejecutar programas escritos en lenguaje de máquina. En otras palabras, el lenguaje de máquina define el conjunto de instrucciones fundamentales que un procesador es capaz de realizar ( instruction set ), en el que se deben traducir los códigos del programa a ejecutar. En particular, los lenguajes de nivel inferior se obtienen como una codificación simple (tabla de asociación) a partir del lenguaje máquina en un crescendo de abstracción.

Al igual que en los lenguajes naturales , en el lenguaje máquina los símbolos del alfabeto utilizados (1 y 0) se organizan en "palabras" que a su vez constituyen "frases". Las oraciones en lenguaje de máquina se llaman instrucciones ; cada uno de ellos ordena al procesador que realice una acción elemental relacionada con el estado interno de la computadora, como leer una ubicación de memoria o calcular la suma de los valores contenidos en dos registros .

Las oraciones generalmente consisten en una palabra inicial llamada código operativo inicial , que indica el tipo de acción a realizar, seguida de otras palabras que especifican los parámetros (o datos) a los que se debe aplicar la acción (por ejemplo, "SUM" - "15" - "20"). Si consideramos la primera palabra como el "verbo" de la oración, podemos decir por analogía que el lenguaje máquina sólo prevé verbos imperativos; no en vano, los lenguajes de programación que cuentan con esta característica se denominan lenguajes imperativos . Los procesadores tradicionales solo podían ejecutar una instrucción a la vez; Actualmente se están extendiendo tecnologías (como la de los procesadores superescalares ) que permiten la ejecución de múltiples instrucciones en paralelo . Las instrucciones que pueden aparecer en un programa de lenguaje de máquina describen acciones simples como "agregar", "dividir" o "comparar".

Compatibilidad

La expresión " lenguaje de máquina" es, estrictamente hablando, incorrecta; de hecho, cada modelo de procesador es capaz de comprender su propio lenguaje de máquina particular. Sin embargo, aunque varían en sintaxis específica , los lenguajes de máquina de todos los procesadores se basan en un conjunto de principios y conceptos similares.

Si un procesador P1 en particular entiende exactamente el idioma de otro procesador P2, se dice que P1 es compatible con P2. Por ejemplo, los llamados procesadores x86 se denominan así porque son capaces de entender un lenguaje de máquina inventado por Intel y posteriormente utilizado también en los procesadores AMD , VIA o Cyrix . Cabe señalar que diferentes procesadores compatibles no tienen por qué ser compatibles también a nivel de hardware : los procesadores Intel y AMD x86 interpretan el mismo lenguaje de máquina aunque internamente sean muy diferentes.

Relación con el montaje

El lenguaje de máquina a menudo se confunde con el lenguaje ensamblador, pero en realidad este último es un lenguaje de programación de bajo nivel que, de manera similar a los lenguajes de alto nivel como C , C ++ , C # , Pascal , Java , Python , Visual Basic , Ruby , etc., requiere un proceso de traducción. A diferencia de este último, el ensamblador permite una traducción particularmente simple que transforma cada instrucción ensambladora, de manera única, en una instrucción en lenguaje máquina.

Los códigos operativos y los datos de lenguaje de máquina son patrones de bits (cadenas) . En su lugar, el ensamblado usa instrucciones mnemotécnicas, lo que facilita que el programador humano desarrolle y depure programas. Por ejemplo, en el procesador Z80 , el código máquina 00000101b (05h)corresponde al orden de decremento del número contenido en el registro B [1] , mientras que en lenguaje ensamblador se escribe el mismo orden DEC B[2] .

Ejemplos de notación

Para mayor comodidad, los códigos de máquina también se pueden transcribir en notación hexadecimal : por ejemplo, siempre en el Z80 la sucesión de códigos:

3E 41 D3

es fijo mientras que en otros varía de educación a educación. La organización de patrones también varía mucho.

Como ejemplo concreto podemos tomar la arquitectura MIPS . Las instrucciones de esta arquitectura están todas compuestas por 32 bits (o 4 bytes ). Los primeros 6 bits contienen el código de operación. Las instrucciones de tipo J (de salto: salto) e I (inmediato) están completamente especificadas por el campo op , mientras que las instrucciones de tipo R (registro) incluyen un campo adicional llamado func que codifica la función específica a realizar. El formato detallado de las instrucciones es el siguiente:

6 5 5 5 5 6 bits [Operación | rs | hora | domicilio / inmediato] tipo I [Operación | dirección de destino] tipo J [Operación | rs | hora | rd | farsa | función] tipo R

rs , rt y rd indican los registros en los que se encuentran los operandos; shamt significa "cantidad de cambio", mientras que dirección e inmediato contienen operandos directamente.

Por ejemplo, la operación de sumar los registros 1 y 2 con almacenamiento del resultado en el registro 6 se codifica como:

[Operación | rs | hora | rd | farsa | función] 0 1 2 6 0 32 forma decimal 000000 00001 00010 00110 00000 100000 forma binaria

Carga en el registro 8 de un valor almacenado en la celda de memoria ubicada 68 celdas después de la que apunta el registro 3:

[Operación | rs | hora | domicilio / inmediato] 35 3 8 68 forma decimal

Notas

  1. ^ ( EN ) Manual del procesador Z80, Códigos de operación de instrucción, Tabla de operaciones aritméticas/lógicas ( PDF ), en z80.info , págs. 50-51. Consultado el 31 de octubre de 2020 ( archivado el 14 de septiembre de 2020) .
  2. ^ Manual del procesador Z80, ensamblaje, instrucción DEC ( PDF ) , en z80.info , págs. 170-171. Consultado el 31 de octubre de 2020 ( archivado el 14 de septiembre de 2020) .

Bibliografía

Artículos relacionados