noppseudo

nop

pseudo
Asembler RISC-V Referencja

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

Opis

nop nic nie robi. Nazwa jest skrótem od "no operation" (brak operacji). Gdy procesor napotka nop, żaden rejestr się nie zmienia, pamięć nie jest naruszana, a wykonanie kontynuowane jest od następnej instrukcji. Zajmuje jedno miejsce w programie i upływa jeden takt czasu.

nop to pseudoinstrukcja dla poniższej linii.

addi zero, zero, 0

RISC-V zawiera rejestr o nazwie zero, który zawsze przechowuje 0. Odczyt zwraca 0, a zapis jest odrzucany. To addi dodaje 0 i 0 i odrzuca wynik, więc instrukcja kończy się i nic się nie zmienia. RISC-V nie potrzebuje dedykowanego nop, ponieważ rejestr zero go dostarcza.

Prawdziwe procesory używają nopów jako wypełnienia, aby późniejsza instrukcja zaczynała się na granicy pamięci, którą sprzęt obsługuje szybciej, oraz jako symboli zastępczych, które narzędzia później nadpisują prawdziwymi instrukcjami. Kompilatory wstawiają je rutynowo, dlatego zdeasemblowany kod je zawiera, mimo że żaden programista ich nie wpisał.

Podręcznik RISC-V stwierdza, że nop nie zmienia żadnego stanu widocznego architektonicznie, czyli niczego, co program może zaobserwować, poza przesunięciem pc i zwiększeniem liczników wydajności. Podaje dwa zastosowania: wyrównywanie segmentów kodu do granic adresowych odpowiednich dla sprzętu oraz pozostawianie miejsca na późniejsze zmiany w kodzie. Podręcznik wyjaśnia, że kodowanie używa addi, ponieważ ta instrukcja zużywa najmniej zasobów w większości systemów, gdyż odczytuje tylko jeden rejestr.

W tym symulatorze nop służy jako odstęp lub znacznik podczas eksperymentów. Przejście przez jeden przesuwa pc do przodu o 4 i nie zmienia żadnego rejestru ani lokalizacji pamięci.

Rozwija się do

addi zero, zero, 0

Asembler zastępuje tę pseudoinstrukcję rzeczywistą instrukcją lub instrukcjami wymienionymi powyżej.

Przykład

li t0, 1
nop              # advances one instruction, changes nothing
addi t0, t0, 1   # t0 = 2