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