Abbiamo già usato le stringhe di lunghezza variabile nei nostri esempi precedenti. Le stringhe di lunghezza variabile possono avere tanti personaggi, come richiesto. Generalmente, si precisa la lunghezza della stringa da uno dei due modi -

Memorizzare esplicitamente lunghezza della stringa
Utilizzando un carattere sentinel
Possiamo memorizzare la lunghezza di stringa esplicitamente utilizzando il contatore simbolo $ posizione che rappresenta il valore corrente del contatore posizione. Nel seguente esempio -

msg db 'Hello, world!',0xa ;our dear string
len equ $ - msg ;length of our dear string
$ Indica il byte dopo l'ultimo carattere della stringa variabile di msg. Pertanto, $ -msg dà la lunghezza della stringa. Possiamo anche scrivere

msg db 'Hello, world!',0xa ;our dear string
len equ 13 ;length of our dear string
In alternativa, è possibile memorizzare le stringhe con un carattere sentinella finale per delimitare una stringa invece di memorizzare la lunghezza della stringa in modo esplicito. Il carattere sentinella dovrebbe essere un carattere speciale che non appare all'interno di una stringa.

Per esempio -

message DB 'I am loving it!', 0
Istruzioni String
Ogni istruzione stringa può richiedere un operando sorgente, un operando destinazione o entrambi. Per i segmenti a 32 bit, le istruzioni di stringa utilizzano ESI e EDI registri per puntare gli operandi origine e di destinazione, rispettivamente.

Per segmenti a 16 bit, tuttavia, SI e registri DI vengono usati per indicare la sorgente e la destinazione, rispettivamente.

Ci sono cinque istruzioni di base per l'elaborazione di stringhe. Sono -

MOVS - Questa istruzione sposta 1 Byte, Word o doppia parola di dati dalla posizione di memoria a un'altra.

LODS - Questa istruzione carica dalla memoria. Se l'operando è di un byte, viene caricato nel registro AL, se l'operando è una parola, viene caricato nel registro AX e doubleword viene caricato nel registro EAX.

STOS - Questo memorizza i dati del registro di istruzione (AL, AX o EAX) a memoria.

CMPS - Questa istruzione confronta due voci di dati in memoria. I dati potrebbero essere di una dimensione in byte, parola o doppia parola.

SCAS - Questa istruzione confronta il contenuto di un registro (AL, AX o EAX) con il contenuto di un elemento di memoria.

Ogni dell'istruzione sopra ha un byte, una parola, e la versione doppia parola, e le istruzioni di stringa può essere ripetuta utilizzando un prefisso di ripetizione.

Queste istruzioni utilizzano gli ES: DI e DS: SI coppia di registri, dove DI e SI registri contengono validi gli indirizzi che si riferisce al byte memorizzati nella memoria di correzione. SI è normalmente associato con il DS (segmento di dati) e DI è sempre associato con ES (segmento extra).

Il DS: SI (o ESI) e ES: DI (o EDI) registri indicano gli operandi origine e di destinazione, rispettivamente. L'operando sorgente viene considerato al DS: SI (o ESI) e l'operando destinazione in ES: DI (o EDI) in memoria.

Per gli indirizzi a 16 bit, vengono utilizzati i registri SI e DI, e indirizzi a 32 bit, vengono utilizzati i ESI e EDI registri.

La tabella seguente riporta le varie versioni di istruzioni stringa e lo spazio assunto degli operandi.

Istruzione di base Operandi a Byte Funzionamento Parola Funzionamento Parola doppia Funzionamento
MOVS

ES: DI, DS: EI Movsb MOVSW Movsd
LODS

AX, DS: SI LODSB LODSW LODSD
STOS

ES: DI, AX STOSB STOSW STOSD
CMPS

DS: SI, ES: DI CMPSB CMPSW CMPSD
SCAS

ES: DI, AX SCASB SCASW SCASD
Ripetizione Prefissi
Il prefisso REP, quando impostato prima un'istruzione stringa, ad esempio - REP movsb, provoca la ripetizione dell'istruzione basata su un contatore posto al registro CX. REP esegue l'istruzione, diminuisce da CX 1, e controlla se CX è zero. Si ripete l'elaborazione delle istruzioni fino a quando CX è pari a zero.

Il flag di direzione (DF) determina la direzione dell'operazione.

Utilizzare CLD (Clear Direzione Bandiera, DF = 0) per rendere l'operazione da sinistra a destra.
Utilizzare STD (Imposta Bandiera Direzione, DF = 1) per rendere l'operazione destra a sinistra.
Il prefisso REP ha anche le seguenti variazioni:

REP: E 'la ripetizione incondizionato. Si ripete l'operazione fino CX è zero.

REPE o REPZ: E 'la ripetizione condizionale. Ripete l'operazione mentre la bandiera zero indica uguale / zero. Si ferma quando la ZF indica diverso / zero o quando CX è zero.

REPNE o REPNZ: E 'anche la ripetizione condizionale. Ripete l'operazione mentre il flag zero indica non uguali / zero. Si ferma quando la ZF indica uguale / zero o quando CX viene decrementato a zero.