ecall
lyszt.net obejmuje ecall i inne instrukcje RISC-V w większych szczegółach.
Opis
ecall prosi środowisko, w którym działa twój program, o wykonanie usługi. Asembler potrafi dodawać i przenosić liczby, ale ekran, klawiatura i inne urządzenia należą do systemu hostującego program, więc kod nie może samodzielnie do nich dotrzeć. ecall oznacza wywołanie środowiska. Zatrzymuje twój kod, host wykonuje usługę, a sterowanie wraca do twojego kodu. Hostem jest system operacyjny na prawdziwym sprzęcie, a w tym symulatorze jest nim sam symulator.
Program nazywa usługę, której chce. Zgodnie z konwencją numer usługi trafia do a7, wszelkie dane potrzebne usłudze trafiają do a0, a następnie uruchamiane jest ecall. Ten symulator oferuje następujące usługi: 1 wypisuje liczbę całkowitą z a0, 4 wypisuje tekst pod adresem w a0, 5 wczytuje liczbę z wejścia do a0, 10 kończy program, a 32 wstrzymuje na a0 milisekund.
Aby wypisać liczbę, załaduj 1 do a7, aby wybrać usługę wypisywania, załaduj liczbę do a0 i uruchom ecall. Przykład robi właśnie to. Usługa 10 kończy program, dlatego lekcje kończą się dwiema liniami poniżej. Bez niej procesor kontynuuje poza ostatnią linią do tego, co nastąpi dalej.
li a7, 10 ecall
Podręcznik RISC-V stwierdza, że ecall wysyła żądanie usługi do środowiska wykonawczego i że środowisko decyduje, jak przekazywane są parametry, zwykle w zdefiniowanych rejestrach całkowitych. Ten symulator jest tutaj środowiskiem i definiuje wymienione powyżej numery usług. Podręcznik zauważa również, że ecall kiedyś nazywało się scall. Jej towarzysz ebreak zwraca sterowanie do debugera. Oba wywołują precyzyjny żądany trap do środowiska.
Pełny system operacyjny działa w ten sam sposób, z dłuższą listą usług.
Przykład
li a7, 1 # service 1 = print integer li a0, 42 ecall # prints 42
