Вы находитесь на странице: 1из 31

UNIVERSIDAD NACIONAL DE SAN AGUSTIN

FACULTAD DE INGENIERIA DE PRODUCCION Y SERVICIOS

ESCUELA PROFESIONAL DE INGENIERIA ELECTRONICA

CURSO:
ARQUITECTURA DE COMPUTADORAS LABORATORIO

TURNO:
“C” MIERCOLES 12:20 - 14:00 HORAS

Hadware Computadora personal PC XT 8088 8086

LABORATORIO Nro. 1

APELLIDOS Y NOMBRES CUI FIRMA

Choque Ochoa, Jhoel 20143109

Lipa Hilario, Cristian Albert 20143096

Gomez Nuñez, Nigel 20

29 de agosto de 2018
HARDWARE COMPUTADORA PERSONAL
PC XT 8088-8086
ÍNDICE

1. SISTEMAS QUE COMPONEN LA COMPUTADORA XT… ................................ 3


2. CARACTERÍSTICAS DEL PROCESADOR 8088/8086 ...................................... 7
3. FUNCIONAMIENTO EN GENERAL ................................................................... 8
4. SISTEMA DESCRITO POR BLOQUES Y POR CIRCUITOS… ............................... 10
5. ESQUEMÁTICO DEL SISTEMA COMPLETO SISTEMA DE APLICACIÓN ............. 13
6. MUESTRA DE UNA MAINBOARD XT CON IDENTIFICACIÓN DE
DISPOSITIVOS, ETIQUETADO Y ACCESORIOS .................................................. 14
7. REGISTROS DEL 8088 .....................................................................................18
8. MODOS DE DIRECCIONAMIENTO ..................................................................21
9. SET DE INSTRUCCIONES DEL 8088 .................................................................... 22
10. LENGUAJE MÁQUINA, MACROENSAMBLADOR DEL 8088 .......................... 29
11. DEBUGER Y SIMULADORES DEL 8088 ............................................................... 30
12. BIBLIOGRAFÍA… ............................................................................................. 31

2
1.- Sistemas que componen la computadora XT
1.1 COMPONENTES DEL SISTEMA
Al observar el diagrama en bloque de la PC XT, podemos ver el microprocesador 8088, el
coprocesador matemático 8087, el controlador de interrupciones 8259, el de DMA 8237, etc.
También es posible observar los conectores de expansión del BUS, que le dan a la PC la
característica de arquitectura abierta, ya que permite el diseño de cualquier tipo de módulo de
entrada salida, conectable al mencionado BUS. A continuación, describiremos cada uno de los
componentes mencionados y las principales funciones que cumplen.

1.1.1 Microprocesador 8088

Este 𝜇P contiene el mismo set de instrucciones que el 8086, ambos son procesadores de
16 bits capaces de ejecutar instrucciones en 400ns solo que a diferencia del 8086 el 8088
posee un BUS de datos de 8 bits que lo hacía compatible con los dispositivos diseñados
para el anterior microprocesador de Intel 8085. Por este motivo el Bus de datos de la PC
XT es de solo 8 bits, aunque el funcionamiento interno del microprocesador es de 16 bits.
En la primera versión de la PC XT, el microprocesador funcionaba a una frecuencia de
reloj de 4,77 MHz, motivo por el cual se utilizaba un oscilador de frecuencia triple de
14,318 MHz. Versiones posteriores de PC incorporaron chips de mayor velocidad, como
el caso del NEC-V20 que posee las mismas características que el 8088 pero funciona a 8
MHz.

3
1.1.2 Coprocesador matemático 8087

Junto al microprocesador es posible distinguir un zócalo de 40 pines para la instalación


del circuito integrado 8087, que es la unidad de punto flotante (FPU) diseñada para el
8086/8088 (también llamada unidad de procesamiento numérico NPU). Este
coprocesador aumenta el juego instrucciones del 8086/8088 mejorando su capacidad de
tratamiento de números, lo que incrementa notablemente la velocidad de procesamiento,
en especial cuando los programas requieren operaciones numéricas de alta precisión. El
agregado de esta opción sólo requiere la instalación del coprocesador en el zócalo y la
habilitación de un switch en la placa madre, que indica la existencia del coprocesador.
Este switch permite que el microprocesador reciba la interrupción de excepción del
coprocesador.

1.1.3 Controlador de interrupciones 8259

Otro de los chips de la familia Intel que integran la PC es el controlador programable de


interrupciones (PIC) 8259. Este chip permite ampliar a ocho las entradas de interrupción,
generándose las señales llamadas IRQ0 a IRQ7. El diseño de la placa madre de la PC
prevé la asignación de algunas de éstas para funciones específicas, tal es el caso de las
IRQ0 e IRQ1. La primera de ellas se conecta a la salida del contador del timer y sirve
para proveer una base de tiempo confiable. En la programación inicial del 8259 se le
asigna a esta entrada el vector de interrupción 8, por los que las restantes poseen los
vectores siguientes (9 a 15). La IRQ1 (vector 9) se emplea para la lectura del teclado. Las
restantes interrupciones se encuentran en el slot de expansión del BUS, lo que permite
que sean usadas por cualquier dispositivo conectado en dicho lugar. Sin embargo, la
estandarización del hardware y software mencionada con anterioridad hizo que los
controladores más comunes conserven una interrupción como predeterminada. Esto
implica que las mismas no deben ser utilizadas por otros dispositivos cuando se encuentre
instalado alguno de esos controladores. A continuación, se proporciona una lista de las
interrupciones y se mencionan los controladores más comunes que hacen uso de ellas.

4
La IRQ2 que figura como reservada permite que se la utilice para agregar un segundo
chip 8259 en cascada, lo que implica un aumento de 7 interrupciones. Esto se incorporó
a la placa madre de la PC-AT que sucedió a la PC, e incorporaba el microprocesador
80286 como unidad central de proceso.

1.1.4 Controlador de DMA 8237

También podemos observar el controlador 8237, que proporciona cuatro canales de DMA
para dispositivos de entrada salida que requieran de este servicio. Estos canales de
denominan con las siglas DMA0 a DMA3, y al igual que las interrupciones se encuentran
preasignados para cumplir con las funciones básicas. El canal 0 se emplea para realizar
el refresco de la memoria RAM dinámica, por lo que se conecta directamente al timer del
sistema. Esto permite que se realice periódicamente cada intervalo de tiempo definido
para evitar que el contenido de la memoria se desvanezca por completo. Los restantes
canales se encuentran disponibles en el conector de expansión con sus señales DRQ y
DACK para que puedan ser usados por los dispositivos de entrada salida que lo requieran.
A continuación, se proporciona una lista de la asignación de los canales en la PC.

1.1.5 Timer 8253

Este chip es un contador/timer que provee a la PC de 3 timers programables utilizados


para todas las mediciones de tiempo. Algunas de las aplicaciones ya fueron mencionadas
cuando se describieron los controladores 8259 y 8237, aunque no fueron completamente
analizadas. El 8253 provee tres canales independientes, cada uno de ellos programable
de 6 modos diferentes. Las entradas de reloj pueden ser distintas para cada canal, aunque
en la PC es única y de 1,19 MHz.

5
1.1.6 Diagrama en bloques
En la PC los canales se encuentran asignados como se muestra en la figura. Como se
puede ver el canal 0 se encuentra siempre habilitado y se utiliza como contador del
sistema para proveer una base de tiempo confiable. La salida del timer proporciona una
interrupción, comúnmente llamada timer tic, que se conecta a la IRQ0. La misma es
utilizada por el BIOS para incrementar un contador de 4 bytes en 0040:006C que se utiliza
para el cómputo de la fecha y la hora. El canal 1 está también siempre habilitado y
programado para una cuenta de 15uS, pero su salida se conecta al canal 0 de DMA. El
final de cuenta de este timer dispara un ciclo de lectura de memoria (“dummy”) que
permite que no transcurra demasiado tiempo sin que ésta sea leída. Este ciclo conocido
como refresco de memoria es imprescindible para que el contenido no se desvanezca. Por
último, el canal 2 se encuentra disponible, aunque como se pueda ver se encuentra
conectado al altavoz. Si se quisiera usar con otros fines, se debe deshabilitar el parlante a
través de la salida B1 del 8255, y se podrá habilitar el timer a través de B0. El final de
cuenta puede detectarse por la misma 8255, a través de la entrada C5.

1.1.7 ROM BIOS


La ROM es un tipo de almacenamiento empleado para almacenar la firmware que
controla el hardware de un sistema electrónico. Los datos almacenados en la ROM no se
pueden modificar ya que estas memorias son grabadas en fabrica durante el proceso de
fabricación. Su función es iniciar y probar el hardware del sistema así como también
cargar un gestor de arranque o un sistema operativo de un dispositivo de almacenamiento
de datos. Tiene relación con muchos componentes del hardware y es imprescindible para
el buen funcionamiento de la placa base

6
2.- Características del procesador 8088/ 8086
Primer microprocesador de propósito general cuyas principales características son:
- Bus de datos de 8 bits.
- Arquitectura interna de 16 bits.
- Capacidad de direccionamiento de memoria hasta 1 Mbyte.
- Compatibilidad de software con 8086.
- Dos velocidades de reloj: 5 MHz para 8088, 8 MHz para 8088-2.
- Operaciones a nivel de byte, palabra y bloque.
- 24 modos de direccionamiento a memoria.
- Set de registro de 14 palabras por 16 bits con operaciones simétricas.
- Operaciones de bytes, palabras y bloques.
- 8 bits y 16 bits firmados y no firmados, Aritmética en Binario o Decimal,
Incluyendo multiplicar y dividir.
- Disponible en EXPRESS: Rango de temperatura estándar y Rango de
temperatura ampliado.

El microprocesador Intel 8088, es un microprocesador de alto rendimiento implementado en canal


N, carga de agotamiento, puerta de silicio tecnología (HMOS-II), y empaquetado en un paquete
CERDIP (Ceramic Dual In-line Package) de 40 pines. El procesador tiene los atributos de ambos
microprocesadores de 8 y 16 bits. Es directamente compatible con el software 8086 y 8080/8085
hardware y periféricos.
El 8088 puede trabajar en dos modos: mínimo (pequeñas aplicaciones) y máximo (sistemas
multiprocesador). Los requerimientos de conexión con el exterior cambian en función del modo
que se decida emplear, aunque una parte de las señales es común en ambos.
Consta de una unidad de ejecución (EU: Execution Unit) y una unidad interfaz del bus (BIU: Bus
Interface Unit). La unidad de ejecución es la encargada de realizar todas las operaciones mientras
que la unidad de interfaz del bus es la encargada de acceder a datos e instrucciones del mundo
exterior, como se aprecia en le diagrama de bloques siguiente.

7
3.- Funcionamiento en general

Al ser inicializado el microprocesador, lo primero que hace es generar la dirección de


memoria 0000h, para el ROM BIOS. Luego activa el pin ALE, para que el los bits bajos de
la dirección (AD0-AD7) queden almacenados en el circuito d e Báscula Cerrojo. Luego de
ello, activa el pin RD, con lo que recibe el dato correspondiente al código de operación de la
primera instrucción almacenada el ROM BIOS a través de sus líneas de datos (con ello se
explica la necesidad del circuito báscula cerrojo). Una vez recibido este primer dato, el
microprocesador busca en su tabla de códigos, a qué operación se refiere y según ello, puede
generar una nueva dirección al siguiente dato para completar su operación. Este ciclo se repite
siempre, la variación puede estar en que el periférico direccionado, puede ser ROM, RAM o
un periférico.

En caso que el microprocesador desee escribir en la memoria, se genera primero la dirección,


como en el caso anterior, sólo que esta vez se ponen los datos en el bus de datos y luego se
activa el pin WR.

Adicionalmente, posee en su configuración unos pines llamados NMI, INTA, INT, HOLD y
HLDA que controlan procesos que veremos más adelante.

Funcionamiento a detalle.
Organización de la memoria
El procesador proporciona una dirección de 20 bits a la memoria que localiza el byte que se hace
referencia. La memoria está organizada como una serie lineal de hasta 1 millón bytes, dirigida
como 00.000 (H) para FFFFF (H). La memoria se divide lógicamente en código, datos, datos
adicionales, y los segmentos de pila de hasta 64K bytes cada uno, con cada segmento que cae
sobre límites de 16 bytes
Todas las referencias de memoria se hacen en relación con direcciones base que figuran en los
registros de segmento de alta velocidad.
Los tipos de segmento se eligieron sobre la base de las necesidades de direccionamiento de los
programas.

El registro de segmento
De ser seleccionado se elige automáticamente según las reglas de la tabla siguiente. Toda la
información en un solo tipo de segmento comparte los mismos atributos lógicos (por ejemplo,
código o datos). Al estructurar de memoria en áreas reubicables de características similares y
seleccionando automáticamente registros de segmento, los programas son más corto, más rápido
y más estructurado. Palabra (16 bits) operandos pueden estar ubicados en pares o impares límites
de direcciones. Para direcciones y de datos operandos, el byte menos significativo de la palabra
se almacena en la ubicación de la dirección valor más bajo y el byte más significativo en la
siguiente ubicación de la dirección superior.
La BIU ejecutará automáticamente dos recoge o escribe ciclos para operandos de 16 bits

8
Modos de mínimos y máximos
Los requisitos para los sistemas de apoyo mínimo y máximo 8088 son lo suficientemente
diferentes que no se pueden hacer de manera eficiente con 40 pines definidos de forma exclusiva.
En consecuencia, el 8088 está equipado con un perno de la correa (MN / MX) que define el
sistema.
La definición de un cierto subconjunto de los pasadores de cambios, dependiendo de la condición
del perno de la correa. Cuando el MN / MXpin es atado a GND, el 8088 define pasadores 24 a 31
y 34 en el modo de máxima. Cuando el MN / MXpin está atado a VCC, el 8088 genera en sí
señales de control de bus pasadores 24 a través de 31 y 34. El modo de mínimo 8088 pueden ser
utilizados ya sea con un bus multiplexado o demultiplexado. La configuración del bus
multiplexado es compatible con los MCS-85 periféricos de bus multiplexados. Esta arquitectura
proporciona la potencia de procesamiento 8088 en una forma altamente integrado.
El modo desmultiplexada requiere un enganche (por 64K de direccionamiento) o dos pestillos
(por un megabyte completo de abordar). Un tercer pestillo se puede utilizar para el
almacenamiento en búfer si el bus de dirección de carga lo requiere. Un transceptor también se
puede utilizar si se requiere el almacenamiento en búfer bus de datos. El 8088 proporciona
DENand DT / R para controlar el transceptor y ALE se prenda las direcciones. Esta configuración
del modo de mínimo proporciona la estructura de bus demultiplexado estándar con buffering bus
pesada y requisitos de temporización bus relajadas.
El modo de máximo emplea el controlador 8288 de bus. El 8288 decodifica líneas de estado S0,
S1, y S2, y proporciona el sistema con todos los autobuses señales de control. Al mover el control
del bus a la 8288 proporciona una mejor fuente y sumidero capacidad de corriente para las líneas
de control, y libera a los 8088 pines para las características del sistema de grandes extendidos.
Bloqueo de hardware, estado de la cola, y dos de solicitud / subvención las interfaces son
proporcionadas por el 8088 en modo de máxima.

Bus Operación
El autobús 8088 de direcciones / datos se divide en tres partes las ocho direcciones inferiores /
bits de datos (Ad0-AD7), los ocho bits de dirección intermedios (A8- A15), y los cuatro bits de
dirección superiores (A16- A19). Las direcciones de bits / datos y los cuatro bits de dirección más
altos son multiplexados tiempo. Esta técnica proporciona el mayor uso eficiente de los pines en
el procesador, permitiendo el uso de un paquete de 40 plomo estándar. Las medias ocho bits de
dirección no son multiplexados, es decir, que siguen siendo válidas durante cada ciclo de bus.
Además, el bus puede demultiplexarse en el procesador con un único pestillo de dirección
estándar, bus no multiplexado se desea para el sistema.

E / S Direccionamiento
En el 8088, me operaciones E / S puede direccionar hasta un máximo de 64 K / S registros. La
dirección de E / S aparece en el mismo formato que la dirección de memoria en las líneas de
autobús A15- A0. Las líneas de dirección A19- A16 son cero en las operaciones de E / S. La
variable de E / S instrucciones, que utilizan registrarse DX como un puntero, tiene dirección
completa capacidad, mientras que las instrucciones directas de E / S se refieren directamente a
uno o dos de los lugares de bytes de E / S 256 en la página 0 del espacio de direcciones de E / S.
Puertos I / O se tratan en la misma manera que las posiciones de memoria. Diseñadores
familiarizados con el 8085 o actualizar un diseño 8085 deben tener en cuenta que las 8085
direcciones de E / S con una dirección de 8 bits en ambas mitades del bus de direcciones de 16
bits. El 8088 utiliza una dirección de 16 bits completa sobre sus inferiores 16 líneas de dirección

9
4.- Sistema descrito por bloques y por circuitos

La PC XT estaba esencialmente basada en la misma arquitectura de la IBM PC Original. La IBM


PC original fue un sistema basado en disquete con una memoria de 32K y cinco ranuras o slots
de expansión. La IBM PC soportaba uno o dos disquetes, cada uno con capacidad de 160KB y se
le podían agregar externamente dos manejadores de disco flexible. La PC original usó el
microprocesador 8088 de Intel corriendo a 4.77 MHz. A continuación se muestra la PC original
descrita por bloques:

Para estar a la vanguardia de las tecnologías competentes en ese entonces, la IBM PC rápidamente
requirió varias mejoras, para mantenerse a la par con el desarrollo de software y la necesidad de
más RAM y capacidad en disco. Esta necesidad se satisfizo con la introducción de la PC XT la
cual adoptó las siguientes mejoras:

 Se aumentó el número de ranuras de expansión a 8.


 Se agregó adaptador de disco y disco duro.
 Se agregó un puerto serie y un paralelo como equipo estándar.
 La capacidad en RAM de la tarjeta madre se incrementó a 256KB.
 La fuente de energía se aumenta de 65 a 130 watts.
 La capacidad del disco flexible se mejoró de un solo lado a doble lado para una
capacidad total de 360K.

En la figura a continuación, mostramos el sistema de la PC XT descrito por bloques, de esta


manera podemos contrastar los atributos del IBM PC con las mejoras anteriormente mencionadas:

10
La IBM PC XT no incrementó el rendimiento del procesador manteniendo el 8088 a 4.77 MHz.
El rendimiento de la PC XT se extendió incrementando la velocidad del reloj a 8 y 10 MHz. En
algunas compatibles, al aumentar la velocidad del reloj, se agregaron estados de espera para los
ciclos de memoria del procesador para permitir el uso de chips de RAM menos caros. El 8088
requiere cuatro ciclos para ejecutar un ciclo de memoria, con la adición de un estado de espera,
se requieren cinco ciclos de reloj. A 4.77 MHz, un ciclo de reloj es de 210 ns y sin estado de
espera el ciclo de memoria es 4 veces 210 ns, o 840 ns. A 10 MHz, los ciclos de reloj son de 100
ns y con cero estados de espera el ciclo de memoria es de 400 ns, o 2.1 veces más rápido que la
PC original de 4.77 MHz.

En cuanto a la Arquitectura de la PC XT, debemos decir que esta es original de IBM y fue
implementada en base al microprocesador 8088 de la INTEL. Una idea general de esta encierra
las siguientes características:

- Posee una máxima capacidad de direccionamiento de 1048576 BYTES,


comúnmente conocido como 1024KB.
- Es una arquitectura Local BUS.
- Posee ocho canales de interrupciones mascarables y una no mascarable, controladas
por el controlador de interrupciones 8259 y el microprocesador 8088
respectivamente.
- Posee 4 canales de acceso directo a memoria, todos controlados por el circuito
integrado (IC) 8237 de la INTEL.
- Posee las señales de control básicas de lectura y escritura de memoria y puerto.
- Posee cuatro alimentaciones de: +12V, -12V, +5V y -5V.

11
- Todas las señales son 100% compatibles con TTL menos las señales de 12V y -12V.
- Es una arquitectura sincrónica, cuya primera versión fue implementada con un reloj
de 4.77 MHZ.

El diagrama de bloques a continuación presenta de forma general y más completa cada uno de los
componentes de la placa principal del PC/XT basado en el microprocesador 8088:

12
5.- Esquemático del sistema completo Sistema de Aplicación.

13
6.- Muestra de una Mainboard XT con identificación de dispositivos

14
 BIOS (basic input output sistem)- (sistema básico de entrada-salida)
Programa incorporado en un chip de la tarjeta madre que se encarga de realizar las funciones
básicas de manejo y configuración del ordenador.
Es un código de software que localiza y carga el sistema operativo en la RAM; es un software
muy básico instalado en la placa base que permite que ésta cumpla su cometido. Proporciona la
comunicación de bajo nivel, el funcionamiento y configuración del hardware del sistema que,
como mínimo, maneja el teclado y proporciona salida básica (emitiendo pitidos normalizados por
el altavoz de la computadora si se producen fallos) durante el arranque.

 B. CACHÉ
Es un tipo de memoria del ordenador; por tanto, en ella se guardarán datos que el ordenador
necesita para trabajar.
Para explicar su funcionamiento haremos la siguiente analogía: supongamos que se debe realizar
una torta, para ello se recurre al supermecado y se compra la harina. Luego se va a una cocina y
se coloca la harina necesaria según la receta. Esta indica que debe agregarse leche; nuevamente
se va al supermercado y se compra leche. De vuelta en la casa se agrega la leche, pero el próximo
ítem es azúcar por lo que se debe recurrir nuevamente al supermercado y así sucesivamente con
cada ingrediente. Definitivamente jamás se haría esto en la vida real, sino que se compraría todo
lo necesario y se lo guardaría en la alacena, recurriendo a ésta por cada ingrediente sin mayor
pérdida de tiempo.
Llevando la analogía a la computadora, supongamos que la memoria principal es el mercado, el
programa a ejecutar es la receta, el microprocesador la persona que realiza la torta y la memoria
caché la alacena.

C. CHIPSET
Es el conjunto de chips que se encargan de controlar determinadas funciones del ordenador.
El chipset como tal, no incluye todos los integrados instalados sobre una misma tarjeta madre,
por lo general son los dos o tres más grandes. Los demás son los que realizan funciones específicas
como red, sonido, PLL, alimentación eléctrica y control de las temperaturas. El chipset determina
muchas de las características de una tarjeta madre y por lo general, la referencia de la misma, está
relacionada con la del Chipset.

15
 D. ZÓCALO ZIF
El zócalo o (en inglés) socket es un sistema electromecánico de soporte y conexión eléctrica,
instalado en la placa base, que se usa para fijar y conectar un microprocesador. Se utiliza en
equipos de arquitectura abierta, donde se busca que haya variedad de componentes permitiendo
el cambio de la tarjeta o el integrado. Es decir que se pueden retirar de la placa base cuando se
quiera cambiar.
Es el lugar donde se aloja el procesador

 E. SLOT DE EXPANSIÓN
Son ranuras de plástico con conectores eléctricos (slots) donde se introducen las tarjetas de
expansión.
También llamado slot de expansión o ranura de expansión, es un elemento de la placa base de un
ordenador que permite conectar a ésta una tarjeta adaptadora adicional o de expansión, la cual
suele realizar funciones de control de dispositivos periféricos adicionales, tales como
monitores, impresoras o unidades de disco.

F. RANURAS PCI
Peripheral Component Interconnect ("Interconexión de Componentes Periféricos") Generalmente
son de color blanco, miden 8.5 cm es de hasta 132 MB/s a 33 MHz, no es compatible para alguna
tarjetas de vídeo 3D.

16
G. RANURAS DIMM
Son ranuras de 168 contactos y 13 cm. de color negro, es lugar donde nos permite
inserta memorias RAM tipo DIMM.

H. RANURAS ISA
Son las más antiguas, Funcionan con 8 MHz-16MB/s sirve para conectar un módem o una tarjeta
de sonido, Miden unos 14 cm y su color suele ser negro.

I. PILA
Se encarga de conservar los parámetros de la BIOS como la fecha y hora.

17
7.- Registros del 8088

Los registros del procesador tienen como misión fundamental almacenar las posiciones
de memoria que van a sufrir repetidas manipulaciones, ya que los accesos a memoria son
mucho más lentos que los accesos a los registros. El 8086 dispone de 14 registros de 16
bits que se emplean para controlar la ejecución de instrucciones, direccionar la memoria
y proporcionar capacidad aritmética y lógica. Cada registro puede almacenar datos o
direcciones de memoria. Los registros son direccionables por medio de un nombre. Por
convención los bits de un registro se numeran de derecha a izquierda:

Los diferentes registros del 8086 se clasifican en: registros de propósito general o de
datos, registros de segmento, registro apuntador de instrucciones (IP), registros
apuntadores (SP y BP), registro índice (SI y DI) y registro de banderas, FLAGS o registro
de estado (FL).

7.1.- Registros de propósito general.


Se utilizan para cálculo y almacenamiento de propósito general. Los programas leen
datos de memoria y los dejan en estos registros, ejecutan operaciones sobre ellos, y
guardan los resultados en memoria. Hay cuatro registros de propósito general que,
aparte de ser usados a voluntad por el programador, tienen fines específicos:

18
Los registros de propósito general se pueden direccionar como una palabra o como un
byte. El byte de la izquierda es la parte alta y el byte de la derecha es la parte baja:

Siguiendo esta nomenclatura, es posible referirse a cada uno de los dos bytes, byte de
orden alto o más significativo y byte de orden bajo o menos significativo, de cada uno
de estos registros. Por ejemplo: AH es el byte más significativo del registro AX,
mientras que AL es el byte menos significativo.

7.2.- Registros de Segmento.


Los registros de segmento son registros de 16 bits que constituyen la implementación
física de la arquitectura segmentada del 8086.

7.3.- Registro Apuntador de Instrucciones (IP).


Se trata de un registro de 16 bits que contiene el desplazamiento de la dirección de la
siguiente instrucción que se ejecutará. Está asociado con el registro CS en el sentido de
que IP indica el desplazamiento de la siguiente instrucción a ejecutar dentro del
segmento de código determinado por CS:

7.4.- Registros Apuntadores (SP y BP).


Los registros apuntadores están asociados al registro de segmento SS y permiten
acceder a los datos almacenados en la pila:

19
7.5.- Registros Índice (SI y DI).
Los registros índice se utilizan fundamentalmente en operaciones con cadenas y para
direccionamiento indexado:

7.6.- Registro de banderas, FLAGS, o registro de estado (FL).


Es un registro de 16 bits, pero sólo se utilizan nueve de ellos. Sirven para indicar el
estado actual de la máquina y el resultado del procesamiento. La mayor parte de las
instrucciones de comparación y aritméticas modifican este registro. Algunas
instrucciones pueden realizar pruebas sobre este registro para determinar la acción
siguiente.

Los bits 0, 2, 4, 6, 7 y 11 son indicadores de condición que reflejan los resultados de las
operaciones del programa; los bits 8 al 10 son indicadores de control que, modificados
por el programador, sirven para controlar ciertos modos de procesamiento, y el resto no
se utilizan. El significado de cada uno de los bits es el siguiente:

20
8.- Modos de direccionamiento
Las operaciones se hacen entre registros o registros y memoria, pero nunca entre
memoria y memoria (salvo algunas operaciones con cadenas de caracteres). Los modos
de direccionamiento determinan el lugar en que reside un operando, un resultado o la
siguiente instrucción a ejecutar según el caso.

1.- INMEDIATO. El operando aparece especificado directamente en la instrucción.


Ejemplo: El operando fuente en MOVE AX, 789AH
2.- MODO REGISTRO. El operando es un registro.
Ejemplo: Los operandos en MOV AX, CX
3.- DIRECTO ABSOLUTO A MEMORIA. El operando es una dirección de memoria
a la que se quiere acceder.
Ejemplo: El operando fuente en MOV AX, [078AH]
El operando destino en MOV DIR1, AX
4.- DIRECTO RELATIVO A UN REGISTRO BASE. El operando es una dirección
de memoria a la que se desea acceder, y se calcula mediante un registro base. Este
registro base será el BX o el BP según deseemos trabajar con el segmento DS o SS
respectivamente.
Ejemplo: El operando fuente en MOV AX, [BX + 2]
El operando destino en MOV [BP + 2], AX
5.- DIRECTO RELATIVO A UN REGISTRO INDICE. El operando es una
dirección de memoria a la que se desea acceder, y se calcula en base a un registro
índice.
Este registro índice será el SI o el DI.
Ejemplo: El operando fuente en MOV AX, [SI + 10]
El operando destino en MOV [DI + 2], AX
Si el desplazamiento no existe en los dos últimos modos, hablamos de direccionamiento
indirecto por registro base o por registro índice.
6.-INDEXADO A PARTIR DE UNA BASE. El operando es una dirección de
memoria a la que se desea acceder, y se calcula en base a un registro base y un registro
índice. Hay cuatro configuraciones posibles: el registro base puede ser el BX o el BP, y
el registro índice puede ser el SI o el DI.
Ejemplo: El operando fuente en MOV AX, [BX + SI + 6]
El operando destino en MOV [BP + DI + 2], AX

Los modos de direccionamiento del 3 al 6 pueden estar precedidos de un registro de


segmento: MOV AX, ES: [BX + SI + 6].

21
9.- Set de instrucciones del 8088
9.1 INSTRUCCIONES DE TRANSFERENCIA DE DATOS (No afectan flags)
MOV dest,src
Copia el contenido del operando fuente (src) en el destino (dest).
Operación: dest <- src
Las posibilidades son:

1. MOV reg,{reg|mem|inmed}
2. MOV mem,{reg|inmed}
3. MOV {reg16|mem16},{CS|DS|ES|SS}
4. MOV {DS|ES|SS},{reg16|mem16}
PUSH src
Pone el valor en el tope del stack.
Operación: SP <- SP - 2, [SP+1:SP] <- src donde src = {reg16|mem16|CS|DS|ES|SS}.
POP dest
Retira el valor del tope del stack poniéndolo en el lugar indicado.
Operación: dest <- [SP+1:SP], SP <- SP + 2 donde dest = {reg16|mem16|DS|ES|SS}.
XCHG reg,{reg|mem}
Intercambia ambos valores.
IN {AL|AX},{DX|inmed (1 byte)}
Pone en el acumulador el valor hallado en el port indicado.
OUT {DX|inmed (1 byte)},{AL|AX}
Pone en el port indicado el valor del acumulador.
XLAT
Realiza una operación de traducción de un código de un byte a otro código de un byte
mediante una tabla.
Operación: AL <- [BX+AL]
LEA reg,mem
Almacena la dirección efectiva del operando de memoria en un registro.
Operación: reg <- dirección mem
LDS reg,mem32
Operación: reg <- [mem], DS <- [mem+2]
LES reg,mem32
Operación: reg <- [mem], ES <- [mem+2]
LAHF
Copia en el registro AH la imagen de los ocho bits menos significativos del registro de
indicadores.
Operación: AH <- SF:ZF:X:AF:X:PF:X:CF
SAHF
Almacena en los ocho bits menos significativos del registro de indicadores el valor del
registro AH.
Operación: SF:ZF:X:AF:X:PF:X:CF <- AH
PUSHF
Almacena los flags en la pila.
Operación: SP <- SP - 2, [SP+1:SP] <- Flags.
POPF
Pone en los flags el valor que hay en la pila.
Operación: Flags <- [SP+1:SP], SP <- SP + 2

22
9.2 INSTRUCCIONES ARITMETICAS (Afectan los flags AF, CF, OF, PF, SF, ZF)
ADD dest,src
Operación: dest <- dest + src.
ADC dest,src
Operación: dest <- dest + src + CF.
SUB dest,src
Operación: dest <- dest - src.
SBB dest,src
Operación: dest <- dest - src - CF.
CMP dest,src
Operación: dest - src (sólo afecta flags).
INC dest
Operación: dest <- dest + 1 (no afecta CF).
DEC dest
Operación: dest <- dest - 1 (no afecta CF).
NEG dest
Operación: dest <- - dest.
donde dest = {reg|mem} y src = {reg|mem|inmed} no pudiendo ambos operandos estar en
memoria.
DAA
Corrige el resultado de una suma de dos valores BCD empaquetados en el registro AL
(debe estar inmediatamente después de una instrucción ADD o ADC). OF es indefinido
después de la operación.
DAS
Igual que DAA pero para resta (debe estar inmediatamente después de una instrucción
SUB o SBB).
AAA
Lo mismo que DAA para números BCD desempaquetados.
AAS
Lo mismo que DAS para números BCD desempaquetados.
AAD
Convierte AH:AL en BCD desempaquetado a AL en binario.
Operación: AL <- AH * 0Ah + AL, AH <- 0. Afecta PF, SF, ZF, mientras que AF, CF y
OF quedan indefinidos.
AAM
Convierte AL en binario a AH:AL en BCD desempaquetado.
Operación: AH <- AL / 0Ah, AL <- AL mod 0Ah. Afecta PF, SF, ZF, mientras que AF,
CF y OF quedan indefinidos.
MUL {reg8|mem8}
Realiza una multiplicación con operandos no signados de 8 por 8 bits.
Operación: AX <- AL * {reg8|mem8}. CF=OF=0 si AH = 0, CF=OF=1 en caso
contrario. AF, PF, SF, ZF quedan indefinidos.
MUL {reg16|mem16}
Realiza una multiplicación con operandos no signados de 16 por 16 bits.
Operación: DX:AX <- AX * {reg16|mem16}. CF=OF=0 si DX = 0, CF=OF=1 en caso
contrario. AF, PF, SF, ZF quedan indefinidos.
IMUL {reg8|mem8}
Realiza una multiplicación con operandos con signo de 8 por 8 bits.
Operación: AX <- AL * {reg8|mem8} realizando la multiplicación con signo. CF = OF

23
= 0 si el resultado entra en un byte, en caso contrario valdrán 1. AF, PF, SF, ZF quedan
indefinidos.
IMUL {reg16|mem16}
Realiza una multiplicación con operandos con signo de 16 por 16 bits.
Operación: DX:AX <- AX * {reg16|mem16} realizando la multiplicación con signo.
CF = OF = 0 si el resultado entra en dos bytes, en caso contrario valdrán 1. AF, PF, SF,
ZF quedan indefinidos.
CBW
Extiende el signo de AL en AX. No se afectan los flags.
CWD
Extiende el signo de AX en DX:AX. No se afectan flags.

9.3 INSTRUCCIONES LOGICAS (Afectan AF, CF, OF, PF, SF, ZF)
AND dest,src
Operación: dest <- dest and src.
TEST dest,src
Operación: dest and src. Sólo afecta flags.
OR dest,src
Operación: dest <- dest or src.
XOR dest,src
Operación: dest <- dest xor src.
Las cuatro instrucciones anteriores ponen CF = OF = 0, AF queda indefinido y PF, SF y ZF
dependen del resultado.
NOT dest
Operación: dest <- Complemento a 1 de dest. No afecta los flags.
SHL/SAL dest,{1|CL}
Realiza un desplazamiento lógico o aritmético a la izquierda.
SHR dest,{1|CL}
Realiza un desplazamiento lógico a la derecha.
SAR dest,{1|CL}
Realiza un desplazamiento aritmético a la derecha.
ROL dest,{1|CL}
Realiza una rotación hacia la izquierda.
ROR dest,{1|CL}
Realiza una rotación hacia la derecha.
RCL dest,{1|CL}
Realiza una rotación hacia la izquierda usando el CF.
RCR dest,{1|CL}
Realiza una rotación hacia la derecha usando el CF.
En las siete instrucciones anteriores la cantidad de veces que se rota o desplaza puede ser un bit
o la cantidad de bits indicado en CL.

9.4 INSTRUCCIONES DE MANIPULACION DE CADENAS:


MOVSB
Copiar un byte de la cadena fuente al destino.
Operación:

1. ES:[DI] <- DS:[SI] (un byte)


2. DI <- DI±1

24
3. SI <- SI±1
MOVSW
Copiar dos bytes de la cadena fuente al destino.
Operación:

1. ES:[DI] <- DS:[SI] (dos bytes)


2. DI <- DI±2
3. SI <- SI±2
LODSB
Poner en el acumulador un byte de la cadena fuente.
Operación:

1. AL <- DS:[SI] (un byte)


2. SI <- SI±1
LODSW
Poner en el acumulador dos bytes de la cadena fuente.
Operación:

1. AX <- DS:[SI] (dos bytes)


2. SI <- SI±2
STOSB
Almacenar en la cadena destino un byte del acumulador.
Operación:

1. ES:[DI] <- AL (un byte)


2. DI <- DI±1
STOSW
Almacenar en la cadena destino dos bytes del acumulador.
Operación:

1. ES:[DI] <- AX (dos bytes)


2. DI <- DI±2
CMPSB
Comparar un byte de la cadena fuente con el destino.
Operación:

1. DS:[SI] - ES:[DI] (Un byte, afecta sólo los flags)


2. DI <- DI±1
3. SI <- SI±1
CMPSW
Comparar dos bytes de la cadena fuente con el destino.
Operación:

1. DS:[SI] - ES:[DI] (Dos bytes, afecta sólo los flags)


2. DI <- DI±2
3. SI <- SI±2
SCASB
Comparar un byte del acumulador con la cadena destino.
Operación:

1. AL - ES:[DI] (Un byte, afecta sólo los flags)


2. DI <- DI±1

25
SCASW
Comparar dos bytes del acumulador con la cadena destino.
Operación:

1. AX - ES:[DI] (Dos byte, afecta sólo los flags)


2. DI <- DI±2
En todos los casos el signo + se toma si el indicador DF vale cero. Si vale 1 hay que tomar el
signo -.

Prefijo para las instrucciones MOVSB, MOVSW, LODSB, LODSW, STOSB y STOSW:

 REP: Repetir la instrucción CX veces.


Prefijos para las instrucciones CMPSB, CMPSW, SCASB, SCASW:

 REPZ/REPE: Repetir mientras que sean iguales hasta un máximo de CX veces.


 REPNZ/REPNE: Repetir mientras que sean diferentes hasta un máximo de CX veces.

9.5 INSTRUCCIONES DE TRANSFERENCIA DE CONTROL (No afectan los flags):


JMP label
Saltar hacia la dirección label.
CALL label
Ir al procedimiento cuyo inicio es label. Para llamadas dentro del mismo segmento
equivale a PUSH IP: JMP label, mientras que para llamadas entre segmentos equivale
a PUSH CS: PUSH IP: JMP label.
RET
Retorno de procedimiento.
RET inmed
Retorno de procedimiento y SP <- SP + inmed.
Variaciones de la instrucción de retorno:

RETN [inmed]
En el mismo segmento de código. Equivale a POP IP [:SP <- SP + inmed].
RETF [inmed]
En otro segmento de código. Equivale a POP IP: POP CS [:SP <- SP + inmed]
Saltos condicionales aritméticos (usar después de CMP):

 Aritmética signada (con números positivos, negativos y cero)


JL etiqueta/JNGE etiqueta
Saltar a etiqueta si es menor.
JLE etiqueta/JNG etiqueta
Saltar a etiqueta si es menor o igual.
JE etiqueta
Saltar a etiqueta si es igual.
JNE etiqueta
Saltar a etiqueta si es distinto.
JGE etiqueta/JNL etiqueta
Saltar a etiqueta si es mayor o igual.
JG etiqueta/JNLE etiqueta
Saltar a etiqueta si es mayor.

26
 Aritmética sin signo (con números positivos y cero)
JB etiqueta/JNAE etiqueta
Saltar a etiqueta si es menor.
JBE etiqueta/JNA etiqueta
Saltar a etiqueta si es menor o igual.
JE etiqueta
Saltar a etiqueta si es igual.
JNE etiqueta
Saltar a etiqueta si es distinto.
JAE etiqueta/JNB etiqueta
Saltar a etiqueta si es mayor o igual.
JA etiqueta/JNBE etiqueta
Saltar a etiqueta si es mayor.
Saltos condicionales según el valor de los indicadores:
JC label
Saltar si hubo arrastre/préstamo (CF = 1).
JNC label
Saltar si no hubo arrastre/préstamo (CF = 0).
JZ label
Saltar si el resultado es cero (ZF = 1).
JNZ label
Saltar si el resultado no es cero (ZF = 0).
JS label
Saltar si el signo es negativo (SF = 1).
JNS label
Saltar si el signo es positivo (SF = 0).
JP/JPE label
Saltar si la paridad es par (PF = 1).
JNP/JPO label
Saltar si la paridad es impar (PF = 0).
Saltos condicionales que usan el registro CX como contador:
LOOP label
Operación: CX <- CX-1. Saltar a label si CX<>0.
LOOPZ/LOOPE label
Operación: CX <- CX-1. Saltar a label si CX <> 0 y ZF = 1.
LOOPNZ/LOOPNE label
Operación: CX <- CX-1. Saltar a label si CX <> 0 y ZF = 0.
JCXZ label
Operación: Salta a label si CX = 0.
Interrupciones:
INT número
Salva los flags en la pila, hace TF=IF=0 y ejecuta la interrupción con el número
indicado.
INTO
Interrupción condicional. Si OF = 1, hace INT 4.
IRET
Retorno de interrupción. Restaura los indicadores del stack.

27
9.6 INSTRUCCIONES DE CONTROL DEL PROCESADOR
CLC
CF <- 0.
STC
CF <- 1.
CMC
CF <- 1 - CF.
NOP
No hace nada.
CLD
DF <- 0 (Dirección ascendente).
STD
DF <- 1 (Dirección descendente).
CLI
IF <- 0 (Deshabilita interrupciones enmascarables).
STI
IF <- 1 (Habilita interrupciones enmascarables).
HLT
Detiene la ejecución del procesador hasta que llegue una interrupción externa.
WAIT
Detiene la ejecución del procesador hasta que se active el pin TEST del mismo.
LOCK
Prefijo de instrucción que activa el pin LOCK del procesador.

28
10.- Lenguaje máquina, macroensamblador del 8088
EL LENGUAJE DE MAQUINA Y EL LENGUAJE ENSAMBLADOR.
Todo procesador, grande o pequeño, desde el de una calculadora hasta el de un supercomputador,
ya sea de propósito general o específico, posee un lenguaje único que es capaz de reconocer y
ejecutar. Por razones que resultan obvias, este lenguaje ha sido denominado Lenguaje de Máquina
y más que ser propio de un computador pertenece a su microprocesador. El lenguaje de máquina
está compuesto por una serie de instrucciones, que son las únicas que pueden ser reconocidas y
ejecutadas por el microprocesador. Este lenguaje es un conjunto de números que representan las
operaciones que realiza el microprocesador a través de su circuitería interna. Estas instrucciones,
por decirlo así, están grabadas o "alambradas" en el hardware y no pueden ser cambiadas. El nivel
más bajo al que podemos aspirar a llegar en el control de un microprocesador es precisamente el
del lenguaje de máquina. Ahora bien, siendo el lenguaje de máquina un conjunto de números,
¿cómo es capaz el microprocesador de saber cuándo un número representa una instrucción y
cuándo un dato? El secreto de esto reside en la dirección de inicio de un programa y en el estado
del microprocesador. La dirección de inicio nos indica en qué localidad de memoria comienza un
programa, y en consecuencia que datos deberemos considerar como instrucciones. El estado del
microprocesador nos permite saber cuándo éste espera una instrucción y cuándo éste espera un
dato. Obviamente, el lenguaje de máquina de un microprocesador no puede ser ejecutado por otro
microprocesador de arquitectura distinta, a menos que haya cierto tipo de compatibilidad prevista.
Por ejemplo, un 80486 es capaz de ejecutar lenguaje de máquina propio y soporta el código
generado para microprocesadores anteriores de la misma serie (desde un 8086 hasta un 80386).
Por otra parte, un PowerPC es capaz de ejecutar instrucciones de los microprocesadores Motorola
68xxx y de los Intel 80xx/80x86. En ambos casos, el diseño de los microprocesadores se hizo
tratando de mantener cierto nivel de compatibilidad con los desarrollados anteriormente. En el
segundo caso, este nivel de compatibilidad se extendió a los de otra marca. Sin embargo, un 8088
no puede ejecutar código de un 80186 o superiores, ya que los procesadores más avanzados
poseen juegos de instrucciones y registros nuevos no contenidos por un 8088. Un caso similar es
la serie 68xxx, pero de ninguna manera podemos esperar que un Intel ejecute código de un
Motorola y viceversa. Y esto no tiene nada que ver con la compañía, ya que Intel desarrolla otros
tipos de microprocesadores como el 80860 y el iWARP, los cuales no pueden compartir código
ni entre ellos ni entre los 80xx/80xxx. Ahora bien, mientras que con el lenguaje de máquina,
nosotros obtenemos un control total del microprocesador, la programación en este lenguaje resulta
muy difícil y fácil para cometer errores. No tanto por el hecho de que las instrucciones son sólo
números, sino porque se debe calcular y trabajar con las direcciones de memoria de los datos, los
saltos y las direcciones de llamadas a subrutinas, además de que para poder hacer ejecutable un
programa, se deben enlazar las rutinas de run-time y servicios del sistema operativo. Este proceso
es al que se le denomina ensamblado de código. Para facilitar la elaboración de programas a este
nivel, se desarrollaron los Ensambladores y el Lenguaje Ensamblador. Existe una
correspondencia 1 a 1 entre las instrucciones del lenguaje de máquina y las del lenguaje
ensamblador. Cada uno de los valores numéricos del lenguaje de máquina tiene una
representación simbólica de 3 a 5 letras como instrucción del lenguaje ensamblador.
Adicionalmente, este lenguaje proporciona un conjunto de pseudo-operaciones (tambien
conocidas como directivas del ensamblador) que sirven para definir datos, rutinas y todo tipo de
información para que el programa ejecutable sea creado de determinada forma y en determinado
lugar.

29
11.- Debuger, y simuladores del 8088/8086

PCjs es el nombre de un simulador de IBM PC 8088 escrito totalmente en Javascript y que por lo
tanto puedes ejecutar en tu navegador.

EMU8086 v4.05 + Serial – Simulador del Microprocesador 8086 y 8088

Este programa es sumamente útil para aquellos que quieran aprender lenguaje ensamblador
(Assembler), ya que incorpora un editor avanzado, un ensamblador, una PC virtual y
tutoriales paso a paso. De esta manera, es posible ejecutar código fuente sobre un emulador
8086, siendo el código de máquina totalmente compatible con las generaciones siguientes de
microprocesadores Intel.
Los Intel 8086 e Intel 8088 (i8086, llamado oficialmente iAPX 86, e i8088) son dos
microprocesadores de 16 bits diseñados por Intel en 1978, iniciadores de la arquitectura x86. La
diferencia entre el i8086 y el i8088 es que este último utiliza un bus externo de 8 bits, para
poder emplear circuitos de soporte al microprocesador más económicos, en contraposición al bus
de 16 bits del i8086.

30
BIBLIOGRAFÍA
http://www.frsn.utn.edu.ar/tecnicas3/apuntes/td3cap_5.pdf ...pregunta 1
 Curso ensamblador Facultad de Informática Universidad de Murcia …pregunta 2
http://members.tripod.com/wingsze_liu/trabajos_A8.htm.... Pregunta 3 y pregunta 4
 Curso ensamblador Facultad de Informática Universidad de Murcia ..... Pregunta 7 y
pregunta 8
http://ebadillo_computacion.tripod.com/ensamblador/8086_rep.pdf ....pregunta 9
http://www.monografias.com/trabajos-pdf/programacion-ensamblador-
procesadores/programacion-ensamblador-procesadores.pdf .... Pregunta 10
http://www.bitcuantico.com/2012/01/25/emu8086-v4-05-serial-simulador-del-
microprocesador-8086-y-8088/
http://www.cyberhades.com/2013/11/18/simulador-de-ibm-pc-8088-escrito-en-javascript/
….. pregunta 11
http://tododemicroprocesadores.blogspot.pe/2012_08_01_archive.html
https://www.yumpu.com/es/document/view/14129605/arquitectura-microprocesador-intel-
8086-8088
8088 8-BIT HMOS MICROPROCESSOR 8088/8088-2 DATASHEET

31

Вам также может понравиться