Allora e molto semplice
una istruzione shl a memoria x intenderci shl word ptr database[..],1
impiega 4 cicli di clock
richiede 2 accessi in memoria
ed occupa 4 byte
dovendo effettuare un posizionamento al 4 record
dovremo fare:
;caso 1:
shl word ptr database[0],1
shl word ptr database[1],1
shl word ptr database[2],1
shl word ptr database[3],1 :solo per il posizionamento
shl word ptr database[4],1 ; per prendere i dati interessati
;caso 2:
mov cl,4
shl word ptr database[0],cl
caso 1:
5 *4 = 20 cicli di clock
5*2= 10 accessi in memoria
5*4= 20 byte impiegati
caso 2:
cicli di clock = cicli di clock[caso1]+1
accessi in memoria = accessi in memoria [caso1]
byte impiegati = byte impiegati[caso1]+3
mov cx,4
mov ax,numero record
mul cx
mentre la Mul darà:
cicli di clock = 1+1+13=15
nessun accesso in memoria
byte impiegati minimi = 3+3+2=8
byte impiegati massimi = 4+4+10
sapendo ciò ed essendo shl più diretta della mul
avremo che shl pur rimettendoci con gli accessi in memoria conviene rispetto alla mul
per quanto riguarda la velocità di esecuzione
per i primi indici cioè 0-1-2
12 cicli di clock contro i 15 della Mul
per l'indice 3 la differenza e minima
dopo non conviene più!
mentre se vediamo l'aspetto dei byte utilizzati
vediamo che l' shl conviene solo per gli indici 0 e 1
4 contro minimo 8 massimo 10
e 8 contro minimo 8 massimo 10
i dati si riferiscono al processore 486 con i nuovi processori si saranno sicuramente accellerate entrambe le istruzioni.
ma alla fine non cambiano di molto i risultati.