El lenguaje ensamblador es el lenguaje de programación utilizado
para escribir programas
informáticos de bajo nivel, y constituye la representación más
directa del Código
máquina específico para cada arquitectura de computadoras
legible por un programador. Aun hoy se utiliza en la programación de handler o
manipuladores de dispositivos de hardware.
CARACTERISTICAS
§ El código escrito en lenguaje
ensamblador 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 ensamblador 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,
solo pueden ser reutilizados secciones especiales del código programado.
§ Los programas hechos en lenguaje
ensamblador, al ser programado directamente sobre Hardware,
son generalmente más rápidos y consumen menos recursos del sistema (memoria RAM y ROM). Al programar
cuidadosamente en lenguaje ensamblador se pueden crear programas que se
ejecutan más rápidamente y ocupan menos espacio que con lenguajes de alto
nivel.
§ Con el lenguaje ensamblador 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.
§ El lenguaje ensamblador es un código
estructurado y gravitatorio desarrollado sobre un archivo de programación
(.ASM), en el cual pueden existir varios programas, macros o rutinas que pueden
ser llamados entre si.
Un programa escrito en lenguaje ensamblador consiste en una serie de Instrucciones que
corresponden al flujo de órdenes ejecutables que pueden ser cargadas en la Memoria de
un sistema basado en Microprocesador.
Por ejemplo, un Procesador x86 puede ejecutar la siguiente
instrucción Binaria como se expresa en código de máquina:
§ Binario: 10110000 01100001 (Hexadecimal:
0xb061)
La representación equivalente en lenguaje ensamblador es más fácil de
recordar:
§ MOV al, 061h
Esta instrucción significa:
§ Asigna el valor Hexadecimal 61
(97 Decimal) al registro "al".
El mnemónico "mov" es un código de operación u
"opcode", elegido por los diseñadores de la colección de
instrucciones para abreviar "move" (mover, pero en el sentido de
copiar valores de un sitio a otro). El opcode es seguido por una lista de
argumentos o parámetros, completando una instrucción de ensamblador típica. A
diferencia de los lenguajes 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. Por ejemplo,
para un código máquina condicional como "si X mayor o igual que", un
ensamblador puede utilizar una pseudo instrucció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. Cada
arquitectura de microprocesadores tiene su propio lenguaje de máquina, y en
consecuencia su propio lenguaje ensamblador ya que este se encuentra muy ligado
al 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. Pueden existir
múltiples conjuntos de mnemónicos o Sintaxis de
lenguaje ensamblador para un mismo conjunto de instrucciones, instanciados
típicamente en diferentes programas en ensamblador. En estos casos, la
alternativa más popular es la provista por los fabricantes, y usada en los
manuales del programa.
CODIGO
MAQUINA
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. Casi todas las instrucciones utilizan 2 operandos
específicos para realizar su función. Ejemplo, cuando deseamos mover un valor
constante hacia un registro de almacenamiento debemos especificar ambos
operandos. Las operaciones disponibles en la mayoría de los conjuntos de
instrucciones incluyen:
§ mover
llenar un registro con un valor constante (Ej.: mov al, `20`). o mover
datos de una posición de memoria a un registro o viceversa (Ej.: mov al, [si])
o escribir y leer datos de dispositivos (Ej.: lea dx, offset cadena)
§ computar
sumar, restar, multiplicar o dividir los valores de dos registros,
colocando el resultado en uno de ellos o en otro registro (Ej.: sum, mul, div,
entres otras instrucciones). o realizar operaciones binarias, incluyendo
operaciones lógicas (AND/OR/XOR/NOT) o comparar valores entre registros (mayor,
menor, igual) (Ej.: cmp)
§ afectar el flujo del programa
saltar a otra posición en el programa y ejecutar instrucciones allí(Ej.:
jmp) o saltar si se cumplen ciertas condiciones (IF) (Ej.: jnb, jnz, jb, jz,
jne, je, entre otros) o saltar a otra posición, pero guardar el punto de salida
para retornar (Ej.: 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
EJEMPLO
El siguiente es un ejemplo del programa clásico Hola mundo
escrito para la arquitectura de procesador x86 (bajo el sistema operativo DOS)
en modo texto (por defecto).
.model small
.stack
.data
Cadena1 DB 'Hola Mundo.$'
.code
.stack
.data
Cadena1 DB 'Hola Mundo.$'
.code
programa:
mov ax, @data
mov ds, ax
mov dx, offset Cadena1
mov ah, 9
int 21h
int 20h
end programa
mov ax, @data
mov ds, ax
mov dx, offset Cadena1
mov ah, 9
int 21h
int 20h
end programa
No hay comentarios:
Publicar un comentario