2. es un idioma artificial diseñado para expresar
computaciones que pueden ser llevadas a cabo por
máquinas como las computadoras. Pueden usarse para
crear programas que controlen el comportamiento físico y
lógico de una máquina, para expresar algoritmos con
precisión, o como modo de comunicación humana.[1] Está
formado por un conjunto de símbolos y reglas sintácticas y
semánticas que definen su estructura y el significado de
sus elementos y expresiones. Al proceso por el cual se
escribe, se prueba, se depura, se compila y se mantiene
el código fuente de un programa informático se le llama
programación.
3. A principios de la década de 1950, y con el fin
de facilitar la labor de los programadores, se
desarrollaron códigos nemotécnicos para las
operaciones y direcciones simbólicas. La
palabra nemotécnico se refiere a una ayuda
para la memorización. Uno de los primeros
pasos para mejorar el proceso de preparación
de programas fue sustituir los códigos de
operaciones numéricos del lenguaje de
máquina por símbolos alfabéticos, que son los
códigos nemotécnicos.
4. Si la computadora era capaz de traducir
símbolos convenientes en operaciones básicas,
¿por qué no hacer también que realizara otras
funciones rutinarias de codificación, como la
asignación de direcciones de almacenamiento
a los datos? La técnica de direccionamiento
simbólico permite expresar una dirección no en
términos de su localización numérica absoluta,
sino en términos de símbolos convenientes
para el programador.
5. Durante las primeras etapas del direccionamiento simbólico, el
programador asigna un nombre simbólico y una dirección real a
un dato. Por ejemplo, el programador podría asignar el valor
total de mercancía adquirida durante un mes por un cliente de
una tienda de departamentos a la dirección 0063, y darle el
nombre simbólico TOTAL. Se podría asignar el valor de la
mercancía devuelta sin usar durante el mes a la dirección 2047
y dársele el nombre simbólico CRÉDITO. Así, durante el resto
del programa, el programador se referirá a los nombres
simbólicos, más que a las direcciones, cuando fuera preciso
procesar estos datos. Por ejemplo, se podría escribir la
instrucción "S CRÉDITO TOTAL" para restar el valor de las
mercancías devueltas del importa total de compras para
obtener el importe de la factura mensual del cliente. A
continuación, el programa ensamblador traduciría la instrucción
simbólica a esta cadena de bits.
6. Se dejó a la computadora la tarea de asignar y recordar
las direcciones de las instrucciones. Lo único que tenía
que hacer el programador era indicar a la computadora la
dirección de la primera instrucción, y el programa
ensamblador se encargaba de almacenar, de manera
automática, todas las demás en forma secuencial a partir
de ese punto. Así, si se agregaba más tarde otra
instrucción al programa, no era necesario modificar las
direcciones de todas las instrucciones que seguían al
punto de inserción (como tendría que hacerse en el caso
de programas escritos en lenguaje de máquina). En vez
de ello, el procesador ajustaba automáticamente las
localidades de memoria la próxima vez que se ejecutaba
el programa.
7. En la actualidad, los programadores no
asignan números de dirección reales a los
datos simbólicos, simplemente especifican
dónde quieren que se coloque la primera
localidad del programa, y el programa
ensamblador se encarga de lo demás:
asigna localidades tanto para las
instrucciones como para los datos.
8. En la actualidad, los programadores no
asignan números de dirección reales a los
datos simbólicos, simplemente especifican
dónde quieren que se coloque la primera
localidad del programa, y el programa
ensamblador se encarga de lo demás:
asigna localidades tanto para las
instrucciones como para los datos.
9. Los lenguajes ensambladores tienen ventajas sobre los
lenguajes de máquina. Ahorran tiempo y requieren menos
atención a detalles. Se incurren en menos errores y los
que se cometen son más fáciles de localizar. Además, los
programas en lenguaje ensamblador son más fáciles de
modificar que los programas en lenguaje de máquina.
Pero existen limitaciones. La codificación en lenguaje
ensamblador es todavía un proceso lento. Una desventaja
importante de estos lenguajes es que tienen una
orientación a la máquina. Es decir, están diseñados para
la marca y modelo específico de procesador que se utiliza,
y es probable que, para una máquina diferente, se tengan
que volver a codificar los programas
10. El código escrito en lenguaje Assembly posee una cierta dificultad de ser
entendido directamente por un ser humano ya que su estructura se acerca
más bien al lenguaje máquina, es decir, lenguaje de bajo nivel.
El lenguaje Assembly es difícilmente portable, es decir, un código escrito para
un microprocesador, suele necesitar ser modificado, muchas veces en su
totalidad para poder ser usado en otra máquina distinta, aun con el mismo
microprocesador.
Los programas hechos en lenguaje Assembly son generalmente más rápidos y
consumen menos recursos del sistema (memoria RAM y ROM). Al programar
cuidadosamente en lenguaje Assembly se pueden crear programas que se
ejecutan más rápidamente y ocupan menos espacio que con lenguajes de alto
nivel.
Con el lenguaje Assembly se tiene un control muy preciso de las tareas
realizadas por un microprocesador por lo que se pueden crear segmentos de
código difíciles de programar en un lenguaje de alto nivel.
También se puede controlar el tiempo en que tarda una rutina en ejecutarse, e
impedir que se interrumpa durante su ejecución.
11. . El código máquina, o lenguaje de máquina, está formado por instrucciones sencillas, que -dependiendo de la
estructura del procesador- pueden especificar:
Registros específicos para operaciones aritméticas, direccionamiento o control de funciones.
Posiciones de memoria específicas (offset).
Modos de direccionamiento usados para interpretar operandos.
Las operaciones más complejas se realizan combinando estas instrucciones sencillas, que pueden ser
ejecutadas secuencialmente o mediante instrucciones de control de flujo.
Las operaciones disponibles en la mayoría de los conjuntos de instrucciones incluye:
mover
› llenar un registro con un valor constante
› mover datos de una posición de memoria a un registro o viceversa
› escribir y leer datos de dispositivos
computar
› sumar, restar, multiplicar o dividir los valores de dos registros, colocando el resultado en uno de ellos o en otro registro
› realizar operaciones binarias, incluyendo operaciones lógicas (AND/OR/XOR/NOT)
› comparar valores entre registros (mayor, menor, igual)
afectar el flujo del programa
› saltar a otra posición en el programa y ejecutar instrucciones allí
› saltar si se cumplen ciertas condiciones (IF)
› saltar a otra posición, pero guardar el punto de salida para retornar (CALL, llamada a subrutinas)
Algunas computadoras incluyen instrucciones complejas dentro de sus capacidades. Una sola instrucción
compleja hace lo mismo que en otras computadoras puede requerir una larga serie de instrucciones, por
ejemplo:
salvar varios registros en la pila de una sola vez
mover grandes bloques de memoria
operaciones aritméticas complejas o de punto flotante (seno, coseno, raíz cuadrada)
Mientras que una computadora reconoce la instrucción de máquina IA-32