Newsgroup: it.comp.programmare
Titolo: Assembly 68000

Sono agli inizi e si capir� dalla domanda che far�...
Ho questo codice da alcuni appunti:
            org $3100
            move.w data,d0
            add.w  d0,d0
loop       bra loop
            org $3200
data       dc.w 4
Come sposto "data"(che se ho capito bene mi rappresenta l'indirizzo di 
memoria in cui abbiamo l'istruzione dc.w 4)  in in d0 se viene 
dichiarata dopo nel codice?
-- 
Bonus di 25 euro su 
betfair.it
, codice da inserire: AAAACGWFG
Vai sul mio sito(in fondo alla pagina) per altri dettagli:
http://digilander.libero.it/maxxam99/

 valore del simbolo data ) che nel tuo caso specifico e' $3200
Se invece fosse stato move.w data,a0 avrebbe spostato l'indirizzo?
Grazie per l'aiuto!


 
P.S. devo decidermi a montarmi una scheda prototipo col 68000 visto che 
me ne avanzano un paio :-)

 me ne avanzano un paio :-)
Noi all'universit� li vediamo solo sul simulatore :-P


 me ne avanzano un paio :-)
Noi all'universit� li vediamo solo sul simulatore :-P


 
IDEM , tutto il resto e' venuto con i miei sforzi, comunque  non e' 
sempre cosi'

 sempre cosi'
Grazie per i consigli, il ng mi pare un po' morto, ma tu resta qui eh, 
che in futuro mi sa che mi sarai ancora utile! :-P


 esempi sparsi e cercando qualcosa in rete.
Guarda: tutti gli assembly sono uguali.
In base al processore (e quindi al set di istruzioni) devi solo
verificare
a) quanti registri ci sono
b) che capacita' hanno i registri
c) quanta memoria riesci ad indirizzare
d) qual e' l'istruzione per caricare in un certo registro un certo
valore
e) qual e' l'istruzione per caricare in un certo registro il valore di
un indirizzo
f) qual e' l'istruzione per caricare in un certo indirizzo un certo
valore
g) qual e' l'istruzione per caricare in un certo indieizzo il valore
di un registro
h) quali sono le istruzioni di somma, and, or, xor, etc...
i) quali sono le istruzioni per i salti condizionati
j) eventuali istruzioni specifiche di quel processore
E con queste puoi fare tutto!
Nessuno ti chiedera' mai di scrivere codice ottimizzato quindi alla
peggio potresti anche ignorare i registri e usare sempre indirizzi di
memoria per le variabili.
Eventualmente puoi decidere a priori che tipo di filosofia usare per
passare parametri alle subroutine, se un sistema piu' assembly
oriented, basato sui registri, o se adottare un sistema C like e
passare le variabili tramite stack.

 memoria per le variabili.
Se non fosse che per molte ISA non puoi operare direttamente nella
memoria ma prima devi caricare in registro, idem con il passaggio di
argomenti alle "procedure" se vuoi simulare le calls del C (che erano
nel programma). Non tutto il mondo e' x86.
-- 
-riko

On 17 Mag, 15:52, 
r...@despammed.com
 (Enrico Franchi) wrote:

Curiosamente i processori x86 sono gli unici che non ho mai
programmato in assembly.
Ho scritto in assembly per Z80, 6502, 8051, 8080, 68000... ma su x86
al massimo ho disassemblato.

 al massimo ho disassemblato.
E io ti ribadisco che dire che in tutte le architetture puoi operare
direttamente nella memoria e' come dire che tutti gli esseri umani hanno
l'uccello. ;)
-- 
-riko

On 18 Mag, 01:05, 
r...@despammed.com
 (Enrico Franchi) wrote:

Non avevo detto proprio cosi'.
Avevo detto (o la mia intenzione era di dire) che si poteva benissimo
ragionare ad un livello un pelo superiore dall'architettura del
processore, ignorare i registri e far finta di poter leggere e
scrivere direttamente in memoria.
Ok, leggere presuppone un registro in cui ospitare il dato
MOV $pippo, D0
(copia il contenuto di pippo in D0)
ma per scrivere si puo' benissimo ragionare in
MOV $pippo, pluto
(copia il contenuto di pippo in pluto)
che poi, anche se non esistesse la singola istruzione, si puo' sempre
fare una macro di due o piu' istruzioni che usano i registri, ma alla
fine il risultato e' quello.
Certo, non si ottimizza, ma mi pare di intuire che la finalita'
didattica della cosa sia quella di ragionare in un generico assembly,
e non di scrivere codice ultra ottimizzato per motorola.

 e non di scrivere codice ultra ottimizzato per motorola.
Ora capisco il tuo punto di vista. Devo riflettere se mi piace. ;)
-- 
-riko


Si ma adesso smettetela di litigare e datemi una mano! :-P
Sulla guida del simulatori di cui parlavo nell'altro post leggo:
.B, .W, .L, .S. .D, .X
Come suffissi di molte istruzioni, le prime tre so cosa 
significano(byte, word, long word), ma le altre?
Thanks  ;-)


 Thanks ;-)
Perdonatemi il messaggio scritto con i piedi(la fretta...), comunque 
senza un testo per principianti trovo davvero dura andare avanti, ad 
esempio:
che significano questi simboli in assembly?
  $ % #
Son riuscito a capire(credo) solo il cancelletto: rappresenta un dato 
immediato direttamente codificato nell'istruzione.
Per il resto buio :-(


 Per il resto buio :-(
Che mal di testa, guardate questa istruzione:
http://digilander.libero.it/maxxam99/Pics/2010-05-18_221957.jpg
I disegni mostrano la memoria prima e dopo l'istruzione in mezzo.
Ma l'indirizzo non dovrebbe essere memorizzato a partire dal primo zero?
E sopratutto che sono quegli zero? Bit, Byte? Bohh!
Ho perso due ore e sono pi� confuso di prima, davvero non so da dove 
iniziare :-(
Buonanotte e scusate questi post multipli, ma sono figli del mio 
scoramento... :-(


 E sopratutto che sono quegli zero? Bit, Byte? Bohh!
Forse se quella � la notazione esadecimale, 00 mi rappresentano la 
locazione di un byte in memoria, esatto?
resta il dubbio del perch� non parte all'indirizzo che indica 
l'istruzione, ossia: 00000008
A ribuonanotte comunque, stasera me la suono e me la canto da solo :-)


 l'istruzione, ossia: 00000008
Parte proprio da lì e memorizza l'operando #$10030 che a memoria 
dovrebbe essere immediato, simbolo #, ed esadecimale, simbolo $, 
estendendone  le cifre a long word, cioè a 32 bit o 4 byte, 00 01 00 30.
Vedi che il contenuto è esattamente quello.
Possibile che tu non abbia trovato un tutorial 68k in rete? Io avevo un 
librettino molto simpatico, forse Jackson editore dei tempi andati, sul 
solo 68000.


a naso direi
S single precision floating point ( 32 bit )
D double precision floating point ( 64 bit )
X extended precision fl. point ( 80 bit )
tieni conto che gli assemblatori 680x0 in genere supportano anche i 
coprocessoti matematici ( come chip aggiuntivo 68881-68882 o interno nei 
68040 - 68060 )

 immediato direttamente codificato nell'istruzione.
$ -> costante esadecimale
% -> costante binaria ???
tutte le alte costanti sono da considerarsi in formato decimale


 
tutti quei numeri sono in notazione esadecimale,per cui ogni 0 
corrisponde a 4 bit, gli zeri in piu' servono per un "buon" 
incolonnamento dei numari

 68040 - 68060 )
Grazie di tutto.

 solo 68000.
Di cartaceo non ho nulla :-(
L'istruzione che ho riportato è presa da un vecchio libro di 500 pagine 
che ho trovato sul p2p, e  che provavo a leggere, ossia questo:
http://digilander.libero.it/maxxam99/Pics/2010-05-19_164840.jpg
Però non mi sta piacendo tantissimo(credo sia un testo che risalga a 
pochi anni dopo l'immissione sul mercato del 68000), ma il mio è un 
giudizio molto parziale, ho letto solo le prime 50 di pagine.
(se hai tempo mi interesserebbe una tua opinione  riguardo le dispense 
che ho riportano nella risposta a mmmm)
Cmq ragazzi l'inizio con l'assembly è dura, bisogna iniziare a ragionare 
come la macchina e non come un umano, ve li ricordate i vostri inizi? ;-)
Grazie infinite Andrea, ciao.

 come la macchina e non come un umano, ve li ricordate i vostri inizi? ;-)
Si', forse trovi ancora in giro qualche manuale di 68000 per Amiga.
Alcuni di questi erano fatti bene, e indirizzati a teenager (*), non ad
ingegneri. Generalmente la parte dedicata all'hardware (copper, blitter,
etc) e' separata e la puoi ignorare.
(*) si', il teenager pre-youtube riusciva a stare attento per piu' di un
minuto. strano, eh?

 iniziare :-(
Andiamo male.
Partiamo dal principio.
Sai che cos'e' una ram?
Ogni cella di ram e' un byte.
Ogni cella di ram ha un indirizzo.
Se tu vuoi scrivere un dato in un certo indirizzo devi usare
l'istruzione MOVE
MOVE #dato, indirizzo
Il dato e' espresso sempre come numero, poi sono problemi tuoi
rappresentare correttamente quel numero.
Ma questi sono tutti presupposti generici di un generico assembly.
Il 68000 e' un processore come tanti, col suo set di istruzioni, tra
le quali ci sono le istruzioni per scrivere in memoria.
Mi pare che il tuo problema sia quello di comprensione dell'assembly
in generale e non quello del 68000 in particolare.
Procurati una bella tabella degli ascii come queste
http://en.wikipedia.org/wiki/ASCII
cosi hai sempre sottomano per ogni numero tra 0 e 255 la sua
rappresentazione in decimale, esadecimale, ottale, binario e ascii.

 in giro...
Morto?
Dove hai letto che e' morto?
Prova a chiedere in qualche gruppo di amighisti (anche su usenet) e
vedrai come e' tuttaltro che morto il buon motorola.
Comunque googolando ho trovato questo:
http://tict.ticalc.org/docs/68kguide.txt
Mi pare che ci sia tutto il necessario.

 minuto. strano, eh?
Credo che lo sfacelo sia successo ben prima di youtube. 
Adesso nei forum fanno domande che potrebbero risolvere *provando* due
righe nell'interprete interattivo.
-- 
-riko

 Credo che lo sfacelo sia successo ben prima di youtube. 
È una rivoluzione cominciata a botta di BimBumBam.

 
http://tict.ticalc.org/docs/68kguide.txt
Ah giusto, la TI-89 :-)

 in giro...
Morto?
Dove hai letto che e' morto?
Prova a chiedere in qualche gruppo di amighisti (anche su usenet) e
vedrai come e' tuttaltro che morto il buon motorola.
Comunque googolando ho trovato questo:
http://tict.ticalc.org/docs/68kguide.txt
Mi pare che ci sia tutto il necessario.
--------------------------
Dalle nostre parti fanno i videoiocchi con i 68000