mret

mret

Asembler RISC-V Referencja

lyszt.net obejmuje mret i inne instrukcje RISC-V w większych szczegółach.

Opis

mret powraca z procedury obsługi pułapki. Pułapka występuje, gdy procesor zatrzymuje wykonywany program, aby procedura obsługi mogła przejąć kontrolę. Procedura obsługi to rutyna pod stałym adresem. Urządzenie zgłasza przerwanie, takie jak przycisk na płytce GPIO, i to rozpoczyna pułapkę. Nazwa oznacza powrót w trybie maszynowym.

mret

Gdy rozpoczyna się pułapka, procesor zapisuje adres przerwanej instrukcji w mepc, zapisuje przyczynę w mcause, czyści globalny bit zezwolenia na przerwania w mstatus i skacze do adresu procedury obsługi przechowywanego w mtvec. mret to odwraca. Ładuje licznik programu adresem z mepc i przywraca bit zezwolenia na przerwania, który mstatus zapisał na początku pułapki. Przerwany program wznawia wtedy działanie od instrukcji, którą miał wykonać.

mret nie przyjmuje operandów. Bez niego procesor kontynuuje poza końcem procedury obsługi do kodu, który następuje.

Przerwanie może nadejść między dowolnymi dwiema instrukcjami, a przerwany program nie przygotował się na nie. Dlatego procedura obsługi zapisuje każdy rejestr, który zmienia, i przywraca je przed mret.

Procedura obsługi przycisku również czyści bit oczekiwania przycisku przed mret. Jeśli ten bit pozostanie ustawiony, to samo przerwanie zostanie zgłoszone ponownie, gdy tylko mret ponownie włączy przerwania.

Przykład zapisuje adres target w mepc i wykonuje mret, który tam skacze. Poza prawdziwą pułapką pokazuje to sam skok. Zobacz csrw, aby zapisać CSR.

Przykład

la t0, target
csrw mepc, t0
mret          # pc = mepc, so execution continues at target
target:
nop