Please enable JavaScript.
Coggle requires JavaScript to display documents.
Unidad 4 Lenguaje y automatas II - Coggle Diagram
Unidad 4 Lenguaje y automatas II
4.1 Registros
La CPU tiene 14 registros internos, cada uno de ellos de 16 bits (una palabra).
Los bits están enumerados de derecha a
izquierda, de tal modo que el bit menos significativo es el bit 0.
Los registros se pueden clasificar de la siguiente forma:
Registros de datos
Registros de segmentos
Registros punteros de pila
Registros índices
Puntero de instrucciones
Registro de banderas (flags)
Registros de datos:
AX: Registro acumulador. Es el principal empleado en las operaciones aritméticas.
BX: Registro base. Se usa para indicar un desplazamiento.
CX: Registro contador. Se usa como contador en los bucles.
DX: Registro de datos. También se usa en las operaciones aritméticas.
REGISTROS INTERNOS DE LA UNIDAD CENTRAL
DE PROCESAMIENTO (CPU)
Estos registros son de uso general y también pueden ser utilizados como registros de 8 bits
Registros de segmentos:
CS: Registro de segmento de código. Contiene la dirección de las instrucciones del programa.
DS: Registro segmento de datos. Contiene la dirección del área de memoria donde se encuentran
los datos del programa.
SS: Registro segmento de pila. Contiene la dirección del segmento de pila. La pila es un espacio de memoria temporal que se usa para almacenar
valores de 16 bits (palabras).
ES: Registro segmento extra. Contiene la dirección del segmento extra.
Registros punteros de pila:
SP: Puntero de la pila. Contiene la dirección relativa al segmento de la pila.
BP: Puntero base. Se utiliza para fijar el puntero de pila y así poder acceder a los elementos de la pila
Registros índices:
SI: Índice fuente de 16 bits. Es requerido por algunas operaciones con
cadenas. Está asociado con el registro DS
DI: Índice destino. Similar al SI. Asociado con el registro ES.
4.2 Lenguaje ensamblador.
El lenguaje ensamblador es el sistema alfanumérico
para escribir código máquina mediante expresiones abreviadas (mnemotécnicos).
Es usado principalmente porque hay aplicaciones o programas que deben tratar directamente con los registros de la máquina,la memoria, dispositivos de E/S.
Procesos para la creación de un programa
Diseño del algoritmo
Codificación del mismo
Traducción a lenguaje máquina
Prueba del programa
Depuración
SOFTWARE NECESARIO:
Primero un editor
Segundo un compilador
tercero un enlazador
El editor puede ser cualquier editor de textos que se tenga a
la mano, como compilador utilizaremos el programa Turbo Assembler (TASM)
La extensión usada para que el TASM reconozca los
programas fuente en ensamblador es .ASM
El enlazador genera, a partir de un archivo .OBJ o la combinación de varios de estos archivos, un programa ejecutable, cuya extensión es .EXE.
LA ESTRUCTURA DEL ENSAMBLADOR:
En el lenguaje ensamblador las líneas de código constan de dos
partes
la primera es el nombre de la instrucción que se va a
ejecutar
la segunda son
los parámetros de comando u operandos.
El nombre de las instrucciones en este lenguaje puede estar
formado de 2 a 6 letras
En ensamblador los bucles, condicionales, subrutinas y demás elementos se codifican de forma distinta de cómo se hace en otros lenguajes de alto nivel.
BUCLES
Inicialización de un registro (a modo de contador) al nº de vueltas del bucle.
Etiqueta
Primera instrucción del bucle <resto de instrucciones dentro del bucle>
decrementar el contador saltar a la etiqueta si el contador >0 <instrucciones fuera del bucle>
SALTOS CONDICIONALES:
Instrucción de comparación Evaluar condición y si se cumple saltar a la etiqueta prefijada <instrucciones para el caso de no cumplirse la condición> saltar fuera del condicional
INTERRUPCIONES:
Una interrupción es una instrucción que detiene la ejecución de un programa para permitir el uso de la UCP a un proceso prioritario.
Una vez concluido este último proceso se devuelve
el control a la aplicación anterior.
Las interrupciones ocurren muy seguido, sencillamente la
interrupción que actualiza la hora del día ocurre aproximadamente 18 veces por segundo.
A continuación describiremos los 3 tipos de interrupciones:
1) INTERRUPCIONES INTERNAS DE HARDWARE:
Las interrupciones internas son generadas por ciertos eventos que surgen durante la ejecución de un programa. Este tipo de interrupciones son manejadas en su totalidad por el hardware y no es posible modificarlas.
2) INTERRUPCIONES EXTERNAS DE HARDWARE
Las interrupciones externas las generan los dispositivos
periféricos, como pueden ser:
teclado, impresoras, tarjetas de
comunicaciones, etc.
También son generadas por los
coprocesadores.
3) INTERRUPCIONES DE SOFTWARE:
Las interrupciones de software pueden ser activadas
directamente por el ensamblador invocando al número de interrupción deseada con la instrucción INT.
El uso de las interrupciones nos ayuda en la creación de programas, utilizándolas nuestros programas son más cortos, es más fácil entenderlos y usualmente tienen un mejor desempeño
4.3 Lenguaje máquina.
MOVIMIENTO DE LOS DATOS
En todo programa es necesario mover datos en la memoria y
en los registros de la UCP
Este movimiento de datos está sujeto a reglas y restricciones.
Algunas de ellas son las que se citan a continuación
No es posible mover datos de una localidad de memoria a
otra directamente
No se puede mover una constante directamente a un
registro de segmentos, primero se debe mover a un registro de la UCP
Es posible mover bloques de datos por medio de las
instrucciones movs, que copia una cadena de bytes o palabras
En una pila el primer dato introducido es el último que
podemos sacar, esto es, si en nuestro programa utilizamos
las instrucciones:
PUSH CX
PUSH AX
PUSH BX
Para devolver los valores correctos a cada registro al
momento de sacarlos de la pila es necesario hacerlo en el siguiente orden:
POP AX
POP CX
POP BX
Para la comunicación con dispositivos externos se utilizan el
comando out para mandar información a un puerto y el comando in para leer información recibida desde algún puerto.
La sintaxis del comando out es:
OUT DX,AX
Donde DX contiene el valor del puerto que se utilizará para la comunicación y AX contiene la información que se mandará.
La sintaxis del comando in es:
IN AX,DX Donde AX es el registro donde se guardará la información que llegue y DX contiene la dirección del puerto por donde llegará la información.
INSTRUCCIÓN MOV:
Propósito: Transferencia de datos entre celdas de memoria,
registros y acumulador.
Los diferentes movimientos de datos permitidos para esta
instrucción son:
Destino: memoria. Fuente: dato inmediato
Destino: memoria. Fuente: registro
Destino: memoria. Fuente: acumulador
Destino: acumulador. Fuente: memoria
Destino: registro de segmento. Fuente: memoria/registro
Destino: memoria/registro. Fuente: registro de segmento
Destino: registro. Fuente: registro
Destino: registro. Fuente: memoria
Destino: registro. Fuente: dato inmediato
4.4 Administración de memoria.
Organización de la memoria durante la ejecución
para que un
programa se ejecute sobre un sistema operativo
es necesaria la existencia de un cargador que suministra al programa un bloque contiguo de memoria sobre el cual ha de ejecutarse.
el compilador debe incorporar al programa objeto todo
el código necesario para ello
La gestión de la memoria en otro tipo de lenguajes
(funcionales, lógicos, etc.) es, en general, diferente de la organización que aquí se plantea
Para lenguajes imperativos, los compiladores generan
programas que tendrán en tiempo de ejecución
una organización de la memoria similar (a grandes rasgos) a la que aparece en la siguiente figura.
En este esquema se distinguen claramente las secciones de:
4 more items...
Zona de código
Es la zona donde se almacenan las instrucciones del
programa ejecutable en código máquina
y también el código correspondiente a los procedimientos y funciones que utiliza.
Su tamaño y su contenido se establecen en tiempo de compilación y por ello se dice que su tamaño es fijo en tiempo de ejecución.
De esta forma, el compilador, a medida que va generando código, lo va situando secuencialmente en esta zona
delimitando convenientemente el inicio de cada función, procedimiento y programa principal
El programa ejecutable final estará constituido por esta zona junto con información relativa a las necesidades de memoria para datos en tiempo de ejecución
Overlays, solapamientos o encimamientos.
Algunos compiladores fragmentan el código del programa objeto usando overlays o “solapas”
cuando la memoria principal disponible es inferior al tamaño del programa completo
Estos overlays son secciones de código objeto que se almacenan en ficheros independientes y que se cargan en la memoria central dinámicamente
Se les llama “solapas” porque dos overlays pueden ocupar el mismo trozo de memoria en momentos de tiempo diferentes
Para hacer más eficiente el uso de la memoria,
los overlays de un programa se agrupan en zonas y módulos
Durante el tiempo de ejecución sólo uno de los overlays de cada una de las zonas de overlay puede estar almacenado
La técnica de overlays no sólo se utiliza cuando el programa
a compilar es muy grande en relación con la disponibilidad de memoria
sino también cuando se desea obtener
programas de menor tamaño que deben coexistir con otros
El compilador reserva en la sección de
código una zona contigua de memoria para cada conjunto de overlays.
El tamaño de esta zona debe ser igual al del mayor módulo que se cargue sobre ella.
Una restricción a tener en cuenta es que las funciones de un módulo no deben hacer referencia a funciones de otro
ya que nunca estarán
simultáneamente en memoria.
Evidentemente, el tiempo de ejecución de un programa
estructurado con overlays es mayor que si no tuviese
puesto que durante la ejecución del programa es necesario
cargar cada módulo cuando se realiza una llamada a alguna de las funciones