Autore Topic: Programmare In Assembler Da Dove Cominciare?  (Letto 14799 volte)

jumpjack

  • Neo-iscritto
  • *
  • Post: 22
  • Gioco Preferito: Tuono Blu
Programmare In Assembler Da Dove Cominciare?
« Risposta #30 il: 05 Novembre 2008, 09:04:22 »
Citazione da: "jumpjack"

boh, veramente mi pareva di aver anche provato con poke 1000,1 ed era venuta una A in alto a sinistra, ma ho fatto duemila prove, magari mi so' confuso...  :stordita:

 
cavolo, è vero... ma allora dove ho scritto?!? cosa c'e' nella locazione 1000??  :huh:
mah.
 

Raffox

  • Administrator
  • Utente
  • *****
  • Post: 714
    • http://www.raffox.com
  • Gioco Preferito: Moonshadow (Idea)
Programmare In Assembler Da Dove Cominciare?
« Risposta #31 il: 05 Novembre 2008, 11:55:20 »
 
Citazione da: "mces"
Sono veramente spiacente che il mio stile di comunicare risulti irritante, me ne spiaccio, anche se non riesco a decodificarne il motivo
Hmmm... sei veramente spiacente e te ne spiacci. OK! Figo!

Se non riesci a 'decodificare' (??) il motivo adesso ti aiuto io, ma considera questo mio post l'ultimo rivolto a te perchè non ho nè il tempo nè più la voglia di seguire le tue prese di posizione.

In due parole: se, a chi ne fa richiesta, un utente offre un consiglio e succede che tu non lo reputi compatibile al tuo modus operandi, sei CORTESEMENTE pregato di non demolire l'opinione altrui, tantomeno fare inutili e fastidiose pressioni su fattori che tu, e solo tu, consideri come migliore via d'apprendimento.

Ai presenti può non fregare quale libro, suocera (fai anche del triste spirito) o editor sia consigliato. La scelta rimane, grazie a Dio, personalissima e dettata unicamente dai propri gusti. Possono risultare utili i consigli di tutti, tanto i tuoi quanto i miei. Nello specifico se tu hai avuto il piacere di studiare su un libro per istituti tecnici e te la senti di proporlo a chi vuole iniziare, ben venga la tua dritta.
Lascia però spazio anche ai consigli di altri utenti, che una certa esperienza (forse) ce l'hanno... Non vado oltre per non infierire.

In questo mondo non esisti solo tu e il tuo testo ITIS.

mces

  • Utente
  • **
  • Post: 339
  • Gioco Preferito: fort apocalypse
Programmare In Assembler Da Dove Cominciare?
« Risposta #32 il: 05 Novembre 2008, 12:22:37 »
 Innanzi tutto grazie per aver indicato le cose che di me infastidiscono, anche io oltre questo post non scriverò a riguardo e se riterrò il caso di comunicare ulteriormente a proposito con qualcuno lo farò in privato perchè di questo tema credo che freghi veramente poco agli altri....
Ho sempre ritenuto la mia e le altre opinioni di pari livello, ciò non toglie che io possa avere anche opinioni sulle opinioni altrui (e gli altri sulle mie!), ed è per questo che cerco di mettere sul piatto anche gli argomenti che mi hanno portato a farmi quell'opinione, in modo da poterle mettere alla prova degli altri.

Ritengo che se un neofita che vuole imparare ad eseguire processi di SINTESI inizia un cammino formativo autodidatta di ANALISI, per me sbaglia.
Ho già detto il mio pensiero a riguardo e non mi sembra che mi siano state date motivazioni contrarie sufficienti a riconsiderare la mia tesi.

La richiesta iniziale è stata discussa nei vari post in maniera molto variegata, ora sarà il buon senso del richiedente a formarsi un'idea a proposito, calzante con la propria situazione personale, e proseguire (o meno) per la strada che riterrà più opportuna senza che nessuno abbia ad offendersene.

Il mio spirito può non piacere, ma non possimo neanche escludere che un'esperta softwerista abbia un genero interessato all'assembly!!!

 
Non esistono problemi, solo soluzioni.

jumpjack

  • Neo-iscritto
  • *
  • Post: 22
  • Gioco Preferito: Tuono Blu
Programmare In Assembler Da Dove Cominciare?
« Risposta #33 il: 05 Novembre 2008, 13:51:14 »
 che noia, quand'e' che si ricomincia a parlare di programmazione?

mces

  • Utente
  • **
  • Post: 339
  • Gioco Preferito: fort apocalypse
Programmare In Assembler Da Dove Cominciare?
« Risposta #34 il: 05 Novembre 2008, 14:30:38 »
 Hai ragione jumpjack,
allora visto che qualcuno aveva detto di non aver capito bene cosa fossero i FLAGs....

I FLAGs (bandierine) sono dei singoli BIT che hanno uno spcefico significato e che vengono modificati da alcune operazioni e consultati da altre, rappresentano la memoria di stato del processo.

Un esempio?
Prendiamo in esame come il controllore confronta tra loro due numeri (CMP), ebbene semplicemente li sottrae nell'ALU e pone a "1" il FLAG "Z" (flag deputato ad indicare un risultato uguale a zero), se vuoi che in questo caso il processo devi dalla sua linea saltando ad un altro punto del programma allora puoi mettere l'istruzione di salto condizionato BEQ (Branch on EQual) che salta se il FLAG di Z è settato ad indicare una comparazione tra due entità uguali, se vuoi il contrario metti l'istruzione BNE (Branch on Not Equal).
La cosa interessante è che il FLAG "Z" è settato anche da altre istruzioni così se trovi

LDA# 00h
BNE pippo

l'istruzione LDAimmediato zero caricherà in A il valore zero, questo setterà il flag Z che indica pure ugualianza, e quindi NON salterà a "pippo",
se il valore caricato fosse diverso da zero allora salterebbe a "pippo" perchè il flag di Z sarebbe resettato dall'operazione di caricamento.
Hai appena visto come il caricamento di un valore in una variabile porta a cambiare la strada del processo in maniera sintetica (buona programmazione) ma criptica.

Se ho scritto imprecisioni posso dire a parziale scusa che saranno circa 3 lustri che non programmo il 6510....
Non esistono problemi, solo soluzioni.

jumpjack

  • Neo-iscritto
  • *
  • Post: 22
  • Gioco Preferito: Tuono Blu
Programmare In Assembler Da Dove Cominciare?
« Risposta #35 il: 05 Novembre 2008, 14:50:41 »
Citazione da: "mces"
Hai ragione jumpjack,
allora visto che qualcuno aveva detto di non aver capito bene cosa fossero i FLAGs....

I FLAGs (bandierine) sono dei singoli BIT che hanno uno spcefico significato e che vengono modificati da alcune operazioni e consultati da altre, rappresentano la memoria di stato del processo.

Un esempio?
Prendiamo in esame come il controllore confronta tra loro due numeri (CMP), ebbene semplicemente li sottrae nell'ALU e pone a "1" il FLAG "Z" (flag deputato ad indicare un risultato uguale a zero), se vuoi che in questo caso il processo devi dalla sua linea saltando ad un altro punto del programma allora puoi mettere l'istruzione di salto condizionato BEQ (Branch on EQual) che salta se il FLAG di Z è settato ad indicare una comparazione tra due entità uguali, se vuoi il contrario metti l'istruzione BNE (Branch on Not Equal).
La cosa interessante è che il FLAG "Z" è settato anche da altre istruzioni così se trovi

LDA# 00h
BNE pippo

l'istruzione LDAimmediato zero caricherà in A il valore zero, questo setterà il flag Z che indica pure ugualianza, e quindi NON salterà a "pippo",
se il valore caricato fosse diverso da zero allora salterebbe a "pippo" perchè il flag di Z sarebbe resettato dall'operazione di caricamento.
Hai appena visto come il caricamento di un valore in una variabile porta a cambiare la strada del processo in maniera sintetica (buona programmazione) ma criptica.

Se ho scritto imprecisioni posso dire a parziale scusa che saranno circa 3 lustri che non programmo il 6510....
mi sa che sei "troppo avanti" per il Naufr4g0, non credo che sappia cos'e' l'ALU, che "vuol dire" CMP e BEQ,  "chi è" A e che c'entra pippo.  ;)

Dobbiamo aspettare che faccia lui le domande... o partire proprio da zero-zero, tipo:
"Un programma in assembly è una sequenza di comandi, detti anche MNEMONICI, perche' sono abbreviazioni (come LDA, STA, BEQ), ognuna delle quali corrisponde a un numero da 1 a 255, numeri che il computer interpreta come istruzioni. Ma siccome per noi umani lavorare coi numeri è difficile, ad ogni numero è stato associato uno "mnemonico".

In assembly, a volte chiamato anche impropriamente Linguaggio Macchina e abbreviato in LM, non esistono istruzioni complicate: puoi lavorare solo su singoli byte, e molto spesso si lavora sui singoli bit, accendendoli, spegnendoli o leggendoli, e agendo di conseguenza. Quindi non esiste l'istruzione VARIABILE1 = VARIABILE2 + 7, anzi, nn esistono proprio le variabili: nel 6502 esistono solo tre "cose" simili a variabili, chiamate RegistroX, RegistroY e Accumulatore (A), e tutte le operazioni devono passare attraverso almeno uno di questi REGISTRI.

Per esempio, per memorizzare il valore 1 nella posizione di memoria $400, devi scrivere:
LDA #$01
STA $400

Cioe':
LoaD into Accumulator value $01  (# indica che è un valore, $ che è esadecimale; senza "#" sarebbe l'indirizzo di un byte in memoria)
STore Accumulator into location $400

Ecco fatto, hai scritto una A in alto a sinistra sullo schermo!

Per vederlo concretamente, devi scrivere questo programma nella memoria cel c64: l'istruzione POKE locazione, numero inserisce appunto un numero in una locazione di memoria.
Siccome "LDA  numero" corrisponde al numero xxx, e "STA locazione" corrisponde al numero yyy, per memorizzare questo microprogramma in memoria dovrai memorizzare questi numeri in fila:
xxx
1
yyy
00
04

I valori di xxx e yyy non me li ricordo, e non mi ricordo nemmeno se $0400 si memorizza come 00 04 o 04 00....  :huh:

Cmq, una volta scoperti, per memorizzare il programma si fa:
poke 49152,xxx
poke 49153,1
poke 49154,yyy
poke 49155,0
poke 49156,4

sys 49152

Naturalmente, per programmi piu' complicati bisognerà usare un ASSEMBLER...

jumpjack

  • Neo-iscritto
  • *
  • Post: 22
  • Gioco Preferito: Tuono Blu
Programmare In Assembler Da Dove Cominciare?
« Risposta #36 il: 05 Novembre 2008, 14:56:04 »
 Ah, ecco un assembler online:
http://e-tradition.net/bytes/6502/assembler.html

Con la calcolatrice di windows calcoli quanto valgono $a9 e $8d (e anche $60, il codice di RTS, l'istruzione che va messa alla fine di ogni programma), per cui diventa:

poke 49152,169
poke 49153,1
poke 49154,141
poke 49155,0
poke 49156,4
poke 49157,96

sys 49152
 

Naufr4g0

  • Neo-iscritto
  • *
  • Post: 20
  • Gioco Preferito: Impossible Mission
Programmare In Assembler Da Dove Cominciare?
« Risposta #37 il: 05 Novembre 2008, 16:23:58 »
 Perciò io ho già scaricato il Turbo Assembler.
Quindi preferisco saltare direttamente questa programmazione ML dall'ambiente Basic. :)
Tra l'altro ho pure il monitor della Final Cartdridge III, che cmq è più comodo.
Per quanto riguarda i registri ho già visto come funzionano, e ho già fatto qualche prova con scritture di caratteri a schermo e qualche cosa con gli sprite.
I flag sto invece capendo a cosa servono, ma richiedono un po' più del tempo che ci sto dedicando per ora per apprendere bene il loro funzionamento.
Cmq ringrazio tutti quelli che mi stanno dando suggerimenti su questo thread.
Tenterò naturalmente un approccio al problema nel modo che sarà a me più congeniale, devo infatti evitare di vedere l'apprendimento dell'assembly come uno studio, altrimenti mi viene a noia e abbandono tutto.. :/ Quindi preferisco un approccio sia teorico che pratico allo stesso tempo, cosicchè possa vedere subito i risultati dei miei sforzi.
Un po' come uno scolaretto che studia con gioco.. eheeh
Ricordo che queste cose non mi serviranno alla professione.
Posterò qui i dubbi che via via mi verranno.

mces

  • Utente
  • **
  • Post: 339
  • Gioco Preferito: fort apocalypse
Programmare In Assembler Da Dove Cominciare?
« Risposta #38 il: 05 Novembre 2008, 17:28:47 »
 Sulla rete si trova di tutto, per fortuna!
 forse  ti potrebbe interessare questo
http://www.geocities.com/oneelkruns/asm1step.html
che, in inglese, offre anche definizioni ed esempi di cosa siano i FLAGs e di come interagiscono con il codice.
Per capire il concetto dei FLAGs ricorda che essi sono la memoria INTERNA che rappresenta in tempo reale lo stato della macchina-processore e che quindi è influenzato dalle istruzioni che il 6510 esegue e le stesse istruzioni possono accedere a queste informazioni ad es. per condizionare salti, eseguire riporti in operazioni matematiche, e quant'altro.

 
Non esistono problemi, solo soluzioni.

mces

  • Utente
  • **
  • Post: 339
  • Gioco Preferito: fort apocalypse
Programmare In Assembler Da Dove Cominciare?
« Risposta #39 il: 13 Novembre 2008, 08:15:43 »
 Scusate se rianimo una discussione ormai "fredda", ma credo che la si possa chiudere in bellezza dando notizia del libro già citato su questi post e ora disponibile per il download:

http://ready64.org/libri/scheda_libro.php?id_libro=35

Credo che una lettura anche non approfondita possa almeno orientare chi vuole annusare più da vicno un pò di linguaggio macchina.
Non esistono problemi, solo soluzioni.

jumpjack

  • Neo-iscritto
  • *
  • Post: 22
  • Gioco Preferito: Tuono Blu
Programmare In Assembler Da Dove Cominciare?
« Risposta #40 il: 13 Novembre 2008, 08:50:46 »
Citazione da: "mces"
Scusate se rianimo una discussione ormai "fredda", ma credo che la si possa chiudere in bellezza dando notizia del libro già citato su questi post e ora disponibile per il download:

http://ready64.org/libri/scheda_libro.php?id_libro=35

Credo che una lettura anche non approfondita possa almeno orientare chi vuole annusare più da vicno un pò di linguaggio macchina.
Forte questa raccolta di libri, mica l'avevo vista!
 

pippo79

  • Utente
  • **
  • Post: 315
    • http://www.michelangelocarbonara.it
  • Gioco Preferito: last ninja 2
Programmare In Assembler Da Dove Cominciare?
« Risposta #41 il: 13 Novembre 2008, 22:39:54 »
 
Citazione da: "mces"
LDA# 00h
BNE pippo



Che, qualcuno mi ha chiamato?