Ready64 Forum
Commodore 64 => Aiuto & Domande => Topic aperto da: giuseppe - 31 Luglio 2017, 13:32:36
-
Buongiorno, aono un nuovo iscritto da circa sei mesi, e questa e la prima volta che cerco di postare un argomento, a me interessante, poiche ho sempre desiderato programmare in linguaggio assembler 6502-6510 , e grazie a questo eccezionale sito, dove ho potuto scaricare materiale utile al mio scopo .adesso chiedo lumi su come risolvere un problema in assembler:
questo e il codice di cui non riesco a venirne fuori:
*=1000
Lda #$00 carico accumulatore con carattere @ (A=0)
Inc $0400 aggiungi 1 al valore contenuto nella locazione di memoria $400
Sta$0400 scarico nell’accumulatore A il valore (poke1024,0+1 ) mi dovrebbe dare se ben ho capito
Poke1024,1 e stampare la lettera a, ma mi da sempre @
Dove è l’errore , non andrò vanti, se prima non capisco questo problema
Rts restituisce controllo al monitor
scusate se sono stato lungo, è grazie anticipatamente
-
Buongiorno, aono un nuovo iscritto da circa sei mesi, e questa e la prima volta che cerco di postare un argomento, a me interessante, poiche ho sempre desiderato programmare in linguaggio assembler 6502-6510 , e grazie a questo eccezionale sito, dove ho potuto scaricare materiale utile al mio scopo .adesso chiedo lumi su come risolvere un problema in assembler:
questo e il codice di cui non riesco a venirne fuori:
*=1000
Lda #$00 carico accumulatore con carattere @ (A=0)
Inc $0400 aggiungi 1 al valore contenuto nella locazione di memoria $400
Sta$0400 scarico nell’accumulatore A il valore (poke1024,0+1 ) mi dovrebbe dare se ben ho capito
Poke1024,1 e stampare la lettera a, ma mi da sempre @
Dove è l’errore , non andrò vanti, se prima non capisco questo problema
Rts restituisce controllo al monitor
scusate se sono stato lungo, è grazie anticipatamente
Se leggo bene, tu incrementi il valore alla locazione $400, ma l'accumulatore resta al valore precedente. Il successivo STA mette il valore dell'accumulatore in $400 (poke1024,0).
Se, non ricordo male , non puoi incrementare l'accumulatore, ma devi sommare con una locazione di memoria..
-
ancora ahime non ne vengo a capo, ma la logica e chiara ma il monitor , mi da sempre (@ - 1024,0) e non ( 1024,1) che 1 sarebbe l'incremeto.
io vorrei aggiungere 1 al contenuto della loc.1024 ) pertanto se prima era 1024,0, dopo l'incremento dovrebbe darmi 1025,1
leggo nell'istruzione del libro, " Commodore 64 i segreti del linguaggio macchina pagina 47 ultimo rigi" puttroppo non fa alcun esempio, le testuale parole:
inc$ aggiunge uno al valore contenuto in una determinata locazionen di memoria, non mi dice di incrementare la locazione
chiedo
-
A parte la macchinosità logica, come minimo dovresti notare che è errato l'ordine delle operazioni. Per intenderci, è come se in BASIC scrivessi:
LDA #$00 ; 10 A=0
INC $0400 ; 20 POKE 1024,(PEEK(1024)+1) AND 255
STA $0400 ; 30 POKE 1024,A
RTS ; 40 END
per cui l'ultima POKE (in cui A vale ancora 0) sovrascrive il valore precedentemente incrementato di 1 (senza sapere cosa ci fosse, peraltro).
Se inverti la STA e la INC ottieni che il valore finale è 1 (perché incrementi lo 0 dopo averlo memorizzato).
-
funziona perfettamente, invertendo lo sta con inc come gentilmente da te consigliato.
, pero adesso sono un po confuso. perche
pensavo che inc non avesse effetto su sta in quanto inc è l'ultimo mnemonico ad
essere eseguito. puoi per favore delucidarmi su questo
grazie molto . devo studiare di piu :)
-
io vorrei aggiungere 1 al contenuto della loc.1024 ) pertanto se prima era 1024,0, dopo l'incremento dovrebbe darmi 1025,1
Non capisco bene, vuoi incrementare il contenuto o anche la locazione? Hai scritto :
1024,0 e dopo 1025,1..........
Se vuoi incrementare solo il contenuto di $400, basta INC $400, STA $400, non serve.
-
chiedo scusa :) erroneamente scritta 1025,1 - volevo scrivere 1024,1-
Si volevo solo incrementare il contenuto. e come mi aveva consogliato eregil,
funziona perfettamente. comunque rileggendo quello che eregil ha scritto, ho capito il meccanismo, grazie lo stesso