vuoi
o PayPal
tutte le volte che vuoi
Codici operativi comuni:
Mnemonico Codice Operativo Semantica Indirizzamento
LDA #n A9 A←n Immediato
LDA i AD A←mem[i] Assoluto
LDA z A5 A←mem[z] Pagina 0
NOP EA - Implicito
STAi 8D mem[i]←A Assoluto
STAz 85 mem[z]←A Pagina 0
←A
mem[mem[z]]
STA (z) 92 Indiretto pagina 0
JMP i 4C PC←i Assoluto
JMP (i) 6C PC←mem[i] Indiretto
Operazioni Aritmetiche comuni:
Mnemonico Codice Operativo Semantica Indirizzamento
ADC #n 69 A←A+n+C Immediato
ADC i 6D A←A+mem[i]+C Assoluto
ADC z 65 A←A+mem[z]+C Pagina 0
CLC 18 C←0 Implicito
INA 1A A←A+1 Implicito
Esercizi(6502–(Spiegati
Considerazioni(generali:
!"(se"non"speci+icato)"la"pagina"01"è"occupata"dal"programma"di"partenza,"la"pagina"02"è"
occupata"per"far"funzionare"il"monitor,"si"incomincia"quindi"col"programma"dalla"pagina"03"
all'indirizzo"“0300”"(la"ROM"è"nelle"ultime"pagine)
!"(se"non"speci+icato)"le"variabili"del"programma"vanno"messe"in"fondo"alla"pagina"utilizzata."
Se"si"utilizza"la"pagina"03,"le"variabili"vanno"messe"in"“03FF”"poi"in"“03FE”"etc...)
ES:(1)(Somma(fra(numeri(
Assembly
I LDA 03FF Carico nel registro A il valore preso dall'indirizzo “03FF”
CLC Metto a zero il flag C (carry) per essere sicuro che non sia 1
Sommo il valore in “03FE” con il valore contenuto nel registro A e con
ADC 03FE il C. Metto il risultato nel registro A
STA 03FD Prendo il valore dal registro A e lo metto in 03FD
L JMP L Salta all'indirizzo L (Termina il programma)
0300 AD LDA
0301 FF 03FF
0302 03
0303 18 CLC
0304 60 ADC
0305 FE 03FE
0306 03
0307 8D STA
0308 FD 03FD
0309 03
030A 4C JMP
030B 0A 030A
030C 03
ES:(2)(Valore(assoluto
Assembly
I LDA 03FF Carico nel registro A il valore preso dall'indirizzo “03FF”
BPL P Salta a P quando il valore contenuto in A è positivo (bit più significativo = 0)
EOR #FF EXOR di A con FF → restituisce il complemento a 2 del valore in A
INA Aumento di 1 il valore in A
P STA 03FE Carico il valore da “03FE” nel registro A
E BRA E Salta all'indirizzo E (simile a JMP, ma consuma meno risorse)
Linguaggio macchina
0300 AD LDA
0301 FF 03FF
0302 03
0303 10 BPL
0304 03 08 – 05 = 03 (08 punto in cui saltare, 05 punto da cui parto)
0305 49 EOR
0306 FF #FF
0307 1A INA
0308 8D STA
0309 FE 03FE
030A 03
030B 80 BRA
030C FE FE = -2 → il BRA salterà in dietro di 2 unità ( 030D – 2 = 030B )
030D
ES:(3)
Assembly
I LDA FF00 Leggo il numero k nella cella “0100”
BMI N Se il valore in A è negativo, salta ad N ( negativo = il bit più significativo è 1 )
ASL Shift left → moltiplica per 2 il valore in A
CLC Svuota il C (Carry = 0)
ADL #5 Somma il valore in A, 5 e il C → mette il risultato in A
STA FF10 Salva il risultato in FF10
RTS Ritorna al sottoprogramma (continua con altre istruzioni)
N ASL
CLC
ADL #5
EOR #FF Applica il complemento a 2 in A
CLC
ADC #1 Somma 1 al valore in A
STA FF10
RTS
Linguaggio macchina
0100 AD LDA
0101 00 FF00
0102 FF
0103 30 BMI
0104 08 0D – 05 = 08 (0D = 13, 0D arrivo, 05 partenza)
0105 0A ASL
0106 18 CLC
0107 69 ADL
0108 05 #5
0109 8D STA
010A 10 FF10
010B FF
010C 60 RTS
010D 0A ASL
010E 18 CLC
010F 69 ADL
0110 05 #5
0111 49 STA
0112 FF #FF
0113 18 CLC
0114 69 ADC
0115 01 #1
0116 8D STA
0117 10 FF10
0118 FF
0119 60 RTS