Domanda

Sto lavorando ad un simulatore per il set di istruzioni msp430. gnu assembler ti permetterà di codificare istruzioni come queste:

fc0a: 12 10 00 02 rrc &0x0200       
fc0e: 22 11       rra #4        
fc10: 23 52       add #4,#2

Suppongo che rrc & 0x0200 recupererà dall'indirizzo 0x0200 eseguirà la rotazione, quindi riscriverà la risposta all'indirizzo 0x0200, giusto? Ma cosa farebbe un rra # 4? La fonte sarebbe un 4 immediato suppongo, ma c'è una destinazione dopo l'operazione? L'aggiunta n. 4, n. 2 assemblata in quello che ti aspetteresti (come 2b10, source = r2, ad = 1b0, dest = r3), il disassemblatore di binutils sebbene non sapesse cosa fare con quell'istruzione.

Queste istruzioni sono valide?

È stato utile?

Soluzione

Anche se non sembra esserci alcun riferimento online definitivo a questo effetto, tendo a concordare con il PO che le due istruzioni mostrate (e molte altre) probabilmente non sono valide , anche se sono conformi al formato definito nelle schede tecniche.

In altre parole, non tutte le combinazioni possibili delle varie parti che compongono una parola di istruzione sono valide. In particolare molte istruzioni per singolo operando che utilizzano la modalità di indirizzamento immediato e molte istruzioni per doppio operando che hanno una modalità di indirizzamento immediato per la destinazione probabilmente non sono semanticamente valide.

Esistono solo alcuni suggerimenti in tal senso nella documentazione, ad esempio nella Guida dell'utente, sezione 3.3.7 (sulla modalità di indirizzamento immediato), un commento indica " Valido solo per un operando di origine . " (E, a proposito, questo è per tutti i casi di modalità di indirizzamento immediato, non solo per i casi di breve durata consentiti dal trucco di generazione costante R2 o R3.)

Il fatto che il disassemblatore non sappia cosa fare con tali codici è anche un altro suggerimento (anche se ... alcuni disassemblatori si inciampano facilmente ...).

Per motivi di documentazione, ho raccolto di seguito alcuni riferimenti utili per MSP430:

Altri suggerimenti

Nella presente guida per l'utente, nella sezione 3.4.4.2, si consiglia di non utilizzare la modalità immediata (#N) nel campo di destinazione per il comando RRA in quanto si traduce in "funzionamento del programma imprevedibile".

È possibile che lo siano. Osservando le istruzioni impostate su Wikipedia, i codici operativi codificano il registro e varie opzioni. Quindi non è una semplice mappatura. Sembra che l'output che hai sia little-endian, quindi questo:

fc0a: 12 10 00 02 rrc &0x0200  

corrisponde all'istruzione 1012, che in binario è 0001 0000 0001 0010.

Questo si suddivide come segue:

6 bits: 0001 00 - fixed; defines the instruction family
3 bits: 00 0    - instruction (RRC)
1 bit : 0       - byte or word parameter (0 = 16 bit parameter; 1 = 8 bit)
2 bits: 01      - addressing mode (01 = indexed;)
4 bits: 0010    - register

Quindi in questo caso si sta verificando una rotazione a destra sul valore dell'offset nel registro 2 dall'indirizzo & amp; 0200.

Dovresti scomporre le altre istruzioni in modo simile per comprendere appieno. Per l'istruzione ADD, sia i registri / gli indirizzi di origine che quelli di destinazione sono codificati in 5223 istruzioni.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top