Unidad 2

IMPORTANCIA DEL LENGUAJE ENSAMBLADOR

   

 


  • Lenguaje ensamblador permitirá adentrarnos al estudio del hardware de una PC.

Este lenguaje proporciona las herramientas para tomar control sobre todo lo que la computadora realiza físicamente.

Ventajas

Proporciona un control absoluto sobre la PC.

Los programas en ensamblador son rápidos y compactos.

Desventajas

 
  • Una instrucción mal interpretada o un error de lógica puede crear un caos a tal grado que se requiera apagar y encender la máquina nuevamente.

Insuficiencia del conocimiento sobre el manejo interno de la máquina.

El programa se vuelve más complejo conforme se agregan más rutinas o funciones adicionales.

La PC tiene un punto de partida y de control que es la CPU. Toda información almacenada en la PC es procesada dentro de celdas llamadas registros.

Un registro es un conjunto de 8 o 16 flip-flop cuyo contenido es manipulado simultáneamente.

Los flip-flop son dispositivos electrónicos capaces de almacenar dos niveles de voltaje (Bajo o Alto).

Bajo 0.5 v - PC - Apagado 0

Alto 5v - PC - Encendido 1

 
  • Cada uno de estos estados es más conocido como BIT (B Inary? digiT)

A un grupo de 16 bits se le conoce como palabra, y dicha palabra puede dividirse en grupos de 8 bits conocidos como bytes.

Un grupo de 4 bits se le conoce como nibble.

Un registro de 16 bits o flip-flops puede almacenar un numero binario de 16 dígitos.

Visto de otra forma, el registro tiene la capacidad de representar 65,536.

Înter%Aportación Instituto Tecnológico de Zacatecas

Ventajas De Los Lenguajes Ensambladores.

El corazón de la computadora es el microprocesador, éste maneja las necesidades aritméticas, de lógica y de control de la computadora.

El microprocesador tiene su origen en la década de los sesenta, cuando se diseño el circuito integrado (IC por sus siglas en ingles) al combinar varios componentes electrónicos en un solo componente sobre un “chip” de silicio. Los fabricantes colocaron este diminuto chip en un dispositivo parecido a un ciempiés y lo conectaron a un sistema en funcionamiento. A principios de los años setenta Intel introdujo el chip 8008 el cual, instalado en una computadora terminal, acompaño a la primera generación de microprocesadores. La variedad de microcomputadoras también ocasiono un renovado interés en el lenguaje ensamblado, cuyo uso conlleva a diferentes ventajas:

 
    Un programa escrito en el lenguaje ensamblador requiere considerablemente menos memoria y tiempo de ejecución que un programa escrito en los conocidos lenguajes de alto nivel, como Pascal y C.



    El lenguaje ensamblador da a un programador la capacidad de realizar tareas muy técnicas que serian difíciles, si no es que imposibles de realizar en un lenguaje de alto nivel.



    El conocimiento del lenguaje ensamblador permite una comprensión de la arquitectura de la maquina que ningún lenguaje de alto nivel puede ofrecer.



    Aunque la mayoría de los especialistas en Software desarrolla aplicaciones en lenguajes de alto nivel, que son más fáciles de escribir y de dar mantenimiento, una practica común es recodificar en lenguaje ensamblador aquellas rutinas que han causado cuellos de botella en el procesamiento.



    Los programas residentes y rutinas de servicio de interrupción casi siempre son desarrollados en el lenguaje ensamblador. 

Los lenguajes de alto nivel fueron diseñados para eliminar las particularidades de una computadora especifica, mientras que un lenguaje ensamblador esta diseñado para una computadora especifica, o, de manera más correcta, para una familia especifica de microprocesadores.

 

MANEJO DE MEMORIA

 

La unidad de manejo de memoria o unidad de gestión de memoria (de sus siglas en inglés: Memory Management Unit) es un dispositivo de Hardware formado por un grupo de circuitos integrados, responsable del manejo de los accesos a la memoria por parte de la Unidad de Procesamiento Central (CPU).

Entre las funciones de este dispositivo se encuentran la traducción de las direcciones virtuales a direcciones físicas (ver Sistema de Memoria Virtual), la protección de la memoria, el control de caché y, en arquitecturas de computadoras más simples (especialmente en sistemas de 8 bits), Bank switching.

Cuando la CPU intenta acceder a una dirección de memoria virtual, la MMU realiza una búsqueda en una memoria caché especial llamada Buffer de Traducción Adelantada (TLB, Translation Lookaside Buffer), que mantiene una parte de la tabla de páginas usadas hace menos tiempo. En esta memoria se mantienen entradas de la tabla de páginas (llamadas PTE por sus siglas en inglés, Page Table Entry), donde se pueden rescatar las direcciones físicas de algunas direcciones reales, de forma directa. Cuando la dirección requerida por la CPU se encuentra en el TLB, su traducción a dirección real o física es entregada, en lo que se conoce como ‘acierto en el TLB’. En otro caso, cuando la dirección buscada no se encuentra en el TLB (fallo en el TLB), el procesador busca en la tabla de páginas del proceso utilizando el número de página como entrada a la misma. En la entrada de la tabla de páginas del proceso se encuentra un bit de presencia, que indica si la página buscada está en memoria principal. Si el bit de presencia está activado, se carga esta PTE en el TLB y se devuelve la dirección física. En caso contrario, se informa al sistema operativo de la situación, mediante un fallo de página. Es el sistema operativo el encargado de realizar los ajustes necesarios (esto es, cargar la página en memoria principal) usando uno de los Algoritmos de reemplazo de páginas, para continuar con la ejecución desde la instrucción que causó el fallo.

Un beneficio fundamental de la MMU es la posibilidad de implementar protección de memoria, evitando que los programas accedan a porciones de memoria prohibidos. Por ejemplo se puede evitar que un programa acceda o modifique sectores de memoria de otros programas (cuando no se supone que lo haga)..

 

Instrucción Operandos Función equivalente en “C”

 ||border=1 width=80%
 
Hdr Hdr Hdr
 
     
 
     

MOV destino, fuente destino = fuente

PUSH fuente [SS:SP] = fuente; SP += sizeof(destino)

POP destino SP -= sizeof(destino) ; destino = [SS:SP]

XCHG op1, op2 temp = op1; op1 = op2; op2 = temp

Comentarios

 

MOV

acepta distintos modos de direccionamiento; las principales limitantes que tiene son:

Destino y fuente no pueden ser, ambos, referencias a memoria; al menos uno de ellos debe ser un registro o una constante.

 

El destino

no puede ser una constante, debe ser un registro o una referencia a memoria.

Los registros de segmento solamente pueden usarse junto con un registro de uso general.

Destino y fuente deben tener el mismo “tipo” (ambos referencias a bytes, o a word, pero no uno a byte y otro a word).

 

PUSH y POP

requieren operandos de tamano Word. En 8086/88 tiene que ser un registro o una localidad de memoria; en 80286 y superiores, la mejora principal es que PUSH ya se puede hacer sobre una constante.