* * * Z80 SIMULATION v3.00 (Freeware) * * * | |
Istruzioni di SALTO |
3.30 CALL VAL16
SINTASSI: CALL VAL16
Dove VAL16 è una costante a 16 bit (in generale si tratta di una label).
SCOPO: Chiamare il sottoprogramma che si trova all'indirizzo VAL16.
(SP-1) ¬ PC_alto
(SP-2) ¬ PC_basso
SP ¬ SP - 2
PC ¬ VAL16
FLAG: | S |
Z |
H |
P/V |
N |
C |
· |
· |
· |
· |
· |
· |
NOTE: In Z80 Simulation la costante VAL16 non è un indirizzo di memoria, bensì un numero di linea. Si consiglia perciò, di utilizzare sempre le label, almeno in quei casi che sia possibile.
ESEMPI:
; QUESTO PROGRAMMA CARICA IN OGNI
;BYTE DEL BUFFER CHE SI TROVA
; AGLI INDIRIZZI #F000 ÷ #F050 IL
; VALORE #E5
BUFF EQU #F000
VALUE EQU #E5
ORG #B000
LD HL,BUFF
LD C,#51
LOOP CALL CARICA
JR NZ,LOOP
HALT
; ROUTINE DI CARICAMENTO DI UN BYTE
ORG #BF00
CARICA LD (HL),VALUE
INC HL
DEC C
RET
3.31 CALL CC,VAL16
SINTASSI: CALL CC,VAL16
Dove VAL16 è una costante a 16 bit (in generale si tratta di una label), mentre CC è una delle condizioni: NZ, Z, NC, C, PO, PE, P, M.
SCOPO: Se la condizione CC è vera, chiamare il sottoprogramma che si trova all'indirizzo VAL16.
Se CC è vera:
(SP-1) ¬ PC_alto
(SP-2) ¬ PC_basso
SP ¬ SP - 2
PC ¬ VAL16
FLAG: | S |
Z |
H |
P/V |
N |
C |
· |
· |
· |
· |
· |
· |
NOTE: Vedi la nota dell'istruzione precedente.
ESEMPI:
;QUESTO PROGRAMMA COPIA I BYTE
;CON PARITA' PARI NEL BUFFER
;ALL'INDIRIZZO #2000, MENTRE I
;BYTE CON PARITA' DISPARI
;ALL'INDIRIZZO #3000. I DATI SONO
;LETTI DALLA PORTA DI INPUT #35
PORTA EQU #35
BPARI EQU #2000
BDISP EQU #3000
ORG #1000
LD C,PORTA
LD HL,BPARI
LD DE,BDISP
LOOP IN A,(C)
CALL PE,MPARI
CALL PO,MDISP
JR LOOP
;MEMORIZZA DATI CON PARITA' PARI
MPARI LD (HL),A
INC HL
RET
;MEMORIZZA DATI CON PARITA'
;DISPARI
MDISP LD (DE),A
INC DE
RET
3.46 DJNZ VAL8
SINTASSI: DJNZ VAL8
Dove VAL8 è una costante a 8 bit in complemento a 2.
SCOPO: Drecrementare il registro B. Se dopo il decremento il risultato non è 0, saltare in modo relativo.
B ¬ B - 1
Se B<>0
PC ¬ PC + VAL8
FLAG: | S |
Z |
H |
P/V |
N |
C |
· |
· |
· |
· |
· |
· |
ESEMPI:
LD B,100
LOOP LD (DE),A
INC DE
DJNZ LOOP
3.63 JP VAL16
SINTASSI: JP VAL16
Dove VAL16 è una costante a 16 bit (in generale si tratta di una label).
SCOPO: Saltare all'istruzione che si trova all'indirizzo VAL16.
PC ¬ VAL16
FLAG: | S |
Z |
H |
P/V |
N |
C |
· |
· |
· |
· |
· |
· |
NOTE: In Z80 Simulation la costante VAL16 non è un indirizzo di memoria, bensì un numero di linea. Si consiglia perciò, di utilizzare sempre le label, almeno in quei casi in cui sia possibile.
3.64 JP CC,VAL16
SINTASSI: JP CC,VAL16
Dove VAL16 è una costante a 16 bit (in generale si tratta di una label), mentre CC è una delle condizioni: NZ, Z, NC, C, PO, PE, P, M.
SCOPO: Se la condizione CC è vera, saltare all'istruzione che si trova all'indirizzo VAL16.
Se CC è vera:
PC ¬ VAL16
FLAG: | S |
Z |
H |
P/V |
N |
C |
· |
· |
· |
· |
· |
· |
ESEMPI:
NOTE: Vedi la nota dell'istruzione precedente.
3.65 JP (REG16)
SINTASSI: JP (REG16)
Dove REG16 rappresenta i registri HL, IX, IY.
SCOPO: Saltare all'istruzione che si trova all'indirizzo contenuto nel registro REG16.
PC ¬ REG16
FLAG: | S |
Z |
H |
P/V |
N |
C |
· |
· |
· |
· |
· |
· |
ESEMPI:
NOTE: In Z80 Simulation il registro REG16 deve contenere un numero di linea.
3.66 JR VAL8
SINTASSI: JR VAL8
Dove VAL8 è una costante a 8 bit in complemento a 2.
SCOPO: Saltare in modo relativo.
PC ¬ PC + VAL8
FLAG: | S |
Z |
H |
P/V |
N |
C |
· |
· |
· |
· |
· |
· |
NOTE: In Z80 Simulation VAL8 non rappresenta lo spostamento in byte, bensì lo spostamento in righe. Si noti che se si specifica una label l'esecutore non salta avanti o indietro di un numero di righe pari al valore della label, ma salta alla linea in cui si è definita la label.
3.67 JR CC,VAL8
SINTASSI: JR CC,VAL8
Dove VAL8 è una costante a 8 bit in complemento a 2, mentre CC è una delle condizioni: NZ, Z, NC, C.
SCOPO: Se la condizione CC è vera, saltare in modo relativo.
Se CC è vera:
PC ¬ PC + VAL8
FLAG: | S |
Z |
H |
P/V |
N |
C |
· |
· |
· |
· |
· |
· |
NOTE: Vedi la nota dell'istruzione precedente.
3.105 RET
SINTASSI: RET
SCOPO: Ritornare da un sottoprogramma. La prossima istruzione ad essere eseguita è quella successiva alla CALL che ha fatto la chiamata.
PC_basso ¬ (SP)
PC_alto ¬ (SP+1)
SP ¬ SP + 2
FLAG: | S |
Z |
H |
P/V |
N |
C |
· |
· |
· |
· |
· |
· |
3.106 RET CC
SINTASSI: RET CC
Dove CC è una delle condizioni: NZ, Z, NC, C, PO, PE, P, M.
SCOPO: Se la condizione è vera, ritornare da un sottoprogramma. La prossima istruzione (sempre se la condizione è vera) ad essere eseguita è quella successiva alla CALL che ha fatto la chiamata.
Se CC è vera:
PC_basso ¬ (SP)
PC_alto ¬ (SP+1)
SP ¬ SP + 2
FLAG: | S |
Z |
H |
P/V |
N |
C |
· |
· |
· |
· |
· |
· |
3.107 RETI
SINTASSI: RETI
SCOPO: Ritornare dalla routine di gestione dell'interrupt. La prossima istruzione eseguita è quella successiva a quella in cui lo Z80 ha accettato l'interruzione.
PC_basso ¬ (SP)
PC_alto ¬ (SP+1)
SP ¬ SP + 2
FLAG: | S |
Z |
H |
P/V |
N |
C |
· |
· |
· |
· |
· |
· |
NOTE: Il codice macchina della RETI è riconosciuto dai periferici come parte finale di una routine d'interrupt. In Z80 Simulation questa istruzione si comporta come una normale RET.
3.108 RETN
SINTASSI: RETN
SCOPO: Ritornare dalla routine di gestione dell'interrupt non mascherabile. La prossima istruzione eseguita è quella successiva a quella in cui lo Z80 ha accettato l'interruzione.
PC_basso ¬ (SP)
PC_alto ¬ (SP+1)
SP ¬ SP + 2
IFF1 ¬ IFF2
FLAG: | S |
Z |
H |
P/V |
N |
C |
· |
· |
· |
· |
· |
· |
NOTE: In Z80 Simulation questa istruzione si comporta come una normale RET.
3.122 RST VAL8
SINTASSI: RST VAL8
Dove VAL8 è uno dei seguenti valori: #00, #08, #10, #18, #20, #28, #30, #38.
SCOPO: Chiamare il sottoprogramma che si trova all'indirizzo di memoria VAL8.
(SP-1) ¬ PC_alto
(SP-2) ¬ PC_basso
SP ¬ SP - 2
PC_alto ¬ 0
PC_basso ¬ VAL8
FLAG: | S |
Z |
H |
P/V |
N |
C |
· |
· |
· |
· |
· |
· |
ESEMPI:
NOTE: In Z80 Simulation, questa istruzione non ha alcun effetto, poiché è quasi sempre utilizzata per gestire le interruzioni.