Sono nuovo nell'architettura PowerPC e sto osservando un codice smontato con l'istruzione bcctr
. Sebbene il manuale specifichi in che modo funziona l'istruzione bcctr
, non spiega per che cosa verrebbe normalmente usata. Puoi trovare esempi di tali usi e dettagli su quale ruolo gioca il registro ctr
? La mia ipotesi migliore è che sia usato per i rami indiretti (ad esempio per implementare le chiamate a puntatori di funzioni o vtables), ma lo scopo di "decrement ctr register e then branch to ctr" non mi è affatto chiaro. Il doppio uso del registro come contatore e come indirizzo di destinazione è particolarmente confuso.Qual è lo scopo dell'istruzione PowerPC `bcctr`?
risposta
Il bcctr
(e la sua variante incondizionato, bctr
) è generalmente utilizzato per sportelli a un puntatore a funzione.
Il set di istruzioni Power ISA ha due istruzioni¹ che sono disponibili per la diramazione a un indirizzo in un registro: blr
(registro da diramazione a collegamento) e bctr
(da ramo a registro contatore). L'utilizzo di bctr
significa che possiamo conservare il registro dei collegamenti.
In questo caso, non c'è niente di speciale nell'usare il registro ctr qui - è solo l'indirizzo a cui ci rivolgiamo. Ci sarà un'istruzione mtctr
prima nello stream, dove verrà caricato un indirizzo nel registro ctr.
Probabilmente verrà utilizzato anche lo bctrl
: questo imposta il registro di collegamento sull'indirizzo corrente + 4, quindi esegue un ramo sul contatore. Ciò consente alla chiamata (tramite il puntatore della funzione) di tornare, passando nuovamente al registro dei collegamenti.
¹: in modalità non privilegiata, almeno
guardando l'ISA POWER, vedo:
bcctr = salto condizionato al conte Registrati
Usage: bcctr B0, BI, BH
Algoritmo:
cond_ok <- BO_0 | (CR_{BI+32} ≡ BO 1)
if cond_ok then NIA <- {iea} CTR_{0:61} || 0b00
if LK then LR <- {iea} CIA + 4
BI + 32 specifica il bit del registro delle condizioni da testare. Il campo BO viene utilizzato per risolvere il ramo come descritto in nella Figura 44. Il campo BH viene utilizzato come descritto in Figura 46. L'indirizzo di destinazione della diramazione è CTR 0:61 || 0b00, con 32 bit di ordine superiore dell'indirizzo di destinazione del ramo impostato su 0 in modalità a 32 bit. Se LK = 1, l'indirizzo effettivo dell'istruzione che segue l'istruzione Branch viene inserito nel registro dei collegamenti. Se è specificata l'opzione "decremento e test CTR" (BO 2 = 0), il modulo di istruzioni non è valido.
Fonte
: Power ISA Version 2.07- 1. Qual è lo scopo di. * \\?
- 2. Qual è lo scopo dei record attivi?
- 3. Qual è lo scopo di Array.GetLowerBound (int)?
- 4. Qual è lo scopo di :: in C#?
- 5. Qual è lo scopo delle classi astratte?
- 6. Qual è lo scopo di IAsyncStateMachine.SetStateMachine?
- 7. Qual è lo scopo di riutilizzareIdentificatore?
- 8. Qual è lo scopo dell'iniz! inizializzatore disponibile?
- 9. Database Pivoting: qual è lo scopo?
- 10. Qual è lo scopo di IntentSender?
- 11. Qual è lo scopo di @EnableTransactionManagement?
- 12. Qual è lo scopo di .git/log
- 13. Qual è lo scopo dell'attributo tag NSMenuItem?
- 14. Qual è lo scopo: api.jar + impl.jar + bundle.jar?
- 15. Qual è lo scopo di angular-sanitize?
- 16. Qual è lo scopo di com.sun.org.apache.xpath.internal.operations.String?
- 17. Qual è lo scopo dei file pdb?
- 18. Qual è lo scopo di java.math.MutableBigInteger?
- 19. Qual è lo scopo della classe Expression?
- 20. Qual è lo scopo di $ eq
- 21. Qual è lo scopo degli oggetti # requireNonNull
- 22. Scala: qual è lo scopo dell'override
- 23. Qual è lo scopo di HttpHeaders.TryAddWithoutValidation?
- 24. Qual è lo scopo dell'intestazione features.h?
- 25. Qual è lo scopo di Microsoft.Net.Compilers?
- 26. php umask (0) qual è lo scopo
- 27. Qual è lo scopo di requestWindowFeature()?
- 28. Qual è lo scopo del controllo VisitorIdentification?
- 29. Qual è lo scopo dell'annotazione @Override?
- 30. Qual è lo scopo del file Manifest
Penso che sia solo una valida alternativa alla 'bclr', in modo da poter mantenere ciò che l'indirizzo è in' LR' e avere un indirizzo di destinazione alternativa per un ramo condizionale in 'CTR' (ovviamente non si usa il decremento in questo contesto). Vedi: http://www.mactech.com/articles/mactech/Vol.10/10.09/PowerPCAssembly/index.html –
Sì, la funzione di decremento è probabilmente un effetto collaterale della codifica delle istruzioni, difficile immaginare un caso in cui sarebbe utile – Jester
Il manuale suggerisce che è usato per le dichiarazioni 'goto',' switch' calcolate. Potrebbe salvare un'istruzione o due se usata in modo intelligente. – EOF