Sezione |
Indirizzi Base
Registri Interni
|
Schede del Tutorial |
Le PseudoOperazioni di MASM |
SCHEDA n° 02 [ 13 di 26] |
|
|
La PseudoOperazione STRUC definisce una struttura di dati, in pratica una raccolta organizzata di campi racchiusa tra questa e la PseudoOperazione ENDS , con cui fa coppia; davanti ad entrambe si deve specificare il nome desiderato per la struttura. | |
Si definisce all'inizio del programma sorgente e, nella zona dati, può essere associata ad una o più etichette, ciascuna delle quali avrà a disposizione la stessa quantità di locazioni stabilita dalla struttura stessa. | |
Ciascun campo è definito con una direttiva di tipo DB, DW, DD, DQ e DT, che ne specifica la dimensione; può avere (opzionalmente) un nome e un valore iniziale. |
|
La
coppia di direttive STRUC/ENDS
non crea dati ma stabilisce un nuovo tipo di
dato:
i dati effettivi saranno definiti nella loro zona specifica
dichiarando il loro nome seguito da quello della struttura ed
eventualmente dai
valori da assegnare ai vari campi, comunque separati da virgole e
racchiusi tra parentesi angolari; per esempio: nomeVariabile nomeStruttura <primo,secondo,terzo> |
|
La coppia di direttive STRUC/ENDS si presta bene, per esempio, per definire le schede di un archivio, caratterizzate da dati di diverso tipo (nome, cognome, età, indirizzo,.....), ma anche per altri gruppi di informazione. |
|
La comodità delle strutture consiste nella possibilità di accedere ai suoi singoli campi in modo organizzato; per questo si usa un operatore molto essenziale, un semplice punto inserito tra il nome della variabile strutturata e quello del suo campo (nell'esempio proposto qui sotto: Msg_01.LungMax); l'assemblatore calcola il corretto indirizzo al campo desiderato sommando l'offset della prima (Msg_01) con LungMax) relativo all'inizio della struttura. |
|
Un esempio che si adatta benissimo al collaudo
di questa direttiva fa riferimento ad una particolare potente funzione DOS
(la Funzione 0AH dell'INT 21H,
Ingresso bufferizzato) che consente l'acquisizione di una
stringa di caratteri da tastiera purché venga
predisposto un Buffer di memoria
strutturato; supponendo di dover acquisire una serie di stringhe, per
ciascuna di esse può essere definita una struttura,
in accordo con le specifiche richieste per il Buffer,
cioè:
|
|
Il programma che segue definisce e utilizza la
struttura Stringa, adatta all'acquisizione di frasi in accordo con la descrizione fornita poco fa:
La parte sinistra della figura mostra le 3 istruzioni [*] che, con l'aiuto della funzione 0AH del DOS, inizialiozzano le locazioni della prima scheda di formato Stringa, mentre le [#] ne manipolano le voci interne.
| ||||||
Da notare la sintassi usata nell'assegnazione della struttura alle 2 schede Msg_01 e Msg_02: se le parentesi angolari, < >, non contengono nulla (come nell'esempio) i campi di ciascuna scheda sono vuoti (cioè non inizializzati). |
|
Senza la definizione di una struttura avremmo
dovuto specificare una dopo l'altra tutte le voci per ciascuna scheda, per
esempio con il codice proposto nella figura successiva: naturalmente
nell'uno o nell'altro caso il codice macchina generato è sempre lo stesso:
è una questione di leggibilità del sorgente, un po' come per le Macro:
La direttiva LABEL associa all'etichetta Msg_01 l'indirizzo corrente nell'area destinata alla acquisizione di stringhe da tastiera assicurata dalla Funzione 0AH dell'INT 21H; tale indirizzo coincide con quello di LungMax; ovviamente con questa tecnica siamo costretti a cambiare, per ogni definizione, tutte le etichette interne. |
|
Scheda n° 02 | Pseudo Operazioni di MASM | |||||||
Scheda n° 02 - 13 |
|
|
|
|
Home |
|
|||||||
|
Motore Ricerca |
|