La importancia del lenguaje ensamblador radica principalmente que se trabaja
directamente con el microprocesador; por lo cual se debe de conocer el
funcionamiento interno de este, tiene la ventaja de que en el se puede realizar
cualquier tipo de programas que en los lenguajes de alto nivel no lo pueden
realizar. Otro punto sería que los programas en ensamblador ocupan menos
espacio en memoria.
2. Ventajas y desventajas del Lenguaje Ensamblador
Ventajas
1. Velocidad .- Como trabaja directamente con el
microprocesador al ejecutar un programa, pues como este lenguaje es el mas
cercano a la máquina la computadora lo procesa mas rápido.
2. Eficiencia de tamaño .- Un programa en ensamblador
no ocupa mucho espacio en memoria porque no tiene que cargan librerías y demás
como son los lenguajes de alto nivel
3. Flexibilidad .- Es flexible porque todo lo que puede
hacerse con una máquina, puede hacerse en el lenguaje ensamblador de esta máquina;
los lenguajes de alto nivel tienen en una u otra forma limitantes para explotar
al máximo los recursos de la máquina. O sea que en lenguaje ensamblador se
pueden hacer tareas especificas que en un lenguaje de alto nivel no se pueden
llevar acabo porque tienen ciertas limitantes que no se lo permiten
Desventajas
Tiempo de programación .- Como es un lenguaje de bajo nivel requiere más
instrucciones para realizar el mismo proceso, en comparación con un lenguaje de
alto nivel. Por otro lado, requiere de más cuidado por parte del programador,
pues es propenso a que los errores de lógica se reflejen más fuertemente en la
ejecución.
Programas fuente grandes .- Por las mismas razones que aumenta el tiempo, crecen
los programas fuentes; simplemente requerimos más instrucciones primitivas para
describir procesos equivalentes. Esto es una desventaja porque dificulta el
mantenimiento de los programas, y nuevamente reduce la productividad de los
programadores.
Peligro de afectar recursos inesperadamente .- Que todo error que podamos
cometer, o todo riesgo que podamos tener, podemos afectar los recursos de la
maquina, programar en este lenguaje lo más común que pueda pasar es que la máquina
se bloquee o se reinicialize. Porque con este lenguaje es perfectamente posible
(y sencillo) realizar secuencias de instrucciones inválidas, que normalmente no
aparecen al usar un lenguaje de alto nivel.
Falta de portabilidad.- Porque para cada máquina existe un lenguaje
ensamblador; por ello, evidentemente no es una selección apropiada de lenguaje
cuando deseamos codificar en una máquina y luego llevar los programas a otros
sistemas operativos o modelos de computadoras.
3. Relación del lenguaje ensamblador con los componentes
internos del procesador
En la memoria se almacena
la información en celdas especiales llamados registros los cuales tienen un
nivel alto y un nivel bajo.
Unidad aritmética y lógica
es la responsable de realizar como su nombre lo indica operaciones aritméticas
y lógicas.
Unidad de control Se encarga
de coordinar de que los otros componentes ejecuten las operaciones
correctamente.
Bus interno son los canales
por donde pasa la información que la máquina va a procesar (bus de entrada) o
procesada (bus de salida).
Registros de uso general
AX = Registro acumulador, dividido en AH y AL (8 bits cada uno).- Interviene en
las operaciones aritméticas y lógicas, después de la operación arroja un
resultado.
BX = Registro base, dividido en BH y BL.- Se utiliza en transferencias de datos
entre la memoria y el procesador.
CX = Registro contador, dividido en CH y CL.- Se utiliza como contador en
bucles(LOOP), en operaciones con cadenas(REP), y en desplazamientos(CL).
DX = Registro de datos, dividido en DH y DL.- Se utiliza en operaciones de
multiplicación y división junto con Ax y en operaciones de entrada y salida de
puertos, su mitad inferior DL contiene el número de puertos.
Registros de Estado
Hay nueve indicadores de un bit en este registro de 16 bits. Los cuatro bits más
significativos están indefinidos, mientras que hay tres bits con valores
determinados: los bits 5 y 3 siempre valen cero y el bit 1 siempre vale uno.
CF (Carry Flag, bit 0): Si vale 1, indica que hubo "arrastre" (en caso
de suma) o "préstamo" (en caso de resta). Este indicador es usado por
instrucciones que suman o restan números que ocupan varios bytes. Las
instrucciones de rotación pueden aislar un bit de la memoria o de un registro
poniéndolo en el CF.
PF (Parity Flag, bit 2): Si vale uno, el resultado tiene paridad par, es decir,
un número par de bits a 1. Este indicador se puede utilizar para detectar
errores en transmisiones.
AF (Auxiliary carry Flag, bit 4): Si vale 1, indica que hubo
"arrastre" o "préstamo" del nibble (cuatro bits) menos
significativo al nibble más significativo. Este indicador se usa con las
instrucciones de ajuste decimal.
ZF (Zero Flag, bit 6): Si este indicador vale 1, el resultado de la operación
es cero.
SF (Sign Flag, bit 7): Refleja el bit más significativo del resultado. Como los
números negativos se representan en la notación de complemento a dos, este bit
representa el signo: 0 si es positivo, 1 si es negativo.
TF (Trap Flag, bit 8): Si vale 1, el procesador está en modo paso a paso. En
este modo, la CPU automáticamente genera una interrupción interna después de
cada instrucción, permitiendo inspeccionar los resultados del programa a medida
que se ejecuta instrucción por instrucción.
IF (Interrupt Flag, bit 9): Si vale 1, la CPU reconoce pedidos de interrupción
externas. Si vale 0, no se reconocen tales interrupciones
DF (Direction Flag, bit 10): Si vale 1, las instrucciones con cadenas sufrirán
"auto-decremento", esto es, se procesarán las cadenas desde las
direcciones más altas de memoria hacia las más bajas. Si vale 0, habrá
"auto-incremento", lo que quiere decir que las cadenas se procesarán
de "izquierda a derecha".
OF (Overflow flag, bit 11): Si vale 1, hubo un desborde en una operación aritmética
con signo, esto es, un dígito significativo se perdió debido a que tamaño del
resultado es mayor que el tamaño del destino.
Relación entre el código binario y el lenguaje ensamblador
En el código binario se utilizan ceros y unos, mientras que el lenguaje
ensamblador es una colección de símbolos mnemónicos que representan:
operaciones, nombres simbólicos, operadores y símbolos especiales.
La relación entre estos dos lenguajes sería que el binario es el lenguaje que
la máquina entiende y el ensamblador se acerca mas lenguaje de esta.
4. Manejo de la memoria: Direccionamiento (interno y externo)
El manejo de la memoria depende de que procesador tenga la máquina, entre
los cuales a continuación se mencionan los siguientes:
Memoria de Programa
Memoria Externa de Datos
Memoria Interna de Datos
Registros de Funciones
Especiales
Memoria de Bit.
El espacio de la Memoria de Programa contiene todas las instrucciones, datos,
tablas y cadenas de caracteres (strings) usadas en los programas. Esta memoria
se direcciona principalmente usando el registro de 16 bits llamado Data Pointer.
El tamaño máximo de la Memoria de Programa es de 64 Kbytes.
La Memoria Externa de Datos contiene todas las variables y estructuras de datos
que no caben en la memoria interna del Microprocesador. Esta memoria se
direcciona principalmente por el registro de 16 bits Data Pointer , aunque también
se puede direccionar un banco de Memoria Externa de Datos de 256 bytes usando
los dos primeros registros de propósito general .
El espacio de Memoria Interna de Datos funcionalmente es la memoria de datos más
importante, ya que ahí es donde residen cuatro bancos de registros de propósito
general; la pila o stack del programa; 128 bits de los 256 bits de un área de
memoria direccionable por bit y todas las variables y estructuras de datos
operadas directamente por el programa. El tamaño máximo de la Memoria Interna
de Datos es de 256 bytes.
Contiene un espacio para los denominados Registros de Funciones Especiales
destinado para los puertos de entrada/salida, temporizadores y puerto serie del
circuito integrado. Estos registros incluyen al Stack Pointer; al registro de la
palabra de estado del programa y al Acumulador. La cantidad máxima de Registros
de Funciones Especiales es 128.
Todos los Registros de Funciones Especiales tienen direcciones mayores a 127 y
se ubican en los 128 bytes superiores de la Memoria Interna de Datos. Estas dos
áreas de la Memoria Interna de Datos se diferencian por el modo de
direccionamiento usado para accesarlas. Los Registros de Funciones Especiales
solo se pueden accesar usando el modo de direccionamiento Directo, mientras que
los 128 bytes superiores solo se pueden accesar con el modo de direccionamiento
Indirecto.
Por otra parte, el espacio de Memoria de Bit se usa para almacenar variables y
banderas de un bit. El tamaño máximo de la Memoria de Bit es de 256 bits, 128
de los bits comparten su espacio con 16 bytes del espacio de la Memoria Interna
de Datos y los otros 128 bits lo hacen con los Registros de Funciones
Especiales.
Trabajo enviado por:
Miriam Yazmín Mendoza Caamal
Haumi Sabeli Pech Peraza