Estructura Lógica del PC (Personal Computer)

Anuncio
Apuntes de ACP.
Tema 1. El sistema PC: Estructura Lógica.
Modelo de capas del sistema (AplicaciónDosBIOSHW)
Conjunto de registros del PC:
De propósito General
AX
AH
AL
BX
BH
BL
CX
CH
CL
DX
DH
DL
Registros de segmento
CS
Code Segment
DS
Data Segment
ES
Extra Data Segment
SS
Stack Segment ( pila )
Registros de Indice
SI
Indice de Segmento
DI
Indice de Datos
SP
Stack Pointer
BP
Base Pointer
IP
Contador de Programa
(Instruction Pointer)
Los registros de propósito general son accesible por byte (8 bits) y por
palabra (16 bits), todos los demas registros son solo accesibles por palabra,
pero todos ellos tienen 16 bits.
Al manejar memoria segmentada cada aplicación se divide en tres
(cuatro) segmentos: codigo (instrucciones), datos (1 o 2 segmentos) y la
pila. Estos segmentos se hallan apuntados por los registros de segmento.
Faltan cosas, muchas cosas
Segmentación : Espacio Lógico.
Una posición dentro de un segmento se alcanza con dos palabras de 2
bytes cada una:
Segmento
 Indica la posición de la base del segmento.
Offset
 Indica el desplazamiento a partir de dicha base.
Los segmentos pueden tener un tamaño máximo de 64KBytes, ya que
son direccionados por un offset de 16 bits (2 bytes), esto da lugar a que la
memoria de 1MB pueda ser direccionada con solo 16 segmentos ( 0  F )
pero esto puede dar lugar a que hayan solapamientos, ya que no tienen por
que medir todos los segmentos 64 KB.
La situación puede ser la siguiente:
Focopiar pag. 11.
Para evitar esto el DOS realiza una Normalización de las direcciones y
establece que cada segmento es de 16 KB y que pueden haber hasta 64 KB
segmentos distintos sin solapamiento.
Sin Normalizar
Segmento
0000  FFFF
Offset
000  FFF
Con solapamiento
Normalizados
Segmento
0000  FFFF
Offset
0F
Sin solapamiento
Dir. Lógica = [ Segmento : Offset ]
16 bits 16 bits
Dir. Física = Segmento * 16 + Offset
Poner dibujitos
Programación de los punteros en Turbo Pascal:
Type Puntero =
record
offset : word;
segmento
:
word;
end;
Var
Ptr_word : ^word;
Ptr_aux : Puntero;
Carga de un puntero con valores:
Ptr_aux.offset:=valor_offset;
Ptr_aux.segmento:=valor_segmento;
Ptr_word:=pointer(Ptr_aux);
Ptr_word:=Ptr(valor_segmento,
valor_offset);
Solo en Turbo Pascal
Hay dos instrucciones muy especiales en TP : seg y ofs
seg (ptr_word) devuelve la dir. donde esta el segmento
ofs (ptr_word) y el offset
seg
(ptr_word^)
ofs
(ptr_word^)
devuelve el valor del campo segmento
y el valor del campo offset
Documentos relacionados
Descargar