Vistas a la página totales

martes, 30 de agosto de 2016

Lenguaje 

El lenguaje ensamblador refleja directamente Hla arquitectura y lasinstrucciones en lenguaje de máquinade la CPU, y pueden ser muy diferentes de una arquitectura de CPU a otra. Cadaarquitectura de microprocesador tiene su propio lenguaje de máquina, y en consecuencia su propio lenguaje ensamblador ya que este se encuentra muy ligado a la estructura del hardware para el cual se programa. Los microprocesadores difieren en el tipo y número de operaciones que soportan; también pueden tener diferente cantidad de registros, y distinta representación de los tipos de datos en memoria. Aunque la mayoría de los microprocesadores son capaces de cumplir esencialmente las mismas funciones, la forma en que lo hacen difiere y los respectivos lenguajes ensamblador reflejan tal diferencia.

Instrucciones de CPUEditar

La mayoría de las CPU tienen más o menos los mismos grupos de instrucciones, aunque no necesariamente tienen todas las instrucciones de cada grupo. Las operaciones que se pueden realizar varían de una CPU a otra. Una CPU particular puede tener instrucciones que no tenga otro y viceversa. Los primeros microprocesadores de 8 bits no tenían operaciones para multiplicar o dividir números, por ejemplo, y había que hacer subrutinas para realizar esas operaciones. Otras CPU puede que no tengan operaciones de punto flotante y habría que hacer o conseguir bibliotecas que realicen esas operaciones.
Las instrucciones de la CPU pueden agruparse, de acuerdo a su funcionalidad, en:
Operaciones con enteros: (de 8, 16, 32 y 64 bits dependiendo de la arquitectura de la CPU, en los sistemas muy viejos también de 12, 18, 24, 36 y 48 bits)
Estas son operaciones realizadas por laUnidad aritmético lógica de la CPU
  • Operaciones aritméticas. Como suma, resta, multiplicación, división, módulo, cambio de signo
  • Operaciones booleanas. Operaciones lógicas bit a bit como ANDORXOR,NOT
  • Operaciones de bits. Como desplazamiento o shift lógico y rotaciones u Operadores a nivel de bits(hacia la derecha o hacia la izquierda, a través del bit del acarreo o sin él)
  • Comparaciones
Operaciones de mover datos:
Entre los registros y la memoria:
Aunque la instrucción se llama "mover", en la CPU, "mover datos" significa en realidad copiar datos, desde un origen a un destino, sin que el dato desaparezca del origen.
Se pueden mover valores:
  • desde un registro a otro
  • desde un registro a un lugar de la memoria
  • desde un lugar de la memoria a un registro
  • desde un lugar a otro de la memoria
  • un valor inmediato a un registro
  • un valor inmediato a un lugar de memoria
Operaciones de pila (stack, en inglés):
  • PUSH (escribe datos hacia el tope de la pila)
  • POP (lee datos desde el tope de la pila)
Operaciones de entrada/salida:
Son operaciones que mueven datos de un registro, desde y hacia un puerto; o de la memoria, desde y hacia un puerto
  • INPUT Lectura desde un puerto de entrada
  • OUTPUT Escritura hacia un puerto de salida
Operaciones para el control del flujo del programa:
  • Llamadas y retornos de subrutinas
  • Llamadas y retornos de interrupciones
  • Saltos condicionales de acuerdo al resultado de la comparaciones
  • Saltos incondicionales
Operaciones con números reales:
El estándar para las operaciones connúmeros reales en las CPU está definido por el IEEE 754.
Una CPU puede tener operaciones depunto flotante con números reales mediante el coprocesador numérico (si lo hay), como las siguientes:
El lenguaje ensamblador tiene mnemónicos para cada una de las instrucciones de la CPU en adición a otros mnemónicos a ser procesados por el programa ensamblador (como por ejemplo macros y otras sentencias en tiempo de ensamblado).

EnsambladoEditar

La transformación del lenguaje ensamblador en código máquina la realiza un programa ensamblador, y la traducción inversa la puede efectuar undesensamblador. A diferencia de loslenguajes de alto nivel, aquí hay usualmente una correspondencia 1 a 1 entre las instrucciones simples del ensamblador y el lenguaje de máquina. Sin embargo, en algunos casos, un ensamblador puede proveer "pseudo instrucciones" que se expanden en un código de máquina más extenso a fin de proveer la funcionalidad necesaria y simplificar la programación. Por ejemplo, para un código máquina condicional como "si X mayor o igual que", un ensamblador puede utilizar una pseudoinstrucción al grupo "haga si menor que", y "si = 0" sobre el resultado de la condición anterior. Los Ensambladores más completos también proveen un rico lenguaje de macros que se utiliza para generar código más complejo y secuencias de datos.
Para el mismo procesador y el mismoconjunto de instrucciones de CPU, diferentes programas ensambladores pueden tener, cada uno de ellos, variaciones y diferencias en el conjunto de mnemónicos o en la sintáxis de su lenguaje ensamblador. Por ejemplo, en un lenguaje ensamblador para la arquitectura x86, se puede expresar la instrucción para mover 5 al registro AL de la siguiente manera: MOV AL, 5, mientras que para otro ensamblador para la misma arquitectura se expresaría al revés: MOV 5, AL. Ambos lenguajes ensambladores harían exactamente lo mismo, solo que está expresado de manera diferente. El primero usa la sintaxis de Intel, mientras que el segundo usa la sintaxis de AT&T
El uso del ensamblador no resuelve definitivamente el problema de cómo programar un sistema basado en microprocesador de modo sencillo ya que para hacer un uso eficiente del mismo, hay que conocer a fondo elmicroprocesador, los registros de trabajo de que dispone, la estructura de la memoria, y muchas cosas más referentes a su estructura básica de funcionamiento.

EjemplosEditar

Un programa escrito en lenguaje ensamblador consiste en una serie de instrucciones que corresponden al flujo de órdenes ejecutables por un microprocesador.
Por ejemplo, en el lenguaje ensamblador para un procesador x86:
La sentencia
  • MOV AL, 61h
Asigna el valor hexadecimal 61 (97decimal) al registro "AL".
El programa ensamblador lee la sentencia de arriba y produce su equivalente binario en lenguaje de máquina
  • Binario: 10110000 01100001(hexadecimal: B61)
El mnemónico MOV es un código de operación u "opcode". El opcode es seguido por una lista de argumentos oparámetros, completando una típica instrucción de ensamblador. En el ejemplo, AL es un registro de 8 bits del procesador, al cual se le asignará el valor hexadecimal 61 especificado.
El código de máquina generado por el ensamblador consiste de 2 bytes. El primer byte contiene empaquetado la instrucción MOV y el código del registro hacia donde se va a mover el dato:
1011 0000 01100001
| | |
| | +---- Número 61h en binario
| |
| +--- Registro AL
+-------- Instrucción MOV
En el segundo byte se especifica el número 61h, escrito en binario como 01100001, que se asignará al registro AL, quedando la sentencia ejecutable como:
  • 10110000 01100001
La cual puede ser entendida y ejecutada directamente por el procesador.



Lenguaje ensamblador


Lenguaje de máquina del Intel 8088. El código de máquina en hexadecimal se resalta en rojo, el equivalente en lenguaje ensamblador en magenta, y las direcciones de memoria donde se encuentra el código, en azul. Abajo se ve un texto en hexadecimal y ASCII.
El lenguaje ensamblador, o assembler(en inglés assembly language y la abreviación asm), es un lenguaje de programación de bajo nivel. Consiste en un conjunto de mnemónicos que representan instrucciones básicas para los computadoresmicroprocesadores,microcontroladores y otros circuitos integrados programables. Implementa una representación simbólica de loscódigos de máquina binarios y otras constantes necesarias para programar una arquitectura de processador y constituye la representación más directa del código máquina específico para cada arquitectura legible por un programador. Cada arquitectura de processador tiene su propio lenguaje ensamblador que usualmente es definida por el fabricante de hardware, y está basada en los mnemónicos que simbolizan los pasos de procesamiento (las instrucciones), los registros del procesador, las posiciones de memoriay otras características del lenguaje. Un lenguaje ensamblador es por lo tanto específico de cierta arquitectura de computador física (o virtual). Esto está en contraste con la mayoría de los lenguajes de programación de alto nivel, que idealmente son portátiles.
Un programa utilitario llamadoensamblador es usado para traducir sentencias del lenguaje ensamblador al código de máquina del computador objetivo. El ensamblador realiza una traducción más o menos isomorfa (un mapeo de uno a uno) desde las sentencias mnemónicas a las instrucciones y datos de máquina. Esto está en contraste con los lenguajes de alto nivel, en los cuales una sola declaración generalmente da lugar a muchas instrucciones de máquina.
Muchos sofisticados ensambladores ofrecen mecanismos adicionales para facilitar el desarrollo del programa, controlar el proceso de ensamblaje, y la ayuda de depuración. Particularmente, la mayoría de los ensambladores modernos incluyen una facilidad demacro (descrita más abajo), y se llamanmacro ensambladores.
Fue usado principalmente en los inicios del desarrollo de software, cuando aún no se contaba con potentes lenguajes de alto nivel y los recursos eran limitados. Actualmente se utiliza con frecuencia en ambientes académicos y de investigación, especialmente cuando se requiere la manipulación directa dehardware, alto rendimiento, o un uso de recursos controlado y reducido. También es utilizado en el desarrollo decontroladores de dispositivo (en inglés,device drivers) y en el desarrollo de sistemas operativos, debido a la necesidad del acceso directo a las instrucciones de la máquina. Muchos dispositivos programables (como los microcontroladores) aún cuentan con el ensamblador como la única manera de ser manipulados.

No hay comentarios.:

Publicar un comentario