Newsgroup: it.comp.programmare
Titolo: Istruzione ostica(per me): movem

Tra le varie cose che non ho capito, consideriamo questo pezzo iniziale 
di descrizione dal manuale del 68000:
Description:  Moves  the  contents  of  selected  registers  to  or from 
  consecutive  memory
locations  starting  at  the  location  speciﬁed  by  the  effective 
address.  A  register  is
selected if the bit in the mask ﬁeld corresponding to that register is 
set. The instruction
size determines whether 16 or 32 bits of each register are transferred. 
In the case of a
word transfer to either address or data registers, each word is 
sign-extended to 32 bits,
and the resulting long word is loaded into the associated register.
Selecting  the  addressing  mode  also  selects  the  mode  of operation 
  of  the  MOVEM
instruction, and only the control modes, the predecrement mode, and the 
postincre-
ment mode are valid.
Quando parla di mask field si riferisce al campo dell'istruzione che 
codifica il registro? Non l'ho mai letta(per quel poco che ho letto) in 
questi termini..
A cosa si riferisce quando parla di "control modes"?
Io purtroppo non ci arrivo...
Ciao.
-- 
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/


Tu hai ragione a voler capire a fondo.
Ma forse in questo caso non e' cosi' necessario scendere a quel
livello di dettaglio.
L'istruzione MOVEM serve a copiare i registri in memoria (tipicamente
nello stack), e viceversa, per salvarne il contenuto in modo pratico,
prima di fare operazioni che ne cambiano il contenuto, se tu non vuoi
perdere il contenuto precedente.
Quindi scrivi MOVEM, l'elenco dei registri, e l'indirizzo a partire da
dove vuoi salvarli.
viceversa scrivi MOVEM, l'indirizzo di memoria dove stanno i valori,
l'elenco dei registri da ripristinare.
Molto probabilmente quello che tu scrivi come elenco di registri, lui
lo trasforma in una maschera di bit, uno per ogni registro A,D.
Da un punto di vista pratico, a te interessa sapere un'istruzione che
cosa fa, non come lo fa.
Eventualmente ti puo' interessare quanto tempo ci mette.
Magari il tempo di esecuzione puo' non essere costante (come
probabilmente in questo caso), dove se i registri da salvare sono di
piu' ci mette piu' tempo.

 piu' ci mette piu' tempo.
Ti ringrazio per la spiegazione...
Si in  effetti a questo livello non mi conviene andare a vedere come 
funziona l'istruzione dietro le quinte, mi basta capire cosa fa e come 
usarla, ed è già tanto :-)
L'unico dubbio che mi rimane è l'ordine:  quando salva i registri in 
memoria(o li rispristina dalla memoria) , a prescindere da come li ho 
indicati in lista, deve per forza seguire l'ordine d0....a7 oppure 
a7....d0 a seconda che utilizzi l'indirizzamento con  post-incremento e 
con predecremento.
Non si poteva rendere le cose più semplici?
Intuisco che questa convenzione viene fatta per rendere le copie da 
registri a memoria e da memoria a registri trasparenti e ordinate per lo 
stack(nel senso di salvare e rimettere ogni registro al posto suo con 
due movem speculari)...ma si rischia di confondersi, e bisogna 
ricordarsi la convenzione a memoria.
Grazie.


 ), ed anche la sua esecuzione sara' la stessa
Mi riferivo al fatto che la bitmask č diversa se č una movem 
memoria>registri oppure registri>memoria
Perň in effetti ragionandoci non č un problema...dopo il tuo post credo 
che le cose mi siano piů chiare.
Permettetemi ogni tanto di fare un pochino di confusione...tempo(si 
spera) acquisirň piů dimestichezza.
Ciao.
