Professional Documents
Culture Documents
Facultad de Ingeniería de Producción Y Servicios Escuela Profesional de Ingeniería Electrónica
Facultad de Ingeniería de Producción Y Servicios Escuela Profesional de Ingeniería Electrónica
SERVICIOS
ESCUELA PROFESIONAL DE
INGENIERÍA
ELECTRÓNICA
ARQUITECTURA DE COMPUTADORAS
LABORATORIO 01
TEMA:
DOCENTE:
PRESENTADO POR:
AREQUIPA - 2010
1
INDICE
2
Computadora Personal PC XT 8088-8086
La PC XT fue una máquina mejorada diseñada para uso en los negocios. Tenía 8 ranuras
de expansión y un disco duro de 10 megabytes (ST-412). Podía tomar 256 K de
memoria en la tarjeta principal. Fue vendido con un MDA (Adaptador de Pantalla
Monocromática-]. El procesador aún era un Intel 8088 de 4.77 MHz y el bus de
expansión de 8-bit ISA con arquitectura bus XT.
3
2. Características del procesador 8088/8086
4
memoria). Las frecuencias internas de reloj típicas son 4.77 MHz en la versión 8086; 8
MHz en la versión 8086-2 y 10 MHz en la 8086-1. Por lo que un PC estándar a 4,77 MHz
puede ejecutar de 20.000 a unos 0,5 millones de instrucciones por segundo, según la
complejidad de las mismas (un 486 a 50 MHz, incluso sin memoria caché externa es
capaz de ejecutar entre 1,8 y 30 millones de estas instrucciones por segundo).
3. Funcionamiento en general
5
10. Una vez culminada la lectura de las hojas, el archivo automáticamente se cierra y
envía a pantalla el nombre del archivo donde se almacenó la información y el
número de hojas leídas, e inmediatamente regresa a DOS.
Proceso de arranque
Cuando el PC se pone en funcionamiento, el proceso de carga del sistema2 se inicia por
medio de la ROM y después se carga el sistema operativo (en nuestro caso el DOS), ya
sea desde un disco flexible o desde el disco duro. En la memoria también se cargan
varias rutinas del BIOS. Una vez realizado todo el proceso de carga, se instala en la
memoria el procesador de comandos COMMAND.COM.
La importancia de estas rutinas es tal que son utilizadas por el 99.99% de los programas
desarrollados para MS-DOS. A una gran parte de esas rutinas se accede por medio de
una llamada a la interrupción 21h, conocida como interrupción del sistema (en el
apéndice D se encuentra una lista de todas las interrupciones y de todos los servicios
que ofrece esta interrupción 21h).
Es poco probable que el usuario desee modificar las rutinas de servicio ya que ellas
proporcionan un marco de referencia para llevar a cabo tareas de programación muy
tediosas.
Este apartado pretende clarificar, sin entrar en demasiados detalles técnicos, la forma
en que se ejecutan las instrucciones y cómo funciona la CPU.
6
c) Una vez enviada la petición, el sistema lee el contenido de los bytes de la
posición que contiene la instrucción y sus parámetros, si es que posee, para
enviarlos a la CPU a través del bus de datos.
d) Cuando llega la instrucción a la CPU, ésta la decodifica, tras lo cual se inicia la
fase de búsqueda de operandos, en la que la CPU transfiere la dirección del
operando, en el caso de que éste se encuentre en memoria. Posteriormente se
realiza el mismo proceso con el otro operando.
e) Una vez obtenidos los operandos, la instrucción es ejecutada. Para ejecutarse,
cada instrucción necesita un número diferente de ciclos o señales de oscilador.
Periféricos de almacenamiento
Acceso secuencial.
7
En el acceso secuencial, el elemento de lectura del dispositivo debe pasar por el
espacio ocupado por la totalidad de los datos almacenados previamente al
espacio ocupado físicamente por los datos almacenados que componen el
conjunto de información a la que se desea acceder.
Acceso aleatorio.
En el modo de acceso aleatorio, el elemento de lectura accede directamente a
la dirección donde se encuentra almacenada físicamente la información que se
desea localizar sin tener que pasar previamente por la almacenada entre el
principio de la superficie de grabación y el punto donde se almacena la
información buscada.
Es evidente la reducción de tiempo que presenta el acceso aleatorio frente al
secuencial, pero la utilización de la tecnología de acceso secuencial se debió a
que la implementación de las cintas magnéticas fue muy anterior a la puesta en
marcha operativa del primer periférico de acceso aleatorio.
En la actualidad, las cintas magnéticas tradicionales se están relegando poco a
poco a simples soportes de almacenamiento de datos históricos del sistema
informático o de procesos periódicos de copias de seguridad.
La pila (stack)
La pila obtiene su nombre por analogía con los montones de platos apilados (pilas de
platos). Cuando un dato nuevo es introducido (push) en la cima de la pila, éste será el
primer en ser extraído (pop). Por eso se dice que la pila siempre opera en el orden
“último en entrar, primero en salir” (LIFO, Last In First Out). Esto significa que cuando la
pila se utiliza para seguir la pista de los retornos de las subrutinas, la primera llamada a
subrutina que se hizo es la última que vuelve. De esta manera, la pila mantiene
ordenado el funcionamiento del programa, las subrutinas y las rutinas de tratamiento
de interrupción, sin importar lo complejo de la operación.
La pila se utiliza desde la parte de abajo (dirección más alta) a la parte de arriba
(dirección más baja), de forma que cuando un dato es introducido (push) a la cima de
la pila, se almacena en la posición de memoria justo por debajo de la cima actual. Así,
la pila crece hacia abajo de forma que, a medida que se añaden datos, la posición de la
cima se mueve más y más hacia direcciones más bajas, decrementando cada vez el
valor de SP.
8
Las interrupciones
Las interrupciones1 son mecanismos utilizados en los ordenadores por medio de los
cuales es posible interrumpir la ejecución de un programa para atender la llegada de
un acontecimiento externo. Así, pues, son señales que se le envían a la CPU para que
suspenda la ejecución de la instrucción en curso y atienda una petición determinada.
Hay cuatro tipos de interrupciones:
Anexo 1
9
Anexo 2
Los registros de propósito general AX, BX, CX y DX son los caballos de batalla del
sistema. Son únicos en el sentido de que se les puede direccionar como una
palabra o como un byte.
10
7.3.- Registros Apuntadores
Es un registro de 16 bits, de los cuales nueve sirven para indicar el estado actual
de la máquina y el resultado del procesamiento. Muchas instrucciones
aritméticas y de comparación cambian el estado de las banderas y apoyándose
de ellas determinan la acción subsecuente.
11
PF (paridad): Indica paridad par o impar en una operación de datos de
ocho bits (0=paridad impar; 1=paridad par).
12
7.7.- Unidad aritmética y lógica
Es la encargada de realizar las operaciones aritméticas (suma, suma con
"arrastre", resta, resta con "préstamo" y comparaciones) y lógicas (AND, OR,
XOR y TEST). Las operaciones pueden ser de 16 bits o de 8 bits.
13
de hardware para sistemas basados en el 8080 o el 8085 son, en su mayoría,
aplicables al 8088.
8. Modos de direccionamiento
El resto de los modos sirve para localizar un operando en memoria. Para facilitar la
explicación de estos modos, se pueden resumir de la siguiente manera:
1) Dirección de segmento
2) Dirección base
4) Un desplazamiento.
14
durante la ejecución del programa (a menos que el programa se escriba sobre sí
mismo, lo que constituye una práctica no aconsejada).
15
9. Set de instrucciones del 8088
16
17
18
19
20
10. Lenguaje maquina, macroensamblador del 8088
21
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.
Aun cuando el lenguaje ensamblador fue diseñado para hacer más fácil la
programación de bajo nivel, esta resulta todavía complicada y muy laboriosa. Por tal
motivo se desarrollaron los lenguajes de alto nivel, para facilitar la programación de los
computadores, minimizando la cantidad de instrucciones a especificar. Sin embargo,
esto no quiere decir que el microprocesador ejecute dichos lenguajes. Cada una de las
instrucciones de un lenguaje de alto nivel o de un nivel intermedio, equivalen a varias
de lenguaje máquina o lenguaje ensamblador.
Por otra parte, tenemos los compiladores, como los desarrollados para Fortran, Clipper,
COBOL, Pascal o C, que en vez de llamar y ejecutar una rutina en lenguaje de máquina,
éstos juntan esas rutinas para formar el código objeto que, después de enlazar las
rutinas de run-time y llamadas a otros programas y servicios del sistema operativo, se
transformará en el programa ejecutable.
22
Finalmente, tenemos los ensambladores— como los descritos en este trabajo —que
son como una versión reducida y elemental de un compilador (pero que de ninguna
manera deben considerarse como tales), ya que lo único que tienen que hacer es
cambiar toda referencia simbólica por la dirección correspondiente, calcular los saltos,
resolver referencias y llamadas a otros programas, y realizar el proceso de enlace. Los
ensambladores son programas destinados a realizar el ensamblado de un determinado
código.
- r [Enter]
Se desplegaran todos los contenidos de los registros internos de la UCP; una forma
alternativa de mostrarlos es usar el comando "r" utilizando como parámetro el nombre
del registro cuyo valor se quiera visualizar. Por ejemplo:
- rbx
Esta instrucción desplegará únicamente el contenido del registro BX y cambia el
indicador del Debug de " - " a " : "
Estando así el prompt es posible cambiar el valor del registro que se visualizó tecleando
el nuevo valor y a continuación [Enter], o se puede dejar el valor anterior presionando
[Enter] sin teclear ningún valor.
Es posible cambiar el valor del registro de banderas, así como utilizarlo como
estructura de control en nuestros programas como se verá más adelante. Cada bit del
registro tiene un nombre y significado especial, la lista dada a continuación describe el
valor de cada bit, tanto apagado como prendido y su relación con las operaciones del
procesador:
Overflow
NV = no hay desbordamiento;
OV = sí lo hay
Direction
UP = hacia adelante;
DN = hacia atras;
Interrupts
DI = desactivadas;
EI = activadas
Sign
PL = positivo;
NG = negativo
Zero
NZ = no es cero;
23
ZR = sí lo es
Auxiliary Carry
NA = no hay acarreo auxiliar;
AC = hay acarreo auxiliar
Parity
PO = paridad non;
PE = paridad par;
Carry
NC = no hay acarreo;
CY = Sí lo hay
Las funciones de la BIOS se invocan, desde los programas de usuario, ejecutando una
interrupción software con un cierto valor inicial en los registros. La BIOS emplea un cierto
rango de interrupciones, cada una encargada de una tarea específica:
PUSH BP
PUSH ES
PUSH DS
PUSH SI
PUSH DI
PUSH DX
PUSH CX
PUSH BX
PUSH AX
MOV BX,40h
MOV DS,BX
AND BL,30h
24
MOV BX,0B800h
PUSH DS
MOV AX,40h
MOV DS,AX
POP DS
IRET
PUSH DS
MOV AX,40h
MOV DS,AX
POP DS
IRET
25
…
PUSH BP
PUSH SI
PUSH DI
PUSH DS
PUSH ES
PUSH BX
XOR AX,AX
MOV DS,AX
MOV AX,40h
MOV DS,AX
MOV BX,5
PUSH AX ; ...save it
DEC BX
DEC BX
PUSH AX ; ...save it
XCHG CL,DH
XCHG DL,CL
PUSH CX
26
PUSH DI
ifdef SLOW_FLOPPY
else
endif
POP BX
POP CX
POP DX
XCHG DL,CL
XCHG CL,DH
POP BX ; Clean
POP BX ; ...up
POP BX ; ...stack
POP ES
POP DS
POP DI
POP SI
POP BP
RETF 2
27
INT 14h: Comunicaciones en serie.
PUSH DS
PUSH DX
PUSH SI
PUSH DI
PUSH CX
PUSH BX
MOV BX,40h
MOV DS,BX
MOV DI,DX
MOV BX,DX
SHL BX,1
JZ COMINI
DEC AH
DEC AH
DEC AH
INT 15h: Funciones casette (PC) y servicios especiales del sistema (AT).
28
INT_15: STC ; Cassette service (error ret)
MOV AH,86h
RETF 2
PUSH DS
PUSH BX
MOV BX,40h
OR AH,AH
DEC AH
DEC AH
PUSH DS
PUSH BX
PUSH CX
PUSH DX
MOV BX,40h
29
MOV DS,BX
OR DX,DX
OR AH,AH
DEC AH
DEC AH
30
DW 0018h ; 4800 baud clock divisor
PUSH DS
PUSH AX
MOV AX,40h
MOV DS,AX
OR AH,AH
DEC AH
INT 1Fh: Apunta a la tabla de los caracteres ASCII 128-255 (8x8 puntos).
La mayoría de las interrupciones se invocan solicitando una función determinada (que se indica
en el registro AH al llamar) y se limitan a devolver un resultado en ciertos registros, realizando
la tarea solicitada. En general, sólo resultan modificados los registros que devuelven algo,
aunque BP es corrompido en los servicios de vídeo de las máquinas más obsoletas.
31
LA BIOS Y LOS DISQUETES.
Byte 40h:3Eh Estado de recalibramiento del disquete. Esta variable indica varias cosas: si se
ha producido una interrupción de disquete, o si es preciso recalibrar alguna disquetera debido
a un reset anterior.
Byte 40h:3Fh Estado de los motores. En esta variable se indica, además del estado de los
motores de las 4 posibles disqueteras (si están encendidos o no), la última unidad que fue
seleccionada y la operación en curso sobre la misma.
Byte 40h:40h Cuenta para la detención del motor. Este byte es decrementado por la
interrupción periódica del temporizador; cuando llega a 0 todos los motores de las disqueteras
(realmente, el único que estaba girando) son detenidos. Dejar el motor girando unos segundos
tras la última operación evita tener que esperar a que el motor acelere antes de la siguiente (si
esta llega poco después).
Byte 40h:41h Estado de la última operación: se actualiza tras cada acceso al disco, indicando
los errores producidos (0 = ninguno).
Byte 40h:8Bh Control del soporte (AT). Esta variable almacena, entre otros, la última
velocidad de transferencia seleccionada.
Byte 40h:8Fh Información del controlador de disquete (AT). Se indica si la unidad soporta 80
cilindros (pues sí, la verdad) y si soporta varias velocidades de transferencia.
32
BIOS (la velocidad puede ser correcta o no, según se haya logrado determinar el tipo de
soporte).
Además de estas variables, la BIOS utiliza también una tabla de parámetros apuntada por la INT
1Eh. Los valores para programar ciertas características del FDC según el tipo de disco pueden
variar, aunque algunos son comunes. Esta tabla determina las principales características de
operación del disco. Dicha tabla está inicialmente en la ROM, en la posición 0F000h:0EFC7h de
todas las BIOS compatibles (prácticamente el 100%), aunque el DOS suele desviarla a la RAM
para poder actualizarla. El formato de la misma es:
byte 0: Se corresponde con el byte 1 del comando 'Specify' del 765, que indica el step rate (el
tiempo de acceso cilindro-cilindro, a menudo es 0Dh = 3 ó6 ms) y el head unload time
(normalmente, 0Fh = 240 ó480 ms).
byte 1: Es el byte 2 del comando 'Specify': los bits 7..1 indican el head load time (normalmente
01h = 2 ó4 ms) y el bit 0 suele estar a 0 para indicar modo DMA.
byte 2: Tics de reloj (pulsos de la interrupción 8) que transcurren tras el acceso hasta que se
para el motor.
byte 5: Longitud del GAP entre sectores (normalmente 2Ah en unidades de 5¼ y 1Bh en las de
3½).
byte 7: Longitud del GAP 3 al formatear (80 en 5¼ y 3½-DD, 84 en 5¼-HD y 108 en 3½-HD).
byte 10: Tiempo de aceleración del motor (en unidades de 1/8 de segundo).
33
El tiempo de estabilización del cabezal es el tiempo que hay que esperar tras mover el cabezal
al cilindro adecuado, hasta que éste se asiente, con objeto de garantizar el éxito de las
operaciones futuras; esta breve pausa es establecida en 25 milisegundos en la BIOS del PC
original, aunque otras BIOS y el propio DOS suelen bajarlo a 15. Del mismo modo, el tiempo de
aceleración del motor (byte 10) es el tiempo que se espera a que el motor adquiera la
velocidad de rotación correcta, nada más ponerlo en marcha. En cualquier caso, es norma
general intentar tres veces el acceso a disco (con resets de por medio) hasta considerar que un
error es real. En general, pese a estos valores usuales, la flexibilidad del sistema de disco es
extraordinaria y suele responder favorablemente con unos altísimos niveles de tolerancia en
las temporizaciones. Una excepción quizá la constituye el valor de GAP empleado al formatear,
al ser un parámetro demasiado importante.
00h WORD Dirección E/S base del primer puerto serie (0 si no instalado)
02h WORD Dirección E/S base del segundo puerto serie (0 si no instalado)
04h WORD Dirección E/S base del tercer puerto serie (0 si no instalado)
06h WORD Dirección E/S base del cuarto puerto serie (0 si no instalado)
34
08h WORD Dirección E/S base del primer puerto paralelo (0 si no instalado)
0Ah WORD Dirección E/S base del segundo puerto paralelo (0 si no instalado)
0Ch WORD Dirección E/S base del tercer puerto paralelo (0 si no instalado)
[Máquinas PS]:
bit 8: reservado
00b = EGA,VGA,PGA
01b = 40 x 25 color
10b = 80 x 25 color
11b = 80 x 25 mono
bit 3: reservado
35
bit 0: = 1 si hay disquete disponible para arrancar
36
1Ch WORD Teclado: puntero a la primera entrada vacía en el buffer
1Eh 16 WORDs Buffer del teclado (cola circular, ver offsets 80h y 82h para moverlo)
bit 6 reservado
40h BYTE Contador de tics de reloj que faltan para parar motor de la disquetera
bits 4-0:
37
03h error de protección contra escritura
50h 16 BYTEs Posición del cursor (columna, fila) para las 8 páginas
60h WORD Tipo de cursor, compatible 6845, byte alto=línea inicial, bajo=final
63h WORD Dirección E/S base del controlador de vídeo: color=03D4h, mono=03B4h
67h DWORD Punto de retorno al modo real tras ciertos resets del POST
38
= 9ABCh [PC Convertible] test de fabricación
74h BYTE Estado de la última operación del disco fijo: {salvo unidades ESDI}
39
FFh fallo de sentido
76h BYTE Disco fijo: byte de control {IBM lo documenta sólo en el XT}
77h BYTE Disco fijo: offset del puerto E/S {IBM lo documenta sólo en el XT}
80h WORD Offset de inicio del buffer del teclado respecto al segmento 40h
(normalmente 1Eh)
82h WORD Offset del fin del buffer del teclado+1 respecto al segmento 40h
(normalmente 3Eh)
8Bh BYTE Control del medio físico del disco [no XT]:
40
bits 3-2: {Tasa de transferencia al inicio de la operación}
8Ch BYTE Estado del controlador del disco fijo [no XT]
8Dh BYTE Estado de error del controlador de disco fijo [no XT]
bit 7: reservado
bit 3: reservado
10=250kbps, 11=1Mbps
bit 3: reservado
41
101 determinado 1.2Mb en 1.2Mb (continúa en pág siguiente)
110 reservado
98h DWORD Timer2: [AT, PS excepto Mod 30] puntero al banderín de espera de
42
9Ch DWORD Timer2: [AT, PS exc Mod 30] contador de espera del usuario (microseg.)
A0h BYTE Timer2: [AT, PS exc Mod 30] banderín de espera activa:
A4h DWORD [PS/2 Mod 30] Vector de la interrupción del disco duro preservada
ACh-AFh Reservados
B0h BYTE (Phoenix 386 BIOS 1.10 10a) contador para retardo LOOP cuando se pita
D0h-EFh Reservado
43
44