csrr
pseudolyszt.net obejmuje csrr i inne instrukcje RISC-V w większych szczegółach.
Opis
csrr odczytuje rejestr sterującego do rejestru ogólnego. Rejestr sterujący i statusu, czyli CSR, przechowuje stan procesora, taki jak adres procedury obsługi trapów i przyczyna ostatniego trapa (zobacz csrrw). Poniższa postać kopiuje wartość CSR do rd.
csrr rd, csr
Asembler traktuje ją jako pseudoinstrukcję, czytelną nazwę, którą przepisuje na rzeczywistą instrukcję. Staje się ona poniższą instrukcją. Ponieważ rs1 to zero, CSR jest odczytywany i nic nie jest do niego zapisywane.
csrrs rd, csr, zero
Procedura obsługi trapa rozpoczyna się od odczytania dwóch CSR-ów. mepc przechowuje adres przerwanej instrukcji, a mcause przechowuje powód trapa.
csrr t0, mcause
Najstarszy bit mcause ma wartość 1 dla przerwania i 0 dla wyjątku. Nowsze bity to kod przyczyny. Przerwanie przycisku w tym symulatorze pozostawia 0x8000000b, co jest przerwaniem o kodzie 11, maszynowym przerwaniem zewnętrznym.
Podręcznik RISC-V definiuje csrr rd, csr jako csrrs rd, csr, x0.
Rozwija się do
csrrs rd, csr, zero
Asembler zastępuje tę pseudoinstrukcję rzeczywistą instrukcją lub instrukcjami wymienionymi powyżej.
Przykład
csrr t0, mstatus # t0 = mstatus
