PC XT 8086
PC XT 8086
PC XT 8086
CURSO:
ARQUITECTURA DE COMPUTADORAS LABORATORIO
TURNO:
“C” MIERCOLES 12:20 - 14:00 HORAS
LABORATORIO Nro. 1
29 de agosto de 2018
HARDWARE COMPUTADORA PERSONAL
PC XT 8088-8086
ÍNDICE
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.
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
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.
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.
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.
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.
7
3.- Funcionamiento en general
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
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:
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:
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).
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.
19
7.5.- Registros Índice (SI y DI).
Los registros índice se utilizan fundamentalmente en operaciones con cadenas y para
direccionamiento indexado:
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.
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.
24
3. SI <- SI±1
MOVSW
Copiar dos bytes de la cadena fuente al destino.
Operación:
25
SCASW
Comparar dos bytes del acumulador con la cadena destino.
Operación:
Prefijo para las instrucciones MOVSB, MOVSW, LODSB, LODSW, STOSB y STOSW:
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):
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.
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