|
Tutorial
|
Dettaglio Istruzioni |
|
|
 |
Istruzioni
della Cpu 80x86 |
SCHEDA n° 07 [I/
095
di 198] |
 |
|
LGS - Crea il
Puntatore GS:Offset assumendolo dalla memoria |
|
 | Questa istruzione non
appartiene al Set dell'8088/86; si usa solo con 80386/486. |
 | Questa istruzione legge
il contenuto di 4 locazioni consecutive di memoria
(indicate dall'operando sorgente) e ne
copia il contenuto nel registro di
Segmento GS e nel registro
di Offset indicato dall'operando destinazione. |
 | Il registro coinvolto per ricevere l'offset
del puntatore assunto dalla memoria può essere uno qualunque dei registri a
16 bit (naturalmente esclusi quelli di segmento...). |
 | La sequenza dei 4 bytes
presenti nella memoria sorgente, segue la logica
Lo-Hi più volte sottolineata: nella locazione puntata
dall'etichetta è presente il byte meno significativo
dell'offset del puntatore, seguito dal suo byte
più significativo e dai bytes basso e alto del
segment del puntatore stesso. |
 | Le sue caratteristiche sono riassunte nella
seguente tabella (leggi le istruzioni
): |
|
LGS Registro,Memoria |
GS
(segment) <<contenuto word Sorgente + 02h
Destinazione (offset) <<contenuto word
Sorgente |
| |
|
Esempio
di Applicazione |
Cicli
di Clock |
Mem
Acces |
N°
Bytes |
Flag
influenzate |
| Mnemonico |
Operandi |
86 |
268 |
386 |
486 |
O |
D |
I |
T |
S |
Z |
A |
P |
C |
LGS
|
SI,[Depo04]
|
no |
no |
7 |
6 |
no |
2,4 |
|
|
|
|
|
|
|
|
|
 | La tabella precedente sottolinea che nessuna
flag viene alterata da questa operazione; la figura seguente mostra le risorse
richieste da questa istruzione in funzione degli operandi
coinvolti (leggi le
istruzioni):
|
|
Addr |
|
Codifica
Masm |
|
Sequenza
Bytes |
|
Istruzione |
|
0100 |
|
55AA
1188 |
|
88 11
AA 55 |
|
Depo04 |
.386
DD 55AA1188H |
| ---- |
|
---------------- |
|
----------------- |
|
------- |
---------------------- |
0104
0108
010C
0110
0114 |
|
0F B5 36 0100
0F B5 3E 0100
0F B5 06 0100
0F B5 1E 0100
0F B5 0E 0100 |
|
0F B5 36 00
01
0F B5 3E 00
01
0F B5 06 00
01
0F B5 1E 00
01
0F B5 0E 00
01 |
|
|
LGS
SI,[Depo04]
LGS DI,[Depo04]
LGS AX,[Depo04]
LGS BX,[Depo04]
LGS CX,[Depo04] |
|
 | Gli esempi appena proposti non aiutano a
capire il funzionamento di questa istruzione; con una più attenta analisi
possiamo dire:
 | ciascun esempio genera un puntatore logico
che ha come segment il
registro GS, caricato certamente con
55AAH. |
 | la parte offset
del puntatore sarà costituita dai registri passati come operando
destinazione, in ogni caso lasciati con il valore
1188H. |
 | dopo l'esecuzione saranno dunque
disponibili rispettivamente i puntatori GS:SI
= GS:DI =
GS:AX
= GS:BX
= GS:CX,
tutti uguali a 55AA:1188H |
 | i valori esadecimali sono ovviamente
assunti dalle 4 locazioni puntate da GS:[Depo04];
la variabile locale Depo04
contiene infatti, in sequenza, i bytes 88H,
11H, AAH e 55H
(la logica Lo-Hi è evidente...) e il programma
la riconosce per default nel segmento GS. |
|
 | Questa pratica istruzione può tornar utile
nella lettura dei puntatori presenti nella
Tabella dei
Vettori,
nelle fasi di rimappatura dei Vettori stessi, in occasione della scrittura
di nuove procedure di servizio per i vari INT; naturalmente lo stesso vale
per altre zone di memoria chiamate a raccogliere puntatori completi di vario
tipo, come per esempio lo stack. |
 | Il codice seguente mostra il contenuto dei
registri dopo l'azione di questa istruzione: |
Il
contenuto delle prime 16 locazioni RAM è il
seguente:
0000:0000 68 10 A7 00 BC 2C 95 08-16 00 B4 03 AB 2C 95 08
Prima di eseguire l'istruzione il registro DS
è stato posto a 0
-R
AX=0000 BX=0000 CX=0000 DX=0000 SP=ED5F BP=0000 SI=0000 DI=0000
DS=0000 ES=1190 SS=1190 CS=1190
IP=0100 NV UP EI PL NZ NA PO NC
1190:0100 0FB53E0000 LGS DI,[0000]
DS:0000=1068
L'istruzione ha preso 4
bytes da DS:[0000], 68
18 A7
00
e gli ha messi sotto forma di puntatore, 00A7:1068,
in GS:DI.
|
 | Questa istruzione ha 3 codici
operativi,
0FH e B5H,
seguito da quello che tiene conto dell'operando coinvolto. |
©
2001-2010 - Studio Tecnico
ing. Giorgio OBER
Tutti i diritti sono riservati
|