View Full Version : [Assembler] Domande su programmi
MinaVagante
11-02-2009, 08:30
Ciao a tutti,
volevo fare un po'di domande riguardo l'assembler. Premetto innanzitutto un paio di cose: per i modi di indirizzamento definiamo l'operando immediato (la parola che segue l'istruzione contiene il dato), l'indirizzo assoluto (la parola che segue l'istruzione contiene l'indirizzo del dato), e l'indirizzo in regsitro (l'indirizzo del dato è contenuto nel registro indicato).
Quando scrivo I mi riferisco al primo, con A al secondo e con R al terzo. Quindi si hanno tre modi per caricare una word LDWI, LDWA, LDWR.
Stavo vedendo questo programma:
N: word 3
DATA: byte 7
byte 2
byte 9
START: LDWA R1 N
LDWI R2 DATA
LDWI R10 0
LOOP: LDBR R11 R2
ADD R11 R10
INC R2
DEC R1
JMPNZ LOOP
HALT
da quello che ho capito questo programma fa la somma di quei 3 numeri e mette il risultato in R10 :D
Però certi passaggi non mi sono del tutto chiari. Partiamo da start:
la prima istruzione dovrebbe caricare 3 in R1 giusto?? La seconda, di operando immediato, perchè è scritta così??? DATA è un etichetta, e quindi non contiene un indirizzo??? Non dovrebbero esserci un LDWA???
Grazie a tutti dei chiarimenti
Petronilla
11-02-2009, 11:05
Però certi passaggi non mi sono del tutto chiari. Partiamo da start:
la prima istruzione dovrebbe caricare 3 in R1 giusto?? La seconda, di operando immediato, perchè è scritta così??? DATA è un etichetta, e quindi non contiene un indirizzo??? Non dovrebbero esserci un LDWA???
Grazie a tutti dei chiarimenti
Premetto che io uso una versione diversa di assembler ma credo di poterti aiutare (se sbaglio qualcuno mi corregga)!!
DATA non credo sia un'etichetta... è un vettore formato da 3 elementi da 8 bit ciascuno... esattamente come N!!
Ti torna il ragionamento!?
MinaVagante
11-02-2009, 12:06
si ok mi torna che sia un vettore, ma potresti aiutarmi a capire cosa fa ciascun tipo di istruzione??
Ad esempio, ok per la prima parte viene definita N come una word che vale 3, poi viene "dichiarato" il vettore DATA costituito da tre elementi, il primo elemento di valore 5 all'indirizzo rappresentato da DATA, gli altri in celle adiaicenti giusto???
STRAT: LDWA R1 N carica con l'indirizzo assoluto, ovvero la parola che segue l'istruzione contiene l'idnrizzo del dato c'è scritto: questo signifia che in R1 ho il valore 3, mica l'indirizzo dell'etichetta N no???
LDWI R2 DATA carica con oprando immediato (quello che nel c corrisponde a x=5 ad esempio). In R2 cosa c'è?? L'indirizzo del primo elemento di DATA???
grazie
Petronilla
11-02-2009, 18:38
si ok mi torna che sia un vettore, ma potresti aiutarmi a capire cosa fa ciascun tipo di istruzione??
Ad esempio, ok per la prima parte viene definita N come una word che vale 3, poi viene "dichiarato" il vettore DATA costituito da tre elementi, il primo elemento di valore 5 all'indirizzo rappresentato da DATA, gli altri in celle adiaicenti giusto???
STRAT: LDWA R1 N carica con l'indirizzo assoluto, ovvero la parola che segue l'istruzione contiene l'idnrizzo del dato c'è scritto: questo signifia che in R1 ho il valore 3, mica l'indirizzo dell'etichetta N no???
LDWI R2 DATA carica con oprando immediato (quello che nel c corrisponde a x=5 ad esempio). In R2 cosa c'è?? L'indirizzo del primo elemento di DATA???
grazie
Sempre se ho capito bene come funzionano queste due routine:
LDWA R1 N --> mette in N l'indirizzo della locazione di memoria che contiene il "numero N"
LDWI ---> mette in R2 i valori del vettore DATA che sono sempre memorizzati in locazioni di memoria adiacenti (consecutive). In questo caso utilizzi 3 locazioni da 1 byte ciascuna.
L'unica cosa che non capisco è da dove prendi R2... dovrebbe essere anch'esso un vettore di 3 elementi... o quanto meno dovrebbe essere dichiarato stile --> R2: .FILL 3,1 (quindi non inizializzato)....
MinaVagante
11-02-2009, 19:22
ho trovato un esempio che corrisponde al seguente programmino in c:
int main()
{ int n,x=10,y=11;
n=x+y+3;
return EXIT_SUCCESS;
}
in assembler diventa:
n: word 0
x: word A
y: word B
START: LDWI R0 3
LDWA R1 x
ADD R1 R0
LDWA R1 y
ADD R1 R0
STWA R0 n
HLT
con x quindi indico l'indirizzo che della cella che contiene 10, e metto il valore 10 in x giusto??
Però non capisco quando devo usare LDWR :confused:
Inoltre l'ultima istruzione STWA è definita come:
STWA s A store byte
dove s=source (read only)
e A indica un numero qualunque.
Non capisco la differenza fra memorizzare un valore e caricarlo, ovvero la differenza fra STWA e LDWA :(
grazie
Petronilla
11-02-2009, 20:28
ho trovato un esempio che corrisponde al seguente programmino in c:
int main()
{ int n,x=10,y=11;
n=x+y+3;
return EXIT_SUCCESS;
}
in assembler diventa:
n: word 0
x: word A
y: word B
START: LDWI R0 3
LDWA R1 x
ADD R1 R0
LDWA R1 y
ADD R1 R0
STWA R0 n
HLT
con x quindi indico l'indirizzo che della cella che contiene 10, e metto il valore 10 in x giusto??
Si giusto
Però non capisco quando devo usare LDWR :confused:
Inoltre l'ultima istruzione STWA è definita come:
STWA s A store byte
dove s=source (read only)
e A indica un numero qualunque.
Non capisco la differenza fra memorizzare un valore e caricarlo, ovvero la differenza fra STWA e LDWA :(
grazie
Store: è un'operazione che da registro memorizza in memoria
Load: è un'operazione che da memoria carica (copia) in un registro.
Inoltre ho capito che le variabili Rx non devi definirle (forse sono integrate nella routine).
Quindi nell'ultimo esempio:
Metti il valore "3" in R0
Metti il valore di x in R1
Sommi R1 e R0 (modificando R0 (che contiene quindi la somma dei due numeri)
Usando sempre R1 (tanto il valore di x non ti serve piu) metti il valore di y in R1
Sommi R1 e R0 ( cioè Somma= R1 + R0 ma R0= x+3 e R1=y ---> Somma=y+x+3 )
Capito ora? So che è un po ingarbugliato!! :D
MinaVagante
12-02-2009, 08:20
Perfetto grazie mille
Petronilla
12-02-2009, 17:05
Perfetto grazie mille
di nulla! sono felice di esserti stata d'aiuto! :D
vBulletin® v3.6.4, Copyright ©2000-2025, Jelsoft Enterprises Ltd.