{bmc micro.bmp} Contenuti						

Istruzioni di Assegnazione:			Istruzioni si Salto Condizionato:
	LD - Load					JRC -  Salta se C = 1
							JRNC -  Salta se C = 0
Istruzioni Aritmetiche e Logiche:			JRZ -  Salta se Z = 1
	ADD(I)						JRNZ -  Salta se Z = 0
	AND(I) - AND Logico				JRR -  Salta se bit = 0
	CLR - Azzera					JRS -  Salta se bit = 1
	COM - Complementa				
	CP(I) - Compara			Istruzioni di chiamata e Salto:
	DEC - Decrementa				JP - Salta
	INC - Incrementa				CALL - Chiama subroutine
	RLC - Ruota a SX attraverso C			RET - Ritornafda subroutine
	SLA - Shift a Sx l’accumulatore			RETI - Ritorna da interrupt
	SUB(I) - Sottazione			
						Istruzioni di Controllo:
Istruzioni di manipolazione di Bit:			NOP - No Operazione (Ritardo 2-cicli)
	SET - Setta il bit a 1				STOP - Stop Operazione
	RES - Setta il bit a 0				WAIT - Attesa processore

#$K+ {bmc micro.bmp} ADD(I) - Somma

Funzione:	Somma il Contenuto del Byte sorgente all’Accumulatore, lasciando il risultato nell’Accumulatore.
	
Esempio:	Se il registro nella locazione 22h contiene il valore 33h e l’Accumulatore il valore 20h,
Add A, 22h
Restituirà il risultato  53h nell’Accumulatore (33+20).	
Sintassi:

	Istruzione	Operazione	Modo di
Indirizzam.	Codice	Bytes	Cicli	Flag Z	Flag C	
	Add A, A	[A]+[A]A	diretto	5F FF	2	4	(1)	(2)	
	Add A, X	[A]+[X]A	diretto	5F 80	2	4	(1)	(2)	
	Add A, Y	[A]+[Y]A	diretto	5F 81	2	4	(1)	(2)	
	Add A, V	[A]+[V]A	diretto	5F 82	2	4	(1)	(2)	
	Add A, W	[A]+[W]A	diretto	5F 83	2	4	(1)	(2)	
	Add A, (X)	[A]+[[X]]A	indiretto	A7	1	4	(1)	(2)	
	Add A, (Y)	[A]+[[Y]]A	indiretto	AF	1	4	(1)	(2)	
	Add A, rr	[A]+[rr]A	diretto	5F rr	2	4	(1)	(2)	
	AddI A, #N	[A]+ #NA	immediato	57 #N	2	4	(1)	(2)	
(1) Flag Settato a 1 se il risultato è zero, altrimenti è Settato a 0.
(2) Flag Settato a 1 se il risultato produce  un resto(carry) , altrimenti è Settato a 0.
rr Indirizzo Spazio Dati (1 byte).
#N Dato Immediato (1byte).

#$K+ {bmc micro.bmp} AND(I) - AND Logico

Funzione:	Esegue un AND tra il contenuto del Registro sorgente e il valore dell’Accumulatore. 	
Esempio:	Se il Registro nella locazione 54h contiene il valore 11110000 e l’Accumulatore contiene il valore11001100, 
And A, 54h 
Restituirà il risultato11000000 nell’Accumulatore.	
Sintassi:

	Istruzione	Operazione	Modo di
Indirizzam.	Codice	Bytes	Cicli	Flag Z	Flag C	
	AND A, A	[A]& [ A]A	diretto	BF FF	2	4	(1)	N	
	AND A, X	[A]&[X]X	diretto	BF 80	2	4	(1)	N	
	AND A, Y	[A]&[Y]Y	diretto	BF 80	2	4	(1)	N	
	AND A, V	[A]&[V]V	diretto	BF 80	2	4	(1)	N	
	AND A, W	[A]&[W]W	diretto	BF 80	2	4	(1)	N	
	AND A, (X)	[A]&[[X]]A	indiretto	A7	1	4	(1)	N	
	AND A, (Y)	[A]&[[Y]]A	indiretto	AF	1	4	(1)	N	
	AND A, rr	[A]&[rr]A	diretto	BF rr	2	4	(1)	N	
	ANDI A, #N	[A]& #NA	immediato	B7 #N	2	4	(1)	N	
(1) Flag Settato a 1 se il risultato è zero, altrimenti è Settato a 0.
N Non modificato.
rr Indirizzo Spazio Dati (1 byte).
#N Dato Immediato (1byte).

#$K+ {bmc micro.bmp} CLR - Azzera

Funzione:	Setta  il valore specificato a 00.	
Esempio:	Per settare l’Accumulatore a  00: CLR A	
Sintassi:

	Istruzione	Operazione	Modo di
Indirizzam.	Codice	Bytes	Cicli	Flag Z	Flag C	
	CLR A	00A	diretto	DF FF	2	4	(1)	(3)	
	CLR X	00X	diretto	0D 80 00	3	4	N	N	
	CLR Y	00Y	diretto	0D 81 00	3	4	N	N	
	CLR V	00V	diretto	0D 82 00	3	4	N	N	
	CLR W	00W	diretto	0D 83 00	3	4	N	N	
	CLR rr	00r	diretto	0D rr 00	3	4	N	N	
(1) Flag Settato a 1 se il risultato è zero, altrimenti è Settato a 0.
(3) Flag Settato a 1.
N Non modificato.
rr Indirizzo Spazio Dati (1 byte).

#$K+ {bmc micro.bmp} COM - Complementa

Funzione:	Complementa ogni bit dell’Accumulatore.	
Esempio:	Se l’Accumulatore contiene il valore 10111001,
 COM A 
Cambierà il suo valore a  01000110 e setterà il flag di carry(resto).	
Sintassi:

	Istruzione	Operazione	Modo di
Indirizzam.	Codice	Bytes	Cicli	Flag Z	Flag C	
	COM A	no [A][A]	inerente	2D	1	4	(1)	(4)	
(1) Flag Settato a 1 se il risultato è zero, altrimenti è Settato a 0.
(4) 	Flag Settato a 1 Se il bit piu significativo(MSB) dell’Accumulatore conteneva 1 prima che l’istruzione COM fosse eseguita.

#$K+ {bmc micro.bmp} CP(I) - Compara

Funzione:	Compara il byte sorgente con quello contenuto nell’Accumulatore. Il valore specificato è sottratto dal valore dell’Accumulatore, ma il risultato NON è scritto nell’Accumulatore, solo i Flags Z e C sono modificati.
	
Esempio:	Se l’Accumulatore contiene il valore 11110000 e il Registro 34h contiene il valore 00011100,:
CP A, 34h
Setterà a 0 il Flag Z e setterà a 1 il Flag di carry.	
Sintassi:

	Istruzione	Operazione	Modo di
Indirizzam.	Codice	Bytes	Cicli	Flag Z	Flag C	
	CP A, A	[A]-[A]	diretto	3F FF	2	4	(1)	(5)	
	CP A, X	[A]-[X]	diretto	3F 80	2	4	(1)	(5)	
	CP A, V	[A]-[V]	diretto	3F 81	2	4	(1)	(5)	
	CP A, Y	[A]-[Y]	diretto	3F 82	2	4	(1)	(5)	
	CP A, W	[A]-[W]	diretto	3F 83	2	4	(1)	(5)	
	CP A, (X)	[A]-[[X]]	indiretto	27	1	4	(1)	(5)	
	CP A, (Y)	[A]-[[Y]]	indiretto	2F	1	4	(1)	(5)	
	CP A, rr	[A]-[rr]	diretto	3F rr	2	4	(1)	(5)	
	CPI A, #N	[A]- #N	immediato	37 #N	2	4	(1)	(5)	
(1) Flag Settato a 1 se il risultato è zero, altrimenti è Settato a 0.
(5) Flag Settato a 1 se [A]<[rr] o  [A]<[#N].  Settato a 0 se [A]>=[rr] o  [A]>=[#N].
rr Indirizzo Spazio Dati (1 byte).
#N Dato Immediato (1byte).

#$K+ {bmc micro.bmp} DEC - Decremento

Funzione:	Decrementa di 1 il valore specificato	
Esempio:	Per decrementare il valore dell’Accumulatore di 1:
DEC A	
Sintassi:

	Istruzione	Operazione	Modo di
Indirizzam.	Codice	Bytes	Cicli	Flag Z	Flag C	
	DEC X	[X]-1X	diretto corto	1D	1	4	(1)	N	
	DEC Y	[Y]-1Y	diretto corto	5D	1	4	(1)	N	
	DEC V	[V]-1V	diretto corto	9D	1	4	(1)	N	
	DEC W	[W]-1W	diretto corto	DD	1	4	(1)	N	
	DEC A	[A]-1A	diretto	FF FF	2	4	(1)	N	
	DEC rr	[rr]-1rr	diretto	FF rr	2	4	(1)	N	
	DEC [X]	[[X]]-1[[X]]	indiretto	E7	1	4	(1)	N	
	DEC [Y]	[[Y]]-1[[Y]]	indiretto	EF	1	4	(1)	N	
(1) Flag Settato a 1 se il risultato è zero, altrimenti è Settato a 0.
rr Indirizzo Spazio Dati (1 byte).

#$K+ {bmc micro.bmp} INC - Incremento

Funzione:	Incrementa di 1 il valore specificato.	
Esempio:	Per incrementare di 1 il valore dell’Accumulatore:
INC A	
Sintassi:

	Istruzione	Operazione	Modo di
Indirizzam.	Codice	Bytes	Cicli	Flag Z	Flag C	
	INC X	[X]-1X	diretto corto	15	1	4	(1)	N	
	INC Y	[Y]-1Y	diretto corto	55	1	4	(1)	N	
	INC V	[V]-1V	diretto corto	95	1	4	(1)	N	
	INC W	[W]-1W	diretto corto	D5	1	4	(1)	N	
	INC A	[A]-1A	diretto	7F FF	2	4	(1)	N	
	INC rr	[rr]-1rr	diretto	7F rr	2	4	(1)	N	
	INC [X]	[[X]]-1[[X]]	indiretto	67	1	4	(1)	N	
	INC [Y]	[[Y]]-1[[Y]]	indiretto	6F	1	4	(1)	N	
(1) Flag Settato a 1 se il risultato è zero, altrimenti è Settato a 0.
rr Indirizzo Spazio Dati (1 byte).

#$K+ {bmc micro.bmp} JRC, JRNC, JRZ, JRNZ, JRR, JRS 

Funzione:	Esegue un salto relativo del PC(Program Counter) se la condizione è soddisfatta.  JRC, JRNC, JRZ, JRNZ un salto compreso tra  PC - 15 e PC + 16.  JRR e JRS un salto compreso tra PC - 126 e PC + 129.  Altrimenti si può specificare un salto qualsiasi, è raccomandato di utilizzare un’etichetta.
	
Esempio:	Per saltare alla linea la cui etichetta è Prossimoc se Z = 0:
JRNZ Prossimoc
Se il bit 7 del dato nella locazione AFH è Settato a 1 e il PC = 123, l’istruzione:
JRS 7, AFH, +25
Cambia il  PC a 148 (123+25).	
Sintassi:

	Istruzione	Operazione	Modo di
Indirizzam.	Codice	Bytes	Cicli	Flag Z	Flag C	
	JRC e	se C = 1,
[PC]+ePC	N/A	e110	1	2	N	N	
	JRNC e	se C = 0,
[PC]+ePC	N/A	e010	1	2	N	N	
	JRZ e	se Z = 1,
[PC]+ePC	N/A	e100	1	2	N	N	
	JRNZ e	se Z = 0,
[PC]+ePC	N/A	e000	1	2	N	N	
	JRR b, rr, ee	se bit = 0,
[PC]+eePC	N/A	b00011rree	3	5	N	(7)	
	JRS b, rr, ee	se bit = 1,
[PC]+eePC	N/A	b10011rree	3	5	N	(7)	
e = Salto da PC - 15 fino a PC + 16 (bytes).
ee = Salto da PC - 126 fino a PC + 129 (bytes).
rr = Indirizzo Spazio Dati (1 byte).
(7) = Il valore del bitm testato è scritto sul Flag C.

#$K+ {bmc micro.bmp} JP, CALL, RET, RETI 

Funzione:	CALL salta alla routine specificata e scrive il prossimo indirizzo sullo stack.
JP salta all’etichetta specificata.
RET ritorna  alla procedura Chiamante(con CALL).
RETI ritorna da un interrupt e libera la masccheratura degli interrupt(rende cioè possibile la chiamata ad un altro interrupt.	
Esempio:	per saltare alla linea la cui etichetta è Prossimoc e poi ritornare alla linea successiva a CALL 
            CALL Prossimoc
Prossimoc   NOP
            RET	
Sintassi:

	Istruzione	Operazione	Modo di
Indirizzam.	Codice	Bytes	Cicli	Flag Z	Flag C	
	JP abc	abcPC	extended	c1001ab	2	4	N	N	
	CALL abc	[PC]stack,
abcPC	extended	c0001ab	2	4	N	N	
	RET	[stack]PC	inerente	CD	1	2	N	N	
	RETI	[stack]PC	inerente	4D	1	2	(6)	(6)	
(6) Disabilita i Flags di interrupt e abilita i Flags normali.
N Non modificato.

#$K+ {bmc micro.bmp} LD(I) - Assegna 

Funzione:	Carica un valore alla locazione specificata.
	
Esempio:	Se il Registro nella locazione 34h contiene il valore 45h, l’istruzione::
ld A, X
Carica il calore 45h nell’Accumulatore.	
Sintassi:

	Istruzione	Operazione	Modo di
Indirizzam.	Codice	Bytes	Cicli	Flag Z	Flag C	
	LD A,X	[X]A	diretto corto	35	1	4	(1)	N	
	LD A, Y	[Y]A	diretto corto	75	1	4	(1)	N	
	LD A, V	[V]A	diretto corto	B5	1	4	(1)	N	
	LD A, W	[W]A	diretto corto	F5	1	4	(1)	N	
	LD X, A	[A]X	diretto corto	3D	1	4	(1)	N	
	LD Y, A	[A]Y	diretto corto	7D	1	4	(1)	N	
	LD V, A	[A]V	diretto corto	BD	1	4	(1)	N	
	LD W, A	[A]W	diretto corto	FD	1	4	(1)	N	
	LD A, rr	rr[A]	diretto	1Frr	2	4	(1)	N	
	LD rr, A	[A]rr	diretto	9Frr	2	4	(1)	N	
	LD A, (X)	[[X]]A	indiretto	07	1	4	(1)	N	
	LD A, (Y)	[[Y]]A	indiretto	0F	1	4	(1)	N	
	LD (X), A	[A][[X]]	indiretto	87	1	4	(1)	N	
	LD (Y), A	[A][[Y]]	indiretto	8F	1	4	(1)	N	
	LDI A, #N	#N[A]	immediato	17 nn	2	4	(1)	N	
	LDI rr, #N	#N[rr]	immediato	0D rr nn	3	4	N	N	
(1) = Flag Settato a 1 se il risultato è zero, altrimenti è Settato a 0.
N = Non modificato.
rr = Indirizzo Spazio Dati (1 byte).
#N = Dato Immediato (1byte).

#$K+ {bmc micro.bmp} NOP , SOTP , WAIT

Funzione:	NOP Nessuna  Operazione. Permette di inserire un ritardo di due cicli.
STOP Ferma ogni Operazione.  Mette il Micro in Modo standby , in cui tutte le periferiche del Micre e l’oscillatore sono Stoppate.  Un interrupt esterno(NMI) o un reset riavviano il Micro.
WAIT Mette il Micro in Modo standby , in cui  l’esecuzione delle istruzione è fermata ma qualche periferica continua ad essere.  Un interrupt interno proveniente da una periferica attiva (come il Timer) e un interrupt esterno o un reset riavviano il Micro.  Riferirsi al Data sheet  del Micro utilizzato per conoscere le periferiche che rimangono attive dopo l’istruzione WAIT.
STOP e WAIT sono utilizzati per risparmiare energia in caso di alimentazione tramite batterie.	
Sintassi:

	Istruzione	Operazione	Modo di
Indirizzam.	Codice	Bytes	Cicli	Flag Z	Flag C	
	NOP	Nessuna	inerente	04	1	2	N	N	
	STOP	Stop processore	inerente	6D	1	2	N	N	
	WAIT	Attesar	inerente	ED	1	2	N	N	

#$K+ {bmc micro.bmp} SET, RES 

Funzione:	SET setta il bit specificato a 1.  RES setta il bit specificato a 0.
	
Esempio:	Se il registro 23h contiene 11111111, l’Istruzione:
RES 4,23h
Lo lascierà 11101111.	
Sintassi:
	Istruzione	Operazione	Modo di
Indirizzam.	Codice	Bytes	Cicli	Flag Z	Flag C	
	SET b,rr	set bit b,rr to 1	bit diretto	b110011rr	2	4	N	N	
	RES b,rr	set bit b,rr to 0	bit diretto	b010011rr	2	4	N	N	
b = indirizzo a 3-bit.
rr = Indirizzo Spazio Dati (1 byte).

#$K+ {bmc micro.bmp} RLC - Shift a Sinistra attraverso il flag C(carry)

Funzione:	Sposta ogni bit dell’Accumulatore di un posto a Sinistra.  Il contenuto del bit 7 (MSB) è posto nel flag C e il contenuto del flag Cè posto nel bit 0.	
Esempio:	Se l’Accumulatore contiene 10001001 e il flag C contiene 0 l’Istruzione:
RLC A
lascia l’accumulatore con il valore 00010010 e il flag C Settato a 1.	
Sintassi:

	Istruzione	Operazione	Modo di
Indirizzam.	Codice	Bytes	Cicli	Flag Z	Flag C	
	RLC A	CAC	inerente	AD	1	4	(1)	(4)	
(1) Flag Settato a 1 se il risultato è zero, altrimenti è Settato a 0.
(4) Flag Settato a 1 Se il bit t dell’Accumulatore conteneva 1 prima di eseguire l’istruzione RLC.

#$K+ {bmc micro.bmp} SLA - Shift a Sinistra dell’Accumulatore

Funzione:	Somma il contenuto dell’Accumulatore a se stesso ruotando di un posto a a sinistra tutti i bit.	
Esempio:	Se l’Accumulatore contiene il valore 11001101, l’Istruzione:
SLA A
lascia nell’Accumulatore il valore 10011010 e il flag C Settato a 1.	
Sintassi:

	Istruzione	Operazione	Modo di
Indirizzam.	Codice	Bytes	Cicli	Flag Z	Flag C	
	SLA A	CA0	inerente	5F FF	2	4	(1)	(4)	
(1) Flag Settato a 1 se il risultato è zero, altrimenti è Settato a 0.
(4) Flag Settato a 1 se il bit 7 dell’Accumulatore (MSB) conteneva 1 prima di eseguire listruzione SLA.

#$K+ {bmc micro.bmp} SUB(I) - Sottrazione

Funzione:	Sottrae il valore specificato del Accumulatore.
	
Esempio:	Per sotrtarre il valore puntato da X:
SUB A, (X)	
Sintassi:

	Istruzione	Operazione	Modo di
Indirizzam.	Codice	Bytes	Cicli	Flag Z	Flag C	
	SUB A, A	[A]-[A]A	diretto	DF FF	2	4	(1)	(5)	
	SUB A, X	[A]-[X]A	diretto	DF 80	2	4	(1)	(5)	
	SUB A, Y	[A]-[Y]A	diretto	DF 81	2	4	(1)	(5)	
	SUB A, V	[A]-[V]A	diretto	DF 82	2	4	(1)	(5)	
	SUB A, W	[A]-[W]A	diretto	DF 83	2	4	(1)	(5)	
	SUB A, (X)	[A]-[[X]]A	indiretto	C7	1	4	(1)	(5)	
	SUB A, (Y)	[A]-[[Y]]A	indiretto	CF	1	4	(1)	(5)	
	SUB A, rr	[A]-[rr]A	diretto	DF rr	2	4	(1)	(5)	
	SUBI A, #N	[A]- #NA	immediato	D7 #N	2	4	(1)	(5)	
(1) Flag Settato a 1 se il risultato è zero, altrimenti è Settato a 0.
(5) Flag Settato a 1 se [A]<[rr] o  [A]<[#N].  Settato a 1 se [A]>=[rr] o  [A]>=[#N].
rr Indirizzo Spazio Dati (1 byte).
#N Dato Immediato (1byte).