SLA m
Quest’operazione effettua lo shift a sinistra del dato m: ogni bit viene spostato al posto del bit che si trova alla sua sinistra. Al posto del bit zero viene inserito uno zero. Il vecchio contenuto del bit sette viene posto nel flag di carry.
Modifica del registro dei flag
7 |
6 |
5 |
4 |
3 |
2 |
1 |
0 |
|
|
|
0 |
|
|
0 |
|
Il flag S funziona come flag di segno,
e rappresenta il segno del dato dopo lo shift
Il flag Z funziona come flag di zero
H viene posto sempre a zero
Il flag PV funziona come flag di
parità
Il flag N è posto sempre a zero
Il flag di carry conterrà il bit sette
del dato
L’operando m può essere un registro ad
otto bit dello Z80
Es. SLA C
Prima
3C
10
C F
Dopo
10
C F
78
7 |
6 |
5 |
4 |
3 |
2 |
1 |
0 |
0 |
0 |
|
0 |
|
1 |
0 |
0 |
Il risultato dello shift è stato un
numero positivo (S=0)
Il risultato dello shift è stato un
numero diverso da zero (Z=0)
Il risultato dello shift presenta un
numero di bit ad uno pari a quattro (numero pari) per cui PV=1
Il bit sette del dato prima dello
shift era zero per cui C = 0
L’operando m può essere un operando di
memoria il cui indirizzo si trova nel registro HL (indirizzato in modo
indiretto)
Es. SLA (HL)
Prima
1C00
10
HL F
Dopo
1C00
00
HL F
7 |
6 |
5 |
4 |
3 |
2 |
1 |
0 |
0 |
0 |
|
0 |
|
0 |
0 |
0 |
Il risultato dello shift è stato un
numero positivo (S=0)
Il risultato dello shift è stato un
numero diverso da zero (Z=0)
Il risultato dello shift presenta un
numero di bit ad uno pari a tre (numero pari) per cui PV=0
Il bit sette del dato prima dello
shift era zero per cui C = 0
L’operando m può essere il contenuto
di una locazione di memoria il cui indirizzo si ottiene sommando il contenuto
di un registro indice (IX o IY) ad uno spiazzamento (indirizzamento
indicizzato)
Es. SLA (IX+2)
Prima
1C00
11
IX F
Dopo
1C00
10
HL F
7 |
6 |
5 |
4 |
3 |
2 |
1 |
0 |
1 |
0 |
|
0 |
|
0 |
0 |
0 |
Il risultato dello shift è stato un
numero negativo (S=1)
Il risultato dello shift è stato un
numero diverso da zero (Z=0)
Il risultato dello shift presenta un
numero di bit ad uno pari a tre (numero dispari) per cui PV=0
Il bit sette del dato prima dello
shift era zero per cui C = 0
Quest’istruzione viene chiamata shift a sinistra aritmetico poiché uno shift verso sinistra equivale a moltiplicare il dato per due.
SRL m
Quest’operazione effettua lo shift a destra del dato m: ogni bit viene spostato al posto del bit che si trova alla sua destra. Al posto del bit sette viene inserito uno zero. Il vecchio contenuto del bit sette viene posto nel flag di carry.
Modifica del registro dei flag
7 |
6 |
5 |
4 |
3 |
2 |
1 |
0 |
|
|
|
0 |
|
|
0 |
|
Il flag S funziona come flag di segno,
e rappresenta il segno del dato dopo lo shift
Il flag Z funziona come flag di zero
H viene posto sempre a zero
Il flag PV funziona come flag di
parità
Il flag N è posto sempre a zero
Il flag di carry conterrà il bit sette
del dato
L’operando m può essere un registro ad
otto bit dello Z80
Es. SRL C
Prima
3C
10
C F
Dopo
04
C F
1E
7 |
6 |
5 |
4 |
3 |
2 |
1 |
0 |
0 |
0 |
|
0 |
|
1 |
0 |
0 |
Il risultato dello shift è stato un
numero positivo (S=0)
Il risultato dello shift è stato un
numero diverso da zero (Z=0)
Il risultato dello shift presenta un
numero di bit ad uno pari a quattro (numero pari) per cui PV=1
Il bit sette del dato prima dello
shift era zero per cui C = 0
L’operando m può essere un operando di
memoria il cui indirizzo si trova nel registro HL (indirizzato in modo
indiretto)
Es. SRL (HL)
Prima
1C00
10
HL F
Dopo
1C00
00
HL F
7 |
6 |
5 |
4 |
3 |
2 |
1 |
0 |
0 |
0 |
|
0 |
|
0 |
0 |
0 |
Il risultato dello shift è stato un
numero positivo (S=0)
Il risultato dello shift è stato un
numero diverso da zero (Z=0)
Il risultato dello shift presenta un
numero di bit ad uno pari a tre (numero pari) per cui PV=0
Il bit zero del dato prima dello shift
era zero per cui C = 0
L’operando m può essere il contenuto
di una locazione di memoria il cui indirizzo si ottiene sommando il contenuto
di un registro indice (IX o IY) ad uno spiazzamento (indirizzamento
indicizzato)
Es. SRL (IX+2)
Prima
1C00
11
IX F
Dopo
1C00
85
IX F
7 |
6 |
5 |
4 |
3 |
2 |
1 |
0 |
1 |
0 |
|
0 |
|
1 |
0 |
1 |
Il risultato dello shift è stato un
numero negativo (S=1)
Il risultato dello shift è stato un
numero diverso da zero (Z=0)
Il risultato dello shift presenta un
numero di bit ad uno pari a due (numero pari) per cui PV=1
Il bit zero del dato prima dello shift
era uno per cui C = 1
Quest’istruzione effettua anch’essa lo shift verso destra del dato. Vi è, però, una differenza con lo shift a destra logico. Nello shift aritmetico lo spostamento verso destra di ogni bit equivale a dividere il dato che si vuole shiftare per due. Se, però, si vuole dare un significato matematico all’operazione il dato non deve cambiare di segno. Il segno del dato è espresso dal bit sette per cui, quando si effettua lo shift, il bit sette viene spostato verso destra ma va contemporaneamente a rioccupare il proprio posto. In questo modo il segno del dato si conserva anche dopo l’operazione di shift.
Modifica del registro dei flag
7 |
6 |
5 |
4 |
3 |
2 |
1 |
0 |
|
|
|
0 |
|
|
0 |
|
Il flag S funziona come flag di segno,
e rappresenta il segno del dato dopo lo shift
Il flag Z funziona come flag di zero
H viene posto sempre a zero
Il flag PV funziona come flag di
parità
Il flag N è posto sempre a zero
Il flag di carry conterrà il bit sette
del dato
L’operando m può essere un registro ad
otto bit dello Z80
Es. SRA C
Prima
3C
10
C F
Dopo
C
1E
04
F
7 |
6 |
5 |
4 |
3 |
2 |
1 |
0 |
0 |
0 |
|
0 |
|
1 |
0 |
0 |
Il risultato dello shift è stato un
numero positivo (S=0)
Il risultato dello shift è stato un
numero diverso da zero (Z=0)
Il risultato dello shift presenta un
numero di bit ad uno pari a quattro (numero pari) per cui PV=1
Il bit sette del dato prima dello
shift era zero per cui C = 0
L’operando m può essere un operando di
memoria il cui indirizzo si trova nel registro HL (indirizzato in modo
indiretto)
Es. SRA (HL)
Prima
1C00
10
HL F
Dopo
1C00
00
HL F
7 |
6 |
5 |
4 |
3 |
2 |
1 |
0 |
0 |
0 |
|
0 |
|
0 |
0 |
0 |
Il risultato dello shift è stato un
numero positivo (S=0)
Il risultato dello shift è stato un
numero diverso da zero (Z=0)
Il risultato dello shift presenta un
numero di bit ad uno pari a tre (numero pari) per cui PV=0
Il bit zero del dato prima dello shift
era zero per cui C = 0
L’operando m può essere il contenuto
di una locazione di memoria il cui indirizzo si ottiene sommando il contenuto
di un registro indice (IX o IY) ad uno spiazzamento (indirizzamento
indicizzato)
Es. SRA (IX+2)
Prima
1C00
11
IX F
Dopo
1C00
80
7 |
6 |
5 |
4 |
3 |
2 |
1 |
0 |
0 |
0 |
|
0 |
|
0 |
0 |
0 |
Il risultato dello shift è stato un
numero positivo (S=0)
Il risultato dello shift è stato un
numero diverso da zero (Z=0)
Il risultato dello shift presenta un
numero di bit ad uno pari ad uno (numero dispari) per cui PV=0
Il bit zero del dato prima dello shift
era zero per cui C = 0
Quest’istruzione ha lo scopo di controllare il bit numero b dell’operando m. il risultato del test sarà posto nel flag Z secondo la seguente legge
Se il bit testato risulta pari ad 1,
il flag di zero viene posto pari a 0
Se il bit testato risulta pari a 0, il
flag di zero viene posto pari a 1
Modifica del registro dei flag
7 |
6 |
5 |
4 |
3 |
2 |
1 |
0 |
? |
|
|
1 |
|
? |
0 |
|
Il flag S assume un valore casuale
Il flag Z funziona nella modalità
descritta sopra
H viene posto sempre ad uno
Il flag PV assume un valore casuale
Il flag N è posto sempre a zero
Il flag di carry non viene influenzato
dall’operazione e conserva il suo vecchio valore
L’operando m può essere un registro ad
otto bit del microprocessore
Es. Bit 3, D
Prima
Il bit 3 dell’operando è pari a zero per cui il flag di zero verrà posto ad 1
7 |
6 |
5 |
4 |
3 |
2 |
1 |
0 |
? |
1 |
|
1 |
|
? |
0 |
1 |
Il flag di carry è ad 1 poiché tale era il suo valore prima.
L’operando s può essere una locazione
di memoria indirizzata in modo indiretto
Es. Bit 5, (HL)
1C00
10
HL F
Il bit 5 dell’operando è pari ad uno per cui il flag di zero verrà posto ad 0
7 |
6 |
5 |
4 |
3 |
2 |
1 |
0 |
? |
0 |
|
1 |
|
? |
0 |
0 |
L’operando m può essere una locazione
di memoria indirizzata in modo indicizzato
Es, Bit 7, (IX+2)
1C00
10
IX F
Il bit 7 dell’operando è pari a zero per cui il flag di zero verrà posto ad 1
7 |
6 |
5 |
4 |
3 |
2 |
1 |
0 |
? |
0 |
|
1 |
|
? |
0 |
1 |
Quest’istruzione ha lo scopo di porre ad 1 il bit b dell’operando s
L’operando m può essere un registro ad
otto bit del microprocessore
Es. Set 3, D
Prima
Dopo
L’operando s può essere una locazione
di memoria indirizzata in modo indiretto
Es. Set 5, (HL)
1C00
HL
Dopo
L’operando m può essere una locazione
di memoria indirizzata in modo indicizzato
Es, Set 7, (IX+2)
1C00
10
IX F
Dopo
Quest’istruzione ha lo scopo di porre a 0 il bit b dell’operando s
L’operando m può essere un registro ad
otto bit del microprocessore
Es. Res 3, D
Prima
Dopo
L’operando s può essere una locazione
di memoria indirizzata in modo indiretto
Es. Res 5, (HL)
1C00
HL
Dopo
L’operando m può essere una locazione
di memoria indirizzata in modo indicizzato
Es, Res 7, (IX+2)
1C00
10
IX F
Dopo
E’ un’istruzione di salto assoluto incondizionato. Per salto assoluto s’intende il fatto che grazie a quest’istruzione, il contenuto del Program Counter viene sostituito completamente con il nuovo indirizzo pq espresso direttamente all’interno dell’istruzione. In tal modo si può saltare ad una qualunque locazione di memoria. Si dice incondizionato poiché questo salto viene eseguito senza dover sottostare a nessuna condizione. In sostanza il microprocessore è obbligato ad eseguire il salto quando incontra l’istruzione durante l’esecuzione del programma. L’istruzione non modifica il registro dei flag.
Es. JP 3A52
Prima
PC
Dopo
PC
E’ un’istruzione di salto assoluto condizionato. Quest’istruzione ha un effetto identico a quello dell’istruzione precedente ma a differenza di essa viene eseguita soltanto se la condizione cc espressa nell’istruzione risulta essere vera. Le condizioni sono espresse nella seguente tabella
JP NC,pq |
Esegui il salto se il flag di carry si trova a zero |
JP C, pq |
Esegui il salto se il flag di carry si trova ad uno |
JP NZ, pq |
Esegui il salto se il flag di zero si trova a zero |
JP Z, pq |
Esegui il salto se il flag di zero si trova ad uno |
|
|
|
|
|
|
|
|