Comprendere che il linguaggio assembly non è una cosa standardizzata universale. È ufficialmente definito dal programma che lo legge che è l'assemblatore. Quindi qualunque sia il codice che definisce la lingua per quell'assemblatore è la lingua. Il codice macchina è ciò che conta per il processore, in modo che tu possa avere il numero di assemblatori e linguaggi di assemblaggio diversi da quelli degli utenti, purché tutti producano il codice macchina corretto. Quindi se ti aspetti che questo sia universale, una regola si applica a tutti i tipi di cose che non è il caso.
Hai fornito abbastanza informazioni per consentire a persone esperte di vedere le abitudini degli altri linguaggi di assemblaggio riflesse qui.
mov 202, 100[r1+]
Quindi questo sembra muoversi ciò che è in indirizzo del registro 202 indirizzamento diretto come avete dichiarato. alla posizione all'indirizzo r1 + 100 registro indicizzato e l'incremento post.
Per sostituire quello con più istruzioni poiché la riga è la più semplice per quanto riguarda le righe di codice (per quanto la complessità e il numero di orologi non necessariamente).
- Quindi è necessario leggere il contenuto di indirizzo 202,
- è necessario aggiungere 100 a r1 temporanea,
- è necessario scrivere i contenuti di indirizzo 202 alla posizione R1 + 100,
- e quindi è necessario prendere r1 e incrementarlo (non r1 + 100 incrementato ma r1 senza l'indice incrementato).
La soluzione data praticamente fa che:
add #100, r1
mov #202, r2
mov[r2],[r1]
sub #99, r1
Si aggiunge 100 a r1, che abbiamo bisogno di fare temporaneamente (e dovremo annullare più tardi perché r1 è ora di sbagliato nel lungo periodo). Quindi, poiché limitano le modalità di indirizzamento, è necessario avere un registro per contenere l'indirizzo 202, quindi il valore 202 viene caricato in r2 proprio come il valore 100 è stato aggiunto a r1. Il numero # significa semplicemente usare questo numero.
Ora è possibile utilizzare [rn] in modo che lo spostamento legga ciò che è all'indirizzo r2 (indirizzo 202) e lo scriva in corrispondenza dell'indirizzo r1 (l'originale r1 più 100).Infine perché vogliamo r1 di finire per essere il più originale 1, ma ce l'abbiamo fatta l'originale più 100 dobbiamo sottrarre fuori 99 r1 + 100-99 = r1 + 1
In C, sarebbe qualcosa in questo modo:
unsigned *r1;
unsigned *r2;
//r1 is set somewhere in here to something that is not defined in your question or problem.
r1 += 100; //add #100,r1
r2 = 202; //mov #202,r2
*r1 = *r2; //mov [r2],[r1]
r1 -= 99; //sub #99,r1
avente la destinazione sulla destra e operando a sinistra non è intuitivo dato che la maggior parte scrivere e codice con il risultato sulla sinistra e gli operandi a destra.
non lo facciamo codice 202 = r2;
abbiamo invece scriviamo r2 = 202;
così mov r2,#202
è più intuitivo, ma ancora una volta il montaggio linguaggio è definito dalle le persone che hanno scritto l'assemblatore e alcune persone piace sinistra a destra e da destra a sinistra gli altri.
Un prefisso '#' indica una costante immediata in alcune lingue di assemblaggio. Sembra che sia quello che fa anche in questo. –
Wy stai chiedendo al tuo istruttore di spiegare? Vengono pagati per fornirti le conoscenze e la comprensione necessarie e apparentemente non hanno ancora guadagnato la paga. (Non downvoting - solo chiedendo.) –