csrrpseudo

csrr

pseudo
Asembler RISC-V Referencja

lyszt.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