* * * 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.