Evolución de los Microprocesadores Intel
Evolución de los Microprocesadores Intel
El microprocesador y la computadora
1.1 Introducción
La historia de los sistemas de computación, con µProcesadores Intel, comienza en 1971 con el Intel
4004, como se vé en la figura 1.1. Vea como fue mejorando la velocidad del reloj, el tamaño de los
registros, el aumento del set de instrucciones y su capacidad de direccionar posiciones de memoria.
Figura 1.1: Historia de los µProcesadores Intel. (*)IPS = Instrucciones por segundo
Vale la pena resaltar algunas características especiales de cada µProcesador. Así el Intel 8085,
permitió simplificar el hardware necesario en las computadoras. El Intel 8086/8088 contaban con
1
1.1. INTRODUCCIÓN 2
cuatro registros, cada uno de los cuales, podía utilizarse como dos registros separados de 8 bits cada
uno. En 1981, con estos µProcesadores, IBM produjo computadoras IBM PC, dando lugar al
mercado de las computadoras compatibles IBM PC.
El Intel 80286 era compatible con el 8086 y el 8088. El Intel 80386, era compatible con los
anteriores µProcesadores y fue utilizado en las computadoras Compaq DeskPro 386. Con el
Intel 80386SX mejoró la aceptación del sistema operativo Windows, desarrollado por Microsoft.
Con el Intel 80486DX se implementó la memoria cache L1, en el mismo chip y con el I486 se
implementó la memoria cache L1 y unidad de coma flotante, todo en el mismo chip.
Los µProcesadores Pentium poseía una arquitectura capaz de ejecutar dos operaciones a la vez,
gracias a sus dos pipeline de datos, cada uno de 32 bits y con un bus de datos de 64 bits. En 1995
salio el Pentium Pro, que se aplicó mayormente para servidores.
A partir de 1997, Intel incluye en sus productos la tecnología MMX, que aparece el Pentium II,
este ejecutaba instrucciones de 16 bits y no contaba con memoria cache L2 en el mismo chip. La
memoria cache L1 era de 32 KBytes (16KB para datos y 16KB para instrucciones), la memoria
cache L2 se puso en una placa separada. El Pentium II Xeon utilizaba tanto el chipset 440GX
como el 450NX y el Pentium III incluye instrucciones SSE. El pentium 4 utilizó un diseño com-
pletamente nuevo.
El Pentium M se caracteriza por su bajo consumo energético y baja disipación de calor, útil para
computadoras portátiles. El Pentium D, que tiene básicamente dos Pentium 4 comunicados por
un bus FSB (2 núcleos Prescott para el core Smithfield y 2 núcleos Cedar Mill para el core Presler).
Posteriormente sale el Core 2 Duo. En 2005 Intel también proporcionó µProcesadores Core 2 Duo
a la empresa Apple Computer, quienes produjeron computadoras de escritorio y portátiles.
El Xeon dual core rendía 80% mas por vatio y era 60% mas rápido que cualquier µProcesador
de la competencia y ejecutaba instrucciones de 32 bits y de 64 bits. La marca core 3 abarcaba las
líneas SOLO (un núcleo), DUO (doble núcleo), QUAD (quad-core) y EXTREME (µProcesadores
de dos o cuatro núcleos). Por otro lado La marca Core 2 se refiere a una gama de µProcesadores
comerciales de Intel de 64 bits de doble núcleo y µProcesadores 2x2 MCM (módulo multi-chip)
de cuatro núcleos con el conjunto de instrucciones x86 – x64, basado en el Core Microarchitecture
de Intel, derivado del procesador portátil de doble núcleo de 32 bits. Posteriormente Intel saco
al mercado el Intel Atom, con tecnología CMOS y destinado a usarse en dispositivos móviles de
Internet, ultraportátiles, teléfonos inteligentes y otros de baja potencia. Ya en 2010 lanzó el Intel
Core I3, I5 e I7, todos de cuatro núcleos.
Core i3 está equipado con el acelerador Intel para medios gráficos de alta definición, un motor de
video de avanzada que ofrece una fluida reproducción y capacidades 3D de avanzada. Core i5 asigna
automáticamente la capacidad de proceso donde más se necesita, permitiendo al usuario crear videos
HD, componer música digital, editar fotos o jugar videojuegos. La familia Core 2010 de Intel posee
la tecnología Hyper Threading que permite que cada núcleo del procesador trabaje en dos tareas
al mismo tiempo. Por otro lado, Intel Core i5 e Intel Core i7 integran Turbo Boost, que incre-
menta de forma automática la velocidad de procesamiento de los núcleos por encima de la frecuencia
1.2. LOS REGISTROS DEL MICROPROCESADOR 3
operativa básica si no se han alcanzado los límites especificados de energía, corriente y temperatura.
En enero de 2011 Intel lanzó la segunda generación de la familia Core, tecnología que posee cam-
bios en la memoria caché, mejorías en el modo Turbo Boost y perfeccionamientos en la propia
arquitectura. Esta nueva familia tiene motor gráfico integrado para aumentar el desempeño de
procesamiento para video en alta definición, 3D, juegos, realización de múltiples tareas al mismo
tiempo y redes sociales o uso de multimedia en línea.
Además de las aplicaciones en computadoras domesticas o para las diferentes industrias, Los mi-
croprocesadores Intel también se han empleado en varias naves espaciales. El pequeño rover mar-
ciano Sojourner tenía un micro Intel 80C85 a 2 MHz y el telescopio espacial Hubble usa un
486 (80486), aunque antes empleaba un 386, un micro que también es usado en algunos ordenadores
principales de la ISS. La primera estación espacial estadounidense, Skylab, uso una computadora
IBM 4Pi en la versión de 16 bits, y a principios de los años 80 se incorporaron cinco computadoras
AP-101, una versión de 32 bits y 480[kHz] del 4Pi dotado de microprocesadores Intel 8086.
En la figura 1.2 se muestran los registros, que intervienen en el desarrollo de software, de la fa-
milia de µProcesadores Intel. Volviendo a referirnos a la historia de los µProcesadores Intel. Se ha
mantenido la compatibilidad hasta 1978, cuando salieron los µProcesadores 8086/8088. Es decir se
puede escribir, por ejemplo, la instrucción mov ah,10h cuando se programa con 8 bits, se puede escribir
mov bx,cx cuando se programa con 16 bits, se puede escribir mov edi, 100h cuando se programa con
32 bits y, finalmente se puede escribir mov rdi, C0000080h, cuando se programa con 64 bits. En otras
1.2. LOS REGISTROS DEL MICROPROCESADOR 4
palabras un programa que se escribió para el 8086 puede seguir ejecutándose en una computadora
con tecnología x64, Por eso decimos que se ha mantenido la compatibilidad.
Entonces los 16 registros de un µProcesador Intel de 64 bits pueden utilizarse para operaciones de
64 bits, de 32 bits, de 16 bits o de 8 bits. Conceptualmente la figura 1.2 se ha dividido en tres
partes. La figura 1.2a) muestra los registros de uso general. Con ellos se pueden realizar operaciones
aritméticas y lógicas, aunque cada uno de ellos tiene un uso específico, como veremos mas adelante.
La figura 1.2b) muestra los registros que se utilizan como punteros, estos permiten acceder a las
posiciones de memoria de varias maneras y la figura 1.2c) muestra los registros nuevos para Pen-
tium 4 cuando trabaja en modo de 64 bits.
15 8 0 15 8 0 15 8 0
AX SI CS
AH AL DI DS
BX SP ES
BH BL BP SS
CX
IP - - - - O D I T S Z - A - P - C
CH CL
DX
DH DL
En la figura 1.3 se muestra los registros de los µProcesadores Intel 8086/8088. Todos ellos de 16
bits. Vea en la figura 1.3a) que el µProcesador cuenta con cuatro registros de uso general, de 16
bits: AX (Acumulador), BX (Base), CX (Contador) y DX (Datos). Se dice que estos registros
son de uso general, porque participan en operaciones aritméticas y lógicas; sin embargo cada uno
de ellos tiene un uso especial, como veremos mas adelante. Además se cuenta con ocho registros
de uso general, de 8 bits: AH, AL (acumulador), BH, BL, CH, CL (contador), DH, DL. En
la figura 1.3b) se ven los registros puntero: SI (Source Index), DI (Destination Index), SP (Stack
pointer), BP (Base pointer) e IP (Instruction pointer). En la figura 1.3c) se ven los registros de
segmento: CS (Code segment), DS (Data segment), ES (Extra segment), SS (Stack segment) y el
registro de banderas (Flags register).
Empecemos explicando los registros de uso general. Como se dijo estos se utilizan para realizar
operaciones aritméticas y lógicas. En la figura 1.4c) se plantea un modelo para copiar datos desde
la MemA hasta la MemB. En la figura 1.4a), para el proceso de copia se utiliza el registro AL y
como contador se usa el registro CX; mientras que en la figura 1.4b), para el proceso de copia se
utiliza el registro BL y como contador se usa el registro DX. Entonces se puede concluir que no
importa qué registro de uso general se utiliza, el resultado siempre es el mismo. Como se ve este
programa puede utilizar como contador AX, BX, CX, DX, AH, AL, BH, BL, CH, CL, DH o DL y
los mismo para el proceso de copia se pueden utilizar AH, AL, BH, BL, CH, CL, DH o DL. Solo
debemos cuidar de no utilizar un registro para dos tareas en el mismo programa.
Por otro lado, varios de estos registros, tienen aplicaciones específicas. Empecemos con el acumu-
lador AX o AL, como se ve en la figura 1.5, cuando se quiere dividir 60/7 (un word entre un byte),
el dividendo tiene que estar en el acumulador, AX, el divisor puede estar en cualquier registro de
uso general y vea que el resultado está en el acumulador, AH = resto y AL = cociente.
Dividendo | Divisor 60 | 7 AX | BL AX | CL
+--------- +--- +--- +---
Resto Cociente 4 8 AH AL AH AL
Lo mismo pasa con la multiplicación, en la figura 1.6, el multiplicando tiene que estar en el acumu-
lador, AL, y el multiplicador puede estar en cualquier registro de uso general. El producto esta en
el acumulador, AX.
Ahora veremos el registro de datos, DX. Cuando se hacen operaciones de multiplicación o división
de números grandes, se utiliza por defecto el registro DX. Como se en la figura 1.7, el multiplicando
esta en AX, el multiplicador en cualquier registro de 16 bits de uso general y el resultado está en
DX:AX. Por eso DX se denomina de datos.
1.2. LOS REGISTROS DEL MICROPROCESADOR 6
Lo mismo pasa en la división de números grandes. En la figura 1.8 se ve la división de dos múmeros
grandes. El dividendo está en DX:AX y el divisor puede estar en cualquier registro de 16 bits de
uso general. El resultado está en DX:AX = Resto:Cociente
Tanto en la figura 1.7 como en la figura 1.8 se ve el uso obligatorio del acumulador AX y del registro
de datos DX.
Ahora veamos el registro base, BX. Este se utiliza como puntero para acceder a direcciones de
memoria y leer o escribir en ellas. En la figura 1.10 se utiliza BX como registro base; es decir un
puntero que apunta a una dirección base, a partir de la cual se procesan los datos. Por ejemplo,
copiar los datos de la dirección DS:0000 a la dirección DS:0008, vea que la base dada por BX ¡No
se mueve! Para desplazarse entre los datos, se utiliza el puntero SI, pero también podría utilizarse
DI.
1.2. LOS REGISTROS DEL MICROPROCESADOR 7
Para terminar con los registros de uso general veamos el registro contador, CX. Para esto vamos a
aprovechar la figura 1.4, es decir queremos copiar ocho datos de la MemA a la MemB. En la figura
1.11 apuntamos con DI a la MemA y con SI a la MemB. El programa de la figura 1.11a) utiliza
el registro CX para contar la cantidad de datos a copiar, vea que CX puede ser reemplazado por
BX o por DX (un registro de uso general) y seguirá funcionando. Sin embargo, en la figura 1.11b)
estamos utilizando el registro CX como contador, esto se pone en evidencia porque la instrucción
loop funciona automáticamente con el registro CX. Se puede ver que el programa de la figura 1.11b)
es mas corto y mas rápido que el programa de la figura 1.11a).
mov di ,0 mov di ,0
mov si ,8 mov si ,8
mov cx ,8 mov cx ,8
F1 : mov al ,[ di ] F1 : mov al ,[ di ]
mov [ si ] , al mov [ si ] , al
inc si inc si
inc di inc di
dec cx loop F1
cmp cx ,0 ret
jne F1
ret
Ahora expliquemos los registros puntero: SI, DI, SP, BP e IP. Vamos a partir con la figura 1.11.
En esta vea que los punteros SI y DI no los estamos utilizando como puntero fuente (Source Index)
y como puntero destino (Destination Index), respectivamente. Por eso los hemos intercambiado
intencionalmente.
el de la figura 1.12d), este programa utiliza la instrucción rep movsw; es decir copia los datos de
dos en dos, mientras que el programa de la figura 1.12c) utiliza la instrucción rep mosb que copia
los datos uno a uno.
a) b) c) d)
Aquí haremos un paréntesis. Compare por favor, la figura 1.10 y las columnas c) y d) de la figura
1.12. En la primera se ve que los punteros SI y DI incrementan de arriba hacia abajo; mientras que
en la segunda los punteros SI y DI incrementan de izquierda a derecha. Hablaremos un poco mas
de esto cuando abordemos el tema de las banderas del µProcesador.
1.2. LOS REGISTROS DEL MICROPROCESADOR 9
20 mov al , a
push ax ; 3)
22 mov bl , b
push bx ; 4)
24 call sumar ; 5)
mov c , al
26 retf
program endp
28 ; ----------------------------------------
sumar proc
30 push bp ; 6)
mov ax , sp
32 mov bp , ax
mov ax ,[ bp +6]
34 mov bx ,[ bp +4]
add al , bl
36 pop bp
ret 2 ; Se descartan dos
38 ; operandos
sumar endp
40 ; ----------------------------------------
codigo ends
42 end program
Ahora veamos los registros que nos permiten acceder a los datos de la pila (el stack), estos son el
SP y el BP. El registro SP accede a la pila secuencialmente y, el programador no tiene control
sobre el. Este registro accede a la pila cuando se utilizan instrucciones tales como push y pop,
call y ret, int e iret.
Por otro lado el registro BP permite acceder a la pila de forma aleatoria. Para entender el fun-
cionamiento de este registro proponemos el ejemplo de la figura 1.13. Se trata de sumar dos números
pasándolos a través de la pila.
la instrucción call guarda IP en la pila, este es el paso 5). Finalmente para acceder aleatoriamente
a la pila, se guarda BP (push bp), este es el paso 6).
Fíjese que en la rutina sumar, para recuperar nuestros datos de la pila hacemos (mov ax,sp), luego
(mov bp,ax) ¡En este momento BP y SP apuntan a la misma dirección de la pila! Finalmente
recuperamos los datos: (mov ax,[bp+6]) y (mov bx,[bp+4]). La instrucción (ret) recupera IP
y, la instrucción (ret 2) recupera IP y descarta los dos datos guardados en la pila, AX y BX. La
instrucción (retf ) recupera la dirección de retorno al sistema operativo (DS:00).
Para terminar esta parte expliquemos los registros de segmento y las banderas. En la figura 1.14
se ve un modelo para explicar la memoria de la computadora, en ella se ve que la memoria esta
segmentada. El segmento de código (CS) es donde corren los programas, el segmento de
datos (DS) es donde se ponen los datos y las variables que manejaran los programas, el segmento
extra (ES) se puede utilizar como una extensión del segmento de datos o como una extensión del
segmento de código; finalmente, el segmento de pila (SS) se utiliza para guardar temporalmente
datos o direcciones de datos, variables o programas. Vea cómo los segmentos de la memoria de la
computadora se corresponden con los segmentos declarados en el programa de la figura 1.13a).
Memoria de la computadora
CS →
Segmento de Código (CS)
← IP
DS →
Segmento de Datos (DS)
← SI ← DI
ES →
Segmento de Extra (ES)
← SI ← DI
Antes de pasar a explicar las banderas, el estudiante debe estar seguro que las direcciones de las
instrucciones están dadas por CS:IP, las direcciones de los datos están dadas por DS:offset y las
direcciones de los datos en la pila están dados por SS:SP o SS:BP. El lector debe constatar que,
como los registros CS, DS, ES y SS, son de 16 bits, cada uno puede direcciónar 216 = 65.536. En
este contexto, El programa mas grande puede ser de 64KB, así como el segmento de datos mas
grande puede ser de 64KB.
El registro de banderas que se muestra en la figura 1.3c) permite controlar diversos aspectos del
µProcesador, a medida que van ocurriendo las cosas (paridad, acarreo, entre otras), también per-
miten cambiar el estado del µProcesador a requerimiento del programador (correr paso a paso,
1.2. LOS REGISTROS DEL MICROPROCESADOR 11
atender interrupciones, etc). En la figura 1.15 mostramos las banderas del µProcesador. Todos
estos “conceptos” los explicamos a continuación.
- - - - OF DF IF TF SF ZF - AF - PF - CF
↓ ↓ ↓
cld cli clc
std sti stc
cmc
Figura 1.15: Las banderas del µProcesador
Empecemos con las banderas OF y CF. En la figura 1.16 se exponen los conceptos de acarrero y
desbordamiento. Vea que cuando OF = 0 y CF = 0, entonces no importa que los operandos hayan
sido datos con signo o sin signo, el resultado estará bien; por el contrario, cuando OF = 1 y CF
= 1, sin importar si los operandos son datos con signo o sin signo, el resultado estará mal. En el
medio, cuando OF = 1, quiere decir que hubo un acarreo hacia el bit de signo y, portanto si se trata
de datos con signo, el resultado esta mal; el otro caso se da cuando CF = 1, entonces el resultado
de operaciones sin signo no es válido.
La dificultad radica en que el acarreo para datos de 7 bits se da en el bit ocho y, este es bit de signo.
También se debe recordar que el desbordamiento ocurre cuando el resultado cabe en mas bits que
el tamaño de los datos. Por ejemplo, si se suma 00001010 = 10 y 10100000 = 160 el resultado entra
en 8 bits 10101010 = 170. Pero sumando 11111010 = 250 y 00001010 = 10, el resultado ya no entra
en ocho bits, se necesitan nueve bits (1 00000100) y, el µProcesador no tiene registros de nueve bits.
Entonces la responsabilidad del manejo de los datos es del desarrollador del sistema de computación.
1.2. LOS REGISTROS DEL MICROPROCESADOR 12
cld std
mov si ,0 mov si ,7
mov di ,8 mov di ,15
mov cx ,8 mov cx ,8
rep movsb rep movsb
ret ret
SI DI SI DI
| | | |
v v v v
+ - - - - - -+ + - - - - - -+ + - - - - - -+ + - - - - - -+
| MemA | | MemB | | MemA | | MemB |
+ - - - - - -+ + - - - - - -+ + - - - - - -+ + - - - - - -+
<- CX -> <- CX -> <- CX -> <- CX ->
La bandera de trap (paso a paso), permite ejecutar un programa paso a paso cuando, TF = 1, y
corre todo el programa cuando, TF = 0. Como el µProcesador no proporciona ninguna instrucción
para manipular la bandera TF, el usuario deberá desarrollar un pequeño programa para cambiar el
estado de esta bandera.
La bandera de signo, SF, indica si el resultado de una operación realizada es positivo (SF = 0) o
negativo (SF = 1). La bandera de cero, ZF, indica si el resultado de una operación realizada es
cero (ZF = 1) o no (ZF = 0). La bandera de paridad, PF, indica si el resultado de una operación
tiene numero impar de “unos” (PF = 0) o numero par de “unos” (PF = 1). Esta bandera no tiene
uso en la actualidad.
La bandera de acarreo auxiliar, AF, indica el acarreo que ocurre en el bit 3, hacia el bit 4 de una
operación
1 <- Acarreo auxiliar
D7 D6 D5 D4 D3 D2 D1 D0
1 0 1 0 1 0 1 0
0 0 0 0 1 0 0 1
-----------------------
1 0 1 1 0 0 1 1
Esta bandera se utiliza en operaciones ASCII y BCD. Como ejemplo vea la figura 1.18. La instruc-
ción aaa ve la bandera AF, SI AF = 1, entonces AL = AL + 6 y AH = AH + 1, además en AL
A7 A6 A5 A4 = 0000.
1.3. MEMORIA EN MODO TEXTO Y CÓDIGO ASCII 13
Todo lo mencionado pone en evidencia que los sistemas de computación son básicamente sistemas
digitales y, como tales, su desarrollo involucra direcciones de memoria, direcciones de puertos de
I/O entre otros aspectos. Empezaremos con la memoria de la computadora en modo texto.
Para el desarrollo de sistemas de computación que utilizan la memoria en modo texto necesitamos
entender el código ASCII, el byte de atributo monocromático y a colores así como la paginación.
1.3. MEMORIA EN MODO TEXTO Y CÓDIGO ASCII 14
Como se ve en la figura 1.20, la memoria de video en modo texto empieza en la dirección 0B800h.
Esta memoria está paginada, cada página tiene un tamaño de 80x25x2 = 4000 Bytes; por tanto la
página 0 va de 0B800h hasta 0C7A0h. Por ejemplo, suponiendo un monitor monocromático,
vea que el caracter A, en la pantalla 80x25 está en la fila 00, columna 00 y es una letra blanca
sobre fondo negro. Esta letra se representa con el código ASCII 41h y su atributo sería 07h; es
decir la letra A ocupa la dirección 0B800h y su atributo la dirección 0B801h, respectivamente.
Pantalla 80x25
Página 2
Página 3 24
En primer lugar veremos el código ASCII, en la figura 1.21 mostramos los caracteres imprimibles.
Por ejemplo el espacio en blanco es el ASCII 0x20, las letras minúsculas van de 0x61 hasta 0x7A,
las letras mayúsculas van de 0x41 hasta 0x5A y los números van de 0x30 hasta 0x39. El estudio
del código ASCII nos facilitará enormemente en el desarrollo de algoritmos para los sistemas de
computación.
AND OR
0 xDF = 1101 1111 0 x20 = 0010 0000
--------- ---------
A = 0 x41 = 0100 0001 a = 0 x61 = 0110 0001
| |
+ - - - - - - Solo cambia un bit + - - - - - - Solo cambia un bit
En segundo lugar, veremos el byte de atributo. Para esto tenemos que saber, que en los sistemas
de computación pueden utilizarse monitores monocromáticos y monitores a color. La definición del
byte de atributo está en la figura 1.22.
Monocromático Colores
byte Atributo Fondo Caracter Atributo
00 Invisible B R G B I R G B
01 Subrayado 1 0 0 0 0 0 0 0 Parpadeo
07 Normal 0 1 0 0 0 0 0 0 Fondo rojo
09 Intenso subrayado 0 0 1 0 0 0 0 0 Fondo verde
0F Intenso 0 0 0 1 0 0 0 0 Fondo azul
70 Inverso 0 0 0 0 0 1 0 0 Caracter rojo
87 Parpadeo 0 0 0 0 0 0 1 0 Caracter verde
8F Intenso, parpadeo 0 0 0 0 0 0 0 1 Caracter azul
F0 Inverso, parpadeo 0 0 0 0 1 1 1 1 Caracter blanco intenso
En tercer lugar, veremos la correspondencia entre la pantalla 80x25 y la memoria destinada para el
modo texto. Para esto, a partir de la figura 1.20 se puede ver que:
Donde:
NroCol = Número de columna.En el modo 80x25, se cuentan con 80 columnas (de 0 a 79).
Finalmente veremos los modos de video texto. En la figura 1.23 se muestran los modos de video
texto. Vea que básicamente hay dos tamaños: 40x25 y 80x25. Una pantalla 40x25 ocupa 2000
bytes en la memoria y se disponen hasta ocho páginas de viveo modo texto. Mientras que una
pantalla 80x25 ocupa 4000 bytes en la memoria y se disponen hasta cuatro páginas de video
modo texto.
Ejemplo 1.1 Desarrollar un sistema de computación que permita acceder a la memoria de video
texto, para desplegar caracteres ASCII.
En la figura 1.24 se muestra el programa que permite implementar un sistema de computación para
acceder a la memoria de video texto. La memoria de video texto es apuntada por el registro ES
(lineas 23 y 24). Luego el programa principal, entre las líneas 25 y 33, simplemente lee los datos
a través de SI y los escribe en la memoria de la computadora utilizando el procedimiento posxy
(línea 29). Se esta utilizando CX como contador y la variable col permite desplegar los datos en
la pantalla de forma horizontal.
El procedimiento posxy (líneas 39 a 48) resuelve la ecuación 1.1 y el procedimiento pomem (líneas
53 a 64) resuelven la ecuación (NroPa*TaPa)+(2*NroFil*AnFi)+(2*NroCo)+K. En este
punto vea que como, se selecciona por defecto, la página 0, no calculamos la parte (NroPa*TaPa),
simplemente se calcula la posición de memoria en función a la fila y columna. También fijese que si
K = 0 (línea 40) se accede a los caracteres y si K = 1 (línea 43) se accede a los atributos.
Ejemplo 1.2 Desarrollar un sistema de computación que permita “dibujar” letras con un tamaño
de 8x12 = Columnas*Filas, en un monitor 80x25.
En la figura 1.25 mostramos el modelo y el diagrama de flujo para dibujar los caracteres pedidos
(8x12). Se ve que X controla el número de bits dentro de un byte, además Y controla el número
de bytes. La letra A se codifica en 12 bytes. Vea que dentro de cada byte, los bits se desplazan
hacia la bandera de acarreo (shl al). Entonces, si CF = 1 se dibuja un punto en la pantalla. Las
variables col y fil permiten controlar los puntos que se dibujan en la pantalla, en base al patron
de bits de la letra A. El sistema completo se muestra en la figura 1.26
1.3. MEMORIA EN MODO TEXTO Y CÓDIGO ASCII 17
X fonts
SI → 1 1 1 0x38 C 1 1 1
1 1 1 0x38
1 1 0x28 shl al si = carA
1 1 1 1 0x6C
1 1 1 1 0x6C y ← 12
Y 1 1 1 1 0x6C
1 1 0x44
1 1
x ← 8 fo1:
0x44
1 1 1 1 1 1 1 0xFE
1 1 1 1 1 1 1 0xFE col ← 40
1 1 1 1 0xC6
1 1 1 1 0xC6 al ← [si]
fo2: shl al
carA db 38 h ,38 h ,28 h ,6 ch ,6 ch ,6 ch si
db 44 h ,44 h ,0 feh ,0 feh ,0 c6h ,0 c6h no
CF = 1
x db 0 ; Controla las posiciones de bit
y db 0
fil dw 5 ; Controla posiciones de pantalla punto
col dw 40
k dw 0 ; Si k =0 caracter , si k =1 atributo fo3: col ← col + 1
atrib db 07 h
x←x-1
no
x=0
si
si ← si + 1
fil ← fil + 1
y←y-1
no
y=0
si
. ret
Figura 1.25: Sistema de computación que genera fonts en modo texto 80x25
mov ax , datos
mov ds , ax
mov ax ,0 b800h
mov es , ax
lea si , carA
mov y ,12
fo1 :
mov x ,8
mov col ,40
mov al ,[ si ]
fo2 :
shl al ,1
jnc fo3
call punto
fo3 :
inc col
dec x
cmp x ,0
jne fo2
inc si
inc fil
dec y
cmp y ,0
jne fo1
ret
program endp
; ----------------------------------------------------------
pomem proc
mov ax , fil
mov bx ,160
mul bx
mov bx , ax
mov di , col
shl di ,1
add di , k
ret
pomem endp
; ----------------------------------------------------------
punto proc
push ax
mov k ,0 ; Caracter
call pomem
mov al , 'o '
mov es :[ bx + di ] , al
mov k ,1 ; Atributo
call pomem
mov al , atrib
mov es :[ bx + di ] , al
pop ax
ret
punto endp
; ----------------------------------------------------------
codigo ends
end program
Figura 1.26: Sistema que permite dibujar fonts en una pantalla 80x25
En la figura 1.26, el procedimiento punto utiliza la ecuación 1.1. El procedimiento pomem resuelve
la ecuación (NroPa*TaPa)+(2*NroFil*AnFi)+(2*NroCo)+K, vea que con K = 0 accedemos
a los caracteres mientras que cuando K = 1 accedemos a los atributos
1.4. MEMORIA EN MODO GRÁFICO 20
a) Obtiene modo de video b) Pone modo de video c) Lee una tecla sin eco
Columna
00 320
Fila 00 •
..
.
Pantalla 320x200
..
.
0FA00h 200
Ejemplo 1.3 Desarrollar un sistema de computación que permita dibujar un pixel amarillo en cada
esquina de la pantalla 320x200x256
1.4. MEMORIA EN MODO GRÁFICO 21
En los modos texto, la unidad básica de información es el caracter, mientras que en los modos
gráficos la unidad básica de información es el pixel. Un pixel es un punto en la pantalla gráfica.
Cuando se trata de los modos gráficos es necesario entender como se representa un pixel. Por
ejemplo en la figura 1.29, en el modo 13h un pixel se representa con 8 bits (un byte) por eso se
disponen de 256 colores; desde el (00000000) hasta el (11111111). La cantidad de memoria necesaria
para una pantalla de 320x200 es de 64000 bytes. Es decir una pantalla gráfica de 320x200x256, en
la memoria de la computadora va desde la dirección 0x0A000 hasta la dirección 0x0FA00.
El programa de la figura 1.30 primero cambia de modo texto a modo gráfico (lineas 22 a 27 de la
figura 1.30), luego dibuja cuatro pixels, uno en cada esquina de la pantalla (lineas 28 a 34), luego
espera una tecla y termina el programa.
Ejemplo 1.4 Desarrollar un sistema de computación que, utilizando la formula 1.2 permita dibujar
en la pantalla líneas verticales de diferente color
inc color
loop otro
mov ah ,07 ; Espera una tecla
int 21 h
mov ax , vian
mov ah ,0 ; Pone modo 13 h
int 10 h
ret
program endp
; ----------------------------------------------------------
linea proc
push cx
push posy
mov cx ,100 ; linea de CX pixels
li1 : call pixel
inc posy
loop li1
pop posy
pop cx
ret
linea endp
; ----------------------------------------------------------
pixel proc
push cx
mov bx , posy
mov di , bx
mov cl ,8 ; posy *256
shl bx , cl
mov cl ,6 ; posy *64
shl di , cl
add di , posx ; posy *(256+64) + posx
mov al , color
mov es :[ bx + di ] , al ; 0 a000 + posy *(320) + posx
pop cx
ret
pixel endp
; ----------------------------------------------------------
codigo ends
end program
En la figura 1.31, se muestra el sistema para dibujar una recta vertical (procedimiento linea). Vea
que una recta es una secuencia de pixeles, por eso incrementamos posy. Cada línea es de 100 pixeles
de largo. También es importante indicar que para dibujar la siguiente recta es necesario hacerlo a
partir de (posx,posy), por eso es necesario conservar posy, para eso utilizamos push posy y pop posy.
Para aclarar la manera como se representa un pixel en la memoria de video gráfico, veamos el modo
04h que tiene una resolución de 320x200x4; es decir 300 columnas, 200 filas y cuatro colores
D7 D6 D5 D4 D3 D2 D1 D0
Color 1 Color 2 Color 3 Color 4
Las tareas que hemos realizado antes, como desplegar un texto en la pantalla entre otras, también
las podemos realizar utilizando los servicios de la BIOS y del DOS, que son accedidos a través de
interrupciones.
Algunas interrupciones, tales como la int 10h o la int 21h realizan varios servicios. Por ejemplo el
servicio AH = 02 de la int 10h permite colocar el cursor en una posición de pantalla modo texto.
Veamos un ejemplo.
Ejemplo 1.5 Desarrollar un sistema de computación que borre la pantalla, modo texto 80x25 y,
escriba una letra en el centro de la misma
page 65 ,132
title TITULO DEL inicio
; ------------------------------------------------------------------
; Segmento de pila
; ----------------
pila segment para stack ' stack '
dw 32 dup (?)
pila ends
; ------------------------------------------------------------------
; Segmento de datos
; -----------------
datos segment para ' data '
datos ends
; ------------------------------------------------------------------
codigo segment para ' code '
inicio proc far
assume ss : pila , ds : datos , cs : codigo , es : datos
push ds
sub ax , ax
push ax
1.5. INTERRUPCIONES Y MAPEO DE MEMORIA DE LA COMPUTADORA 27
mov ax , datos
mov ds , ax
call bopan
call pocur
call esChar
ret
inicio endp
; ------------------------------------------------------------------
bopan proc
mov ah ,06 ; o mov ah ,07
mov al ,0 ; Si AL =0 se borra la pantalla
mov bh ,07
mov cx ,0000 ; ESI
mov dx ,184 Fh ; EID
int 10 h
ret
bopan endp
; ------------------------------------------------------------------
pocur proc
mov ah ,02
mov bh ,00 ; Pagina
mov dh ,12 ; fila
mov dl ,40 ; columna
int 10 h
ret
pocur endp
; ------------------------------------------------------------------
esChar proc
mov ah ,09 h ; o mov ah ,0 Ah
mov al , 'J '
mov bh ,0
mov bl ,07
mov cx ,1
int 10 h
ret
esChar endp
; ------------------------------------------------------------------
codigo ends
end inicio
Escribe una cadena en pantalla Escribe un caracter Leer una cadena de teclado
cadena db " ETN903 " ,24 h mov ah ,02 cadena label byte
; mov dl , caracter lomax db N
mov ah ,09 int 21 h loact db ?
lea dx , cadena ; nombre db N dup (?)
int 21 h ; ;
; ; mov ah ,0 Ah
; ; lea dx , cadena
; ; int 21 h
Lee un caracter con eco Leer un caracter sin eco Lee el estado del teclado
mov ah ,01 mov ah ,07 mov ah ,0 Bh
int 21 h int 21 h int 21 h
; ; ;
; Devuelve el caracter en AL ; Devuelve el caracter en AL ; Devuelve el estado en AL
; y lo replica en pantalla ; no lo replica en pantalla ; AL = FFh si hay tecla
; ; ; AL = 00 h si no hay tecla
Ejemplo 1.6 Desarrollar un sistema de computación que permita crear un menú horizontal. La
primera letra de cada elemento del menú debe ser diferente a las demás letras del elemento.
En la figura 1.39 se muestra el modelo planteado para desarrollar un sistema de computación que
permita dibujar un menú horizontal. En la primera fila de la figura 1.39 se muestran las direcciones
que ocupan los elementos del menú en la memoria de la computadora. El elemento Archivo está en
la dirección 0, el elemento Editar está en la dirección 16, etc. Esto se implementa en el programa
en la línea 36 de la figura 1.41.
En la segunda fila de la figura 1.39 mostramos las posiciones que ocupan los elementos del menú en
la pantalla 80x25. El elemento Archivo se ubicará en la columna 0, el elemento Editar se ubicará
en la columna 8 y así sucesivamente. Esto se implementa, en el programa, en las líneas 30 y 31.
Vea que la fila es común, DH = 00.
Para desplegar los elementos del menú se utiliza el servicio AH = 09 de la int 21h. Este servicio
requiere que la cadena de caracteres, a desplegar en la pantalla, debe terminar con el ASCII “$” o
“24h”.
1.5. INTERRUPCIONES Y MAPEO DE MEMORIA DE LA COMPUTADORA 29
call bopan
bopan
mov cx ,5
lea si , menu
cx ← 5 lea bx , poMen
mov dx ,0000 h
si = menu otro : mov dl ,[ bx ]
bx = poMen call pocur
call esCad
dx ← 0000
call pocur
otro mov al ,[ si ]
dl ← [bx] call esChar
add si ,16
pocur inc bx
loop otro
esCad
pocur
al ← [si]
esChar
si ← si + 16
bx ← bx + 1
no cx = 0
si
ret
Figura 1.40: Programa principal del sistema que dibuja un menu horizontal
page 65 ,132
title TITULO DEL inicio
; - - - - - - - - - - - - - - - - - - - - - - - - - - - Segmento de pila - - - - - - - - - - - - - - - - - - - - - - -
; ----------------
pila segment para stack ' stack '
dw 32 dup (?)
pila ends
; - - - - - - - - - - - - - - - - - - - - - - - - - - - Segmento de datos - - - - - - - - - - - - - - - - - - - - - -
; -----------------
datos segment para ' data '
menu db " Archivo $Editar $Ver $"
db " Correr $Punto de parada$ "
poMen db 0 ,8 ,15 ,19 ,26
datos ends
; - - - - - - - - - - - - - - - - - - - - - - - - - - - Segmento de codigo - - - - - - - - - - - - - - - - - - - - -
; ------------------
codigo segment para ' code '
inicio proc far
assume ss : pila , ds : datos , cs : codigo , es : datos
push ds
sub ax , ax
push ax
mov ax , datos
mov ds , ax
call bopan
mov cx ,5
lea si , menu
lea bx , poMen
mov dx ,0000 h
otro : mov dl ,[ bx ]
call pocur
1.5. INTERRUPCIONES Y MAPEO DE MEMORIA DE LA COMPUTADORA 30
call esCad
call pocur
mov al ,[ si ]
call esChar
add si ,16
inc bx
loop otro
ret
inicio endp
; - - - - - - - - - - - - - - - - - - - - - - - Borra la pantalla - - - - - - - - - - - - - - - - - - - - - - - - - -
; -----------------
bopan proc
mov ah ,06 ; o mov ah ,07
mov al ,0 ; Si AL =0 se borra la pantalla
mov bh ,07
mov cx ,0000 ; ESI
mov dx ,184 Fh ; EID
int 10 h
ret
bopan endp
; - - - - - - - - - - - - - - - - - - - - - - - - - - Pone el cursor - - - - - - - - - - - - - - - - - - - - - - - - - -
; --------------
pocur proc
push bx
mov ah ,02
mov bh ,00 ; Pagina
int 10 h
pop bx
ret
pocur endp
; - - - - - - - - - - - - - - - - - - - - - - - - - Escribe un caracter - - - - - - - - - - - - - - - - - - - - - -
; -------------------
esChar proc
push cx
push bx
mov ah ,09 h ; o mov ah ,0 Ah
mov bh ,0
mov bl ,0 Ah
mov cx ,1
int 10 h
pop bx
pop cx
ret
esChar endp
; - - - - - - - - - - - - - - - - - - - - - - - - - - - Escribe una cadena - - - - - - - - - - - - - - - - - - - - -
; ------------------
esCad proc
push dx
mov dx , si
mov ah ,09
int 21 h
pop dx
ret
esCad endp
; ------------------------------------------------------------------
codigo ends
end inicio
Como se ve en la figura 1.42, hay varias teclas que se repiten: los números, Shift, Ctrl, Insert, Supr,
Etc. Entonces es necesario estudiar cómo distinguir entre dos teclas con el mismo código ASCII.
1.6. EL TECLADO 31
1.6 El teclado
Por ejemplo si se lee “1234” desde teclado el segmento de datos quedaría como
05 04 31 32 33 34 0 D
Si se lee “123” desde el teclado el segmento de datos quedaría como, fíjese que XX significa que es
basura que quedo de la anterior lectura.
05 03 31 32 33 0 D XX
Tecla AH AL
Normal Código de rastreo Código ASCII
Extendido Código de rastreo 00h o E0h
Tabla 1.1: Servicio 10h de la int 16h
1.6. EL TECLADO 32
En las tablas 1.2 a 1.9 se muestran los códigos de rastreo para las diferentes teclas que componen
el teclado.
Letras Nornal Shift Ctrl Alt Letras Nornal Shift Ctrl Alt
ayA 1E 61 1E 41 1E 01 1E 00 nyN 31 6E 31 4E 31 0E 31 00
byB 30 42 30 62 30 02 30 00 oyO 18 6F 18 4F 18 0F 18 00
cyC 2E 63 2E 43 2E 03 2E 00 pyP 19 70 19 50 19 10 19 00
dyD 20 64 20 44 20 04 20 00 qyQ 10 71 10 51 10 11 10 00
eyE 12 65 12 45 12 05 12 00 ryR 13 72 13 52 13 12 13 00
fyF 21 66 21 46 21 06 21 00 syS 1F 73 1F 53 1F 13 1F 00
gyG 22 67 22 47 22 07 22 00 tyT 14 74 14 54 14 14 14 00
hyH 23 68 23 48 23 08 23 00 uyU 16 75 16 55 16 15 16 00
iyI 17 69 17 49 17 09 17 00 vyV 2F 76 2F 56 2F 16 2F 00
jyJ 24 6A 24 4A 24 0A 24 00 wyW 11 77 11 57 11 17 11 00
kyK 25 6B 25 4B 25 0B 25 00 xyX 2D 78 2D 58 2D 18 2D 00
lyL 26 6C 26 4C 26 0C 26 00 yyY 15 79 15 59 15 19 15 00
myM 32 6D 32 4D 32 0D 32 00 zyZ 2C 7A 2C 5A 2C 1A 2C 00
Barra espaciadora 39 20 39 20 39 20 39 20
Teclas de función Nornal Shift Ctrl Alt Teclas de función Nornal Shift Ctrl Alt
F1 3B 00 54 00 5E 00 68 00 F7 41 00 5A 00 64 00 6E 00
F2 3C 00 55 00 5F 00 69 00 F8 42 00 5B 00 65 00 6F 00
F3 3D 00 56 00 60 00 6A 00 F9 43 00 5C 00 66 00 70 00
F4 3E 00 57 00 3D 61 6B 00 F10 44 00 5D 00 67 00 71 00
F5 3F 00 58 00 3D 62 6C 00 F11 85 00 87 00 89 00 8B 00
F6 40 00 59 00 3D 63 6D 00 F12 86 00 88 00 8A 00 8C 00
Teclado numérico Nornal Shift Ctrl Alt Teclado numérico Nornal Shift Ctrl Alt
Ins y 0 52 00 52 30 92 00 Home y 7 47 00 47 37 77 00 00 07
End y 1 4F 00 4F 31 75 00 00 01 Flecha arriba y 8 48 00 48 38 8D 00 00 08
Flecha abajo y 2 50 00 50 32 91 00 00 02 PgUp y 9 49 00 49 39 84 00 00 09
PgDn y 3 51 00 51 33 76 00 00 03 + 4E 2B 4E 2B 90 00 4E 00
Flecha arriba y 4 4B 00 4B 34 73 00 00 04 - 4A 2D 4A 2D 8E 00 4A 00
5 4C 00 4C 35 8F 00 00 05 Del y . 53 00 53 2E 93 00
Flecha derecha y 6 4D 00 4D 36 74 00 00 06 * 37 2A 37 2A 96 00 37 00
Fila de números Nornal Shift Ctrl Alt Fila de números Nornal Shift Ctrl Alt
‘y˜ 29 60 29 7E 29 00 7y& 08 37 08 26 7E 00
1y! 02 31 02 21 78 00 8y* 09 38 09 2A 7F 00
2y@ 03 32 03 40 03 00 79 00 9y( 0A 39 0A 38 80 00
3y# 04 33 04 23 7A 00 0y) 0B 30 0B 29 81 00
4y$ 05 34 05 24 7B 00 -y_ 0C 2D 0C 5F 0C 1F 82 00
5y% 06 35 06 25 7C 00 =y+ 0D 3D 0D 2B 83 00
6yˆ 07 36 07 5E 07 1E 7D 00
Teclas de operación Nornal Shift Ctrl Alt Teclas de operación Nornal Shift Ctrl Alt
Esc 01 1B 01 1B 01 1B 01 00 Tab 0F 09 0F 00 94 00 A5 00
Retroceso 0E 08 0E 08 0E 7F 0E 00 Enter 1C 0D 1C 0D 1C 0A 1C 00
Teclas de operación Nornal Shift Ctrl Alt Teclas de operación Nornal Shift Ctrl Alt
[ y { 1A 5B 1A 7B 1A 1B 1A 00 \y | 2B 5C 2B 7C 2B 1C 2B 00
] y } 1B 5D 1B 7D 1B 1D 1B 00 ,y< 33 2C 33 3C 33 00
; y : 27 3B 27 3A 27 00 . y> 34 2E 34 3E 34 00
’ y " 28 27 28 22 28 00 /y? 35 2F 35 3F 35 00
Teclas repetidas Nornal Shift Ctrl Alt Teclas repetidas Nornal Shift Ctrl Alt
Diagonal E0 2F E0 2F 95 00 A4 00 Flecha abajo 50 E0 50 E0 91 E0 A0 00
Enter E0 0D E0 0D E0 0A A6 00 Flecha izquierda 4B E0 4B E0 73 E0 9B 00
Home 47 E0 47 E0 77 E0 97 00 Flecha derecha 4D E0 4D E0 74 E0 9D 00
End 4F E0 4F E0 75 E0 9F 00 Flecha arriba 48 E0 48 E0 8D E0 98 00
PgUp 49 E0 49 E0 84 E0 99 00 Ins 52 E0 52 E0 92 E0 A2 00
PgDn 51 E0 51 E0 76 E0 A1 00 Del 53 E0 53 E0 93 E0 A3 00
Como ejemplo, el procedimiento de la figura 1.44, lee el estado del teclado y, si se presiona cualquier
tecla, devuelve en AX el código de rastreo y su código ASCII (este es el caso de la tecla Esc) o, el
código de rastreo y 00h o E0h (este es el caso de la tecla º y la tecla »).
leTecla proc
mov ah ,0 Bh
int 21 h
cmp al ,00
je fin
Esc AH = 01 AL = 1Bh
mov ah ,10 h º AH = 48h AL = E0h
int 16 h » AH = 50h AL = E0h
fin :
ret
leTecla endp
Figura 1.44: Servicio 10h de la int 16h para leer los códigos de rastreo del teclado
Máximo Mínimo
GN D<1 40=Vcc
Características de entrada
AD14<2 39=AD15 “0” = 0.8V max, 10µA max
AD13<3 38=A16 /S3 “1” = 2.0V max, 10µA max
AD12<4 37=A17 /S4 Características de salida
“0” = 0.45V max, 2.00µA max
AD11<5 36=A18 /S5 “1” = 2.4V max, -400µA max
AD10<6 35=A17 /S6 Consumo
AD9<7 34=BHE/S7 Vcc = 5V±10%, Imax = 360mA
Temperatura
AD8<8 33=M N/M X 0◦ C a 82◦ C
AD7<9 32=RD
AD6<10 31=RQ/GT 0 HOLD
AD5<11 8086 30=RQ/GT 1 HLDA
Versión CMOS
AD4<12 29=LOCK WR Consumo
AD3<13 28=S 2 M/IO Imax = 10mA
AD2<14 27=S 1 DT /R Temperatura
-50◦ C a 108◦ C
AD1<15 26=S 0 DEN
AD0<16 25=QS0 ALE
N M I<17 24=QS1 IN T A
IN T R<18 23=T EST
CLK<19 22=READY
GN D<20 21=RESET
Los circuitos digitales estándar tienen un “0” de salida lógico de 0.4V y en “0” lógico de entrada
de 0.8V, con una inmunidad al ruido igual a 0.4 = 400mV. Se ve entonces que los µP reducen la
inmunidad al ruido. Por esta razón los cables conectados a cada terminal del µP no deben ser largos
y tampoco debe conectarse demasiada carga en cada patita. Se recomienda como máximo 10 cargas
antes de realizar el acoplamiento completo.
En las figuras 1.45 y 1.46 se muestran las señales asignadas a cada “pin” de los µProcesadores 8086
y 8088 respectivamente. De ambas figuras se constata que el 8088 tiene solo 8 pines para el bus de
datos; mientras que el 8086 tiene 16 pines.
• GN D: Tierra.
• AD0 − AD15 : Las 16 patitas por las que se multiplexa la información del bus de direcciones.
Durante el primer estado de reloj (T1 ) del ciclo de máquina, por estas patitas sale la dirección
y a partir del segundo estado salen los datos.
Mínimo Máximo
GN D<1 40=Vcc
Características de entrada
A14<2 39=A15 “0” = 0.8V max, 10µA max
A13<3 38=A16 /S3 “1” = 2.0V max, 10µA max
A12<4 37=A17 /S4 Características de salida
“0” = 0.45V max, 2.00µA max
A11<5 36=A18 /S5 “1” = 2.4V max, -400µA max
A10<6 35=A19 /S6 Consumo
A9<7 34=SS 0 Vcc = 5V±10%, Imax = 340mA
Temperatura
A8<8 33=M N/M X 0◦ C a 82◦ C
AD7<9 32=RD
AD6<10 31=HOLD RQ/GT 0
AD5<11 8088 30=HLDA RQ/GT 1
Versión CMOS
AD4<12 29=W R LOCK Consumo
AD3<13 28=IO/M S2 Imax = 10mA
AD2<14 27=DT /R S1 Temperatura
-50◦ C a 108◦ C
AD1<15 26=DEN S0
AD0<16 25=ALE QS0
N M I<17 24=IN T A QS1
IN T R<18 23=T EST
CLK<19 22=READY
GN D<20 21=RESET
• A16 /S3 − A19 /S6 : En el primer estado del ciclo de máquina, en estas patitas sale la dirección
y en el segundo ciclo las señales S3–S6. S3 y S4 informan sobre el segmento de memoria que
se está utilizando. El pin S5 informa sobre el estado de la bandera de interrupciones, IF. Si
el pin S6 = 0 el procesador está en posesión del bus. Si S6 = 1 el bus está en posesión de otro
dispositivo.
S4 S3 Segmento utilizado
0 0 ES
0 1 SS
1 0 CS o ninguno
1 1 DS
• BHE/S7 : Durante T1 , por este pin sale la señal BHE, que permite el acceso al byte de más
peso del bus de datos. Los elementos conectados a los 8 bits de más peso del bus de datos
pueden utilizar esta señal como selección de chip. Cuando se transfiere un dato por las líneas
de más peso del bus de datos la señal BHE=0, durante T1 , en los ciclos de lectura, escritura
y reconocimiento de interrupción. A partir de T2 , sale la señal S7 = 0, excepto cuando pasa
a triestado como consecuencia de haber ocurrido una solicitud de “HOLD”.
1.7. LAS SEÑALES DEL MICROPROCESADOR 36
• RD: Señal de lectura que se activa con nivel bajo a partir del segundo estado del ciclo de
máquina cuando la CPU realiza una operación de lectura.
• READY : Se conecta al generador de reloj. Sirve para atender memorias y periféricos lentos.
Si uno de estos dispositivos comienza a funcionar, activa el pin RDY del generador de reloj
para solicitar más tiempo de ciclo de bus asignado, El generador de reloj pasa esta solicitud al
procesador activando la señal READY que origina la inserción de estados de espera después
de T3 del ciclo de bus. Los estados de espera se insertan mientras funciona el dispositivo
lento y cuando termina se pasa al estado T4 y se da por concluido el ciclo. En resumen si
READY = 0 el µProcesador introduce estados de espera y permanece en el mismo ciclo de
bus; si READY = 1 el µProcesador funciona normalmente.
• CLK: Proporciona las señales de reloj. El ciclo de trabajo mínimo de esta señal tiene que ser
de 33%.
• ALE: Activa a nivel alto durante el estado T1 de cualquier ciclo de bus. Indica la presencia
de direcciones en el bus multiplexado y se emplea para cargar los flip-flop que separan las
direcciones.
• DEN : Activa a nivel bajo, que detecta la presencia de un dato. Su periodo de activación
comienza al principio de T2 en los ciclos de escritura y en la mitad de T2 , en los ciclos de
lectura y de reconocimiento de interrupción se desactiva en la mitad de T4 en todos los tipos
de ciclo.
• DT /R: Controla la dirección del flujo de datos, indicando si son recibidos o trasmitidos por
la CPU.
• RD: Señal de lectura que se activa con nivel bajo a partir del segundo estado del ciclo de
máquina cuando la CPU realiza una operación de lectura.
• HOLD: En presencia de varios procesadores esta señal solicita el dominio del bus del sistema
por parte de otro dispositivo externo. Este es el caso del acceso directo a memoria (DMA)
que cuando se acepta, los buses se ponen en alta impedancia.
• RQ/GT 0 y RQ/GT 1 : Realizan la misma función que las señales HOLD y HLDA en el modo
mínimo, la señal RQ/GT 0 tiene más prioridad que RQ/GT 1 . El procesador esclavo solicita
Bus a través de una de estas patitas al procesador maestro, este contesta por la misma patita
identificando la concesión del Bus. Se usa para DMA.
• LOCK: Con esta señal se indica a los otros procesadores que no se pueden obtener el control
del Bus. Se activa por medio de cualquier instrucción que lleve el prefijo LOCK y se mantiene
activa hasta que se complete la siguiente instrucción.
BHE/S7 BHE
OE
G
A15 − A8
ALE A7 − A0
8086
74373 G G 74373
OE OE
AD7 − AD0 D7 − D0
M/IO M/IO
RD RD
WR WR
M N/M X
Vcc
OE
G
A15 − A8 A15 − A8
A7 − A0
8088
ALE G 74373
OE
AD7 − AD0 D7 − D7
M/IO M/IO
RD RD
WR WR
M N/M X
Vcc
1.9. ACOPLAMIENTO DE LAS SEÑALES DEL µPROCESADOR 39
M/IO M/IO
RD 74244 RD
WR OE WR
BHE/S7 BHE
A19 /S6 A19
A18 /S5 74373 A18
A17 /S4 A17
A16 /S3 • G A16
OE
A8 − A15
8086 A0 − A7
74373
ALE • G OE 74373
G OE
IO/M IO/M
RD 74244 RD
WR OE WR
G OE
74373 A7 − A0
ALE • G OE
GN D Vcc DT /R DEN