1
Uso de una CALL GATE
• Uso de una CALL GATE
Universidad Pontificia de Salamanca (Madrid)Dpto. de Electrónica y Comunicaciones.
© Alfonso Alejandre, Luis Azorín y Francisco Machío
2
La tarea en curso va a ejecutar la instrucción CALL
0017:1234H
Se conoce el contenido de los registros:
También se dispone de un volcado de diferentes
zonas de memoria:
La tarea en curso va a ejecutar la instrucción CALL
0017:1234H
Se conoce el contenido de los registros:
También se dispone de un volcado de diferentes
zonas de memoria:
Ejemplo de uso de una CALL GATE
4528HLDTR
0050000FFFHGDTR
000EHSS
0006HCS
00008206000003FFFH
CPL = 24A80HSP
3785HIP
Universidad Pontificia de Salamanca (Madrid)Dpto. de Electrónica y Comunicaciones.
© Alfonso Alejandre, Luis Azorín y Francisco Machío
3
Ejemplo de uso de una CALL GATE
Volcado de memoria:
Se pide detallar todas las cargas de registro de segmento que se produzcan y reflejar el estado de la pila actual y al entrar a la subrutina.
Volcado de memoria:
Se pide detallar todas las cargas de registro de segmento que se produzcan y reflejar el estado de la pila actual y al entrar a la subrutina.
Universidad Pontificia de Salamanca (Madrid)Dpto. de Electrónica y Comunicaciones.
© Alfonso Alejandre, Luis Azorín y Francisco Machío
4
CALL 0017:1234HCALL 0017:1234H
Ejemplo de uso de una CALL GATE
RPL = 3
TI = 1 ; LDT
Indice = 2
0000 0000 0001 0111
Selector
Descriptor
Tabla de descriptores
Universidad Pontificia de Salamanca (Madrid)Dpto. de Electrónica y Comunicaciones.
© Alfonso Alejandre, Luis Azorín y Francisco Machío
5
Ejemplo de uso de una CALL GATE
Localizar y leer un descriptor [10]Localizar y leer un descriptor [10]
Offset = Indice * 8 = 2 * 8 = 10H
4528HLDTR 00008206000003FFFH
Dir. Base LDT = 60000H
Dir. Física descriptor = Dir. Base LDT + offset = 60010H
OK
Universidad Pontificia de Salamanca (Madrid)Dpto. de Electrónica y Comunicaciones.
© Alfonso Alejandre, Luis Azorín y Francisco Machío
6
Ejemplo de uso de una CALL GATE
Localizar y leer un descriptor [10]Localizar y leer un descriptor [10]
Tipo = CALL GATEDescriptor = 00 00 E4 03 00 40 34 56 H
Offset = 3456 H D.A. = 1110 01002/3 = 0 (16 bits)
GATE DPL = 3P=1WORD COUNT = 3
Selector = 40 H
Universidad Pontificia de Salamanca (Madrid)Dpto. de Electrónica y Comunicaciones.
© Alfonso Alejandre, Luis Azorín y Francisco Machío
7
Ejemplo de uso de una CALL GATE
Localizar y leer un descriptor [10]Localizar y leer un descriptor [10]
Tipo = CALL GATEDescriptor = 00 00 E4 03 00 40 34 56 H
Offset = 3456 H D.A. = 1110 01002/3 = 0 (16 bits)
GATE DPL = 3P=1DWORD COUNT = 3
Selector = 40 H
OK
Universidad Pontificia de Salamanca (Madrid)Dpto. de Electrónica y Comunicaciones.
© Alfonso Alejandre, Luis Azorín y Francisco Machío
8
Ejemplo de uso de una CALL GATELocalizar y leer un descriptor [10]Localizar y leer un descriptor [10]
Tipo = CALL GATEDescriptor = 00 00 E4 03 00 40 34 56 H2/3 = 0 (16 bits)
GATE DPL = 3P=1
OK
EPL = MAX (CPL, RPL)
EPL = MAX (2, 3)
EPL = 3
CALL 0017:1234HCS = 6
Universidad Pontificia de Salamanca (Madrid)Dpto. de Electrónica y Comunicaciones.
© Alfonso Alejandre, Luis Azorín y Francisco Machío
OK
9
Ejemplo de uso de una CALL GATELlamada a través de la CALL GATELlamada a través de la CALL GATE
Call gatecon instr.
CALL
Sgte. paso
Universidad Pontificia de Salamanca (Madrid)Dpto. de Electrónica y Comunicaciones.
© Alfonso Alejandre, Luis Azorín y Francisco Machío
10
Localizar el descriptor de segmento de código.Localizar el descriptor de segmento de código.
Ejemplo de uso de una CALL GATE
0000 0000 0100 0000
Universidad Pontificia de Salamanca (Madrid)Dpto. de Electrónica y Comunicaciones.
© Alfonso Alejandre, Luis Azorín y Francisco Machío
Descriptor GATE = 00 00 E4 03 00 40 34 56 H
Selector = 40 H
RPL = 0, pero no se usa [3]
TI = 0 ; GDT
Indice = 8
11
Localizar el descriptor de segmento de código.Localizar el descriptor de segmento de código.
Ejemplo de uso de una CALL GATE
Universidad Pontificia de Salamanca (Madrid)Dpto. de Electrónica y Comunicaciones.
© Alfonso Alejandre, Luis Azorín y Francisco Machío
Offset = Indice * 8 = 8 * 8 = 40H
Dir. Física descriptor = Dir. Base GDT + offset = 5040H
0050000FFFHGDTR
Dir. Base GDT = 5000H
OK
12
Ejemplo de uso de una CALL GATE
Localizar y leer un descriptor [10]Localizar y leer un descriptor [10]
Tipo = Segm.CódigoDescriptor = 07 00 98 54 38 80 1F F5 H
Dir. Base = 07543880 H D.A. = 10011000C = 0 (No conforme)
R = 0 (No legible)A = 0 (Accedido)Gr. =0
Def. = 0 (Tarea 16 bits)
Universidad Pontificia de Salamanca (Madrid)Dpto. de Electrónica y Comunicaciones.
© Alfonso Alejandre, Luis Azorín y Francisco Machío
Segm. DPL = 0P = 1Límite = 1FF5H
13
Ejemplo de uso de una CALL GATE
Localizar y leer un descriptor [10]Localizar y leer un descriptor [10]
Tipo = Segm.CódigoDescriptor = 07 00 98 54 38 80 1F F5 H
Dir. Base = 07543880 H D.A. = 10011000C = 0 (No conforme)
R = 0 (No legible)A = 0 (Accedido)Gr. =0
Def. = 0 (Tarea 16 bits)
Universidad Pontificia de Salamanca (Madrid)Dpto. de Electrónica y Comunicaciones.
© Alfonso Alejandre, Luis Azorín y Francisco Machío
Segm. DPL = 0P = 1Límite = 1FF5H
OK
14
Ejemplo de uso de una CALL GATE
Localizar y leer un descriptor [10]Localizar y leer un descriptor [10]
Tipo = Segm.CódigoDescriptor = 07 00 98 54 38 80 1F F5 H
C = 0 (No conforme)
R = 0 (No legible)A = 0 (Accedido)
Universidad Pontificia de Salamanca (Madrid)Dpto. de Electrónica y Comunicaciones.
© Alfonso Alejandre, Luis Azorín y Francisco Machío
Segm. DPL = 0P = 1
CPL = 2
CS = 6
OKOKCPL Cambia
15
Ejemplo de uso de una CALL GATELlamada a través de la CALL GATELlamada a través de la CALL GATE
Universidad Pontificia de Salamanca (Madrid)Dpto. de Electrónica y Comunicaciones.
© Alfonso Alejandre, Luis Azorín y Francisco Machío
Cambiar de pila
Call gatecon instr. CALL y
cambio de CPL
16
Leer del TSS los valores de SS y SP para el nuevo CPL.Leer del TSS los valores de SS y SP para el nuevo CPL.
Ejemplo de uso de una CALL GATE
0000 0000 0011 1000
Universidad Pontificia de Salamanca (Madrid)Dpto. de Electrónica y Comunicaciones.
© Alfonso Alejandre, Luis Azorín y Francisco Machío
SP0 2F42 H
RPL = 0
TI = 0 ; GDT
Indice = 7
SS0 0038 H
TSS (Task Status Segment)
Selector = 38 H
17
Localizar el descriptor de segmento de código.Localizar el descriptor de segmento de código.
Ejemplo de uso de una CALL GATE
Universidad Pontificia de Salamanca (Madrid)Dpto. de Electrónica y Comunicaciones.
© Alfonso Alejandre, Luis Azorín y Francisco Machío
Offset = Indice * 8 = 7 * 8 = 38HDir. Base GDT = 5000H
Dir. Física descriptor = Dir. Base GDT + offset = 5038H
0050000FFFHGDTR
OK
18
Ejemplo de uso de una CALL GATE
Localizar y leer un descriptor [10]Localizar y leer un descriptor [10]
Tipo = Segm.DatosDescriptor = 00 00 92 01 01 00 2F FF H
Dir. Base = 00010100 H D.A. = 10010010ED = 0 (Normal)
W = 1 (Escribibl
e)A = 0 (No accedido)Gr. =0
Big = 0 (Pila de 16 bits)
Universidad Pontificia de Salamanca (Madrid)Dpto. de Electrónica y Comunicaciones.
© Alfonso Alejandre, Luis Azorín y Francisco Machío
Segm. DPL = 0P = 1Límite = 2FFFH
19
Localizar y leer el descriptor [10]Localizar y leer el descriptor [10]
OK
Ejemplo de uso de una CALL GATE
Tipo = Segm.DatosDescriptor = 00 00 92 01 01 00 2F FF H
Dir. Base = 00010100 H D.A. = 10010010ED = 0 (Normal)
W = 1 (Escribible)
A = 0 (No accedido)Gr. =0Big = 0 (Pila de 16 bits)
Universidad Pontificia de Salamanca (Madrid)Dpto. de Electrónica y Comunicaciones.
© Alfonso Alejandre, Luis Azorín y Francisco Machío
Segm. DPL = 0P = 1Límite = 2FFFH
20
Localizar y leer el descriptor [10]Localizar y leer el descriptor [10]
Ejemplo de uso de una CALL GATE
Tipo = Segm.DatosDescriptor = 00 00 92 01 01 00 2F FF H
ED = 0 (Normal)
W = 1 (Escribible)
A = 0 (No accedido)
Universidad Pontificia de Salamanca (Madrid)Dpto. de Electrónica y Comunicaciones.
© Alfonso Alejandre, Luis Azorín y Francisco Machío
Segm. DPL = 0P = 1
OK
Nuevo CPL = 0
RPL = 0
SS0 0038 H
OK
21
Ejemplo de uso de una CALL GATE
Dirección de memoria apuntada por el nuevo puntero de pila:Dirección de memoria apuntada por el nuevo puntero de pila:
00 00 92 01 01 00 2F FF H
Universidad Pontificia de Salamanca (Madrid)Dpto. de Electrónica y Comunicaciones.
© Alfonso Alejandre, Luis Azorín y Francisco Machío
Dir. Base = 00010100 H SP = 2F42H
Ptro. Pila = Dir. Base + Offset = 00010100H + 2F42H = 13042H
SP = 2F42 H
SS = 0038 H
22
Ejemplo de uso de una CALL GATELlamada a través de la CALL GATELlamada a través de la CALL GATE
Universidad Pontificia de Salamanca (Madrid)Dpto. de Electrónica y Comunicaciones.
© Alfonso Alejandre, Luis Azorín y Francisco Machío
Almacenar datos en la nueva pila
Call gatecon instr. CALL y
cambio de CPL
23
Calcular dirección de memoria de la pila anteriorCalcular dirección de memoria de la pila anterior
Ejemplo de uso de una CALL GATE
0000 0000 0000 1110
Universidad Pontificia de Salamanca (Madrid)Dpto. de Electrónica y Comunicaciones.
© Alfonso Alejandre, Luis Azorín y Francisco Machío
SPant
4A80 H
RPL = 2
TI = 1 ; LDT
Indice = 1
SSant
000E H
TSS (Task Status Segment)
Selector = 0E H
24
Ejemplo de uso de una CALL GATE
Localizar y leer un descriptor [10]Localizar y leer un descriptor [10]
Offset = Indice * 8 = 1 * 8 = 8
4528HLDTR 00008206000003FFFH
Dir. Base LDT = 60000H
Dir. Física descriptor = Dir. Base LDT + offset = 60008H
OK
Universidad Pontificia de Salamanca (Madrid)Dpto. de Electrónica y Comunicaciones.
© Alfonso Alejandre, Luis Azorín y Francisco Machío
25
Ejemplo de uso de una CALL GATE
Localizar y leer el descriptor [10]Como el descriptor estaba cargado en SS sabemos que cumplía todas las reglas. Sólo nos interesa su Dir. Base.
Localizar y leer el descriptor [10]Como el descriptor estaba cargado en SS sabemos que cumplía todas las reglas. Sólo nos interesa su Dir. Base.
Descriptor = 00 00 92 06 B0 00 2F FF H
Dir. Base = 0006B000 H
Universidad Pontificia de Salamanca (Madrid)Dpto. de Electrónica y Comunicaciones.
© Alfonso Alejandre, Luis Azorín y Francisco Machío
SPant = 1A80H
Ptro. Pilaant = Dir. Base + Offset = 0006B000H + 1A80H = 6CA80H
26
Localizar y leer el contenido de la pila anteriorComo el descriptor de la CALL GATE el bit 2/3 = 0 (16 bits) y WORD COUNT = 3, tenemos almacenadas tres words en la antigua pila.
Localizar y leer el contenido de la pila anteriorComo el descriptor de la CALL GATE el bit 2/3 = 0 (16 bits) y WORD COUNT = 3, tenemos almacenadas tres words en la antigua pila.
Ejemplo de uso de una CALL GATE
Universidad Pontificia de Salamanca (Madrid)Dpto. de Electrónica y Comunicaciones.
© Alfonso Alejandre, Luis Azorín y Francisco Machío
Ptro. Pilaant= 6CA80H
45H
27H
2AH
33H
FFH
78H
27
Almacenar información en la nueva pilaAlmacenar información en la nueva pila
Ptro. Pila =
Ejemplo de uso de una CALL GATE
Universidad Pontificia de Salamanca (Madrid)Dpto. de Electrónica y Comunicaciones.
© Alfonso Alejandre, Luis Azorín y Francisco Machío
45H
27H
2AH
33H
FFH
78H
Ptro. Pilaant
06
00
80
4A85
37
45H
27H
2AH
33H
FFH
78H
13042H
0F
00
SPant
4A80 HSSant
000F H000F H
4A80 H
CS
IP0006 H
3785 H
0006 H
3785 H
13040H1303EH13038H13036H13034HSSant
SPant
Parám.
CS
IP
28
Ejemplo de uso de una CALL GATELlamada a través de la CALL GATELlamada a través de la CALL GATE
Universidad Pontificia de Salamanca (Madrid)Dpto. de Electrónica y Comunicaciones.
© Alfonso Alejandre, Luis Azorín y Francisco Machío
Cargar los nuevos
valores de CS e IP
Call gatecon instr. CALL y
cambio de CPL
29
Ejemplo de uso de una CALL GATELlamada a través de la CAL GATE
instrucción CALL 0017:1234HLlamada a través de la CAL GATE
instrucción CALL 0017:1234H
Universidad Pontificia de Salamanca (Madrid)Dpto. de Electrónica y Comunicaciones.
© Alfonso Alejandre, Luis Azorín y Francisco Machío
Descriptor segm. Código = 07 00 98 54 38 80 1F F5 H
Descriptor CALL GATE = 00 00 E4 03 00 40 34 56 H
07 00 98 54 38 80 1F F5 HCS =
0040 H 3456HIP =