KWALIFIKACJA ELM2 + ELM5 - CZERWIEC 2009

PYTANIE NR 35.
Wykonanie przez mikrokontroler rodziny '51 rozkazu NOP
A.
B.
C.
D.
Wyjaśnienie poprawnej odpowiedzi:
NOP (no operation) w 8051 to instrukcja "bezczynności": nie zmienia rejestrów ani flag i nie wykonuje żadnej operacji na danych. Jej skutkiem jest wyłącznie upływ czasu procesora potrzebnego na pobranie i wykonanie rozkazu (klasycznie 1 cykl maszynowy), co bywa używane do prostych opóźnień.

Pełne wyjaśnienie:

Instrukcja NOP w rodzinie MCS-51 (8051) jest rozkazem, którego celem jest brak zmiany stanu układu z punktu widzenia danych programu. Oznacza to, że po jej wykonaniu nie zmienia się zawartość typowych rejestrów roboczych (np. akumulatora) ani nie zachodzi obliczenie na operandach. Jedynym "efektem" jest to, że mikrokontroler zużywa czas na pobranie i wykonanie tej instrukcji, więc przesuwa się licznik rozkazów i mija określona liczba taktów.

Odpowiedź "nie wywoła żadnych efektów, zajmie jedynie czas 1 cyklu maszynowego" oddaje istotę NOP: brak operacji na danych + koszt czasowy. W praktyce NOP stosuje się m.in. do:

  • bardzo krótkich opóźnień (gdy wystarczy stały, mały narzut czasowy),
  • wyrównania czasów wykonania w różnych gałęziach programu (timing),
  • pozostawienia miejsca w kodzie na późniejsze modyfikacje.

Pozostałe odpowiedzi opisują działania charakterystyczne dla innych instrukcji, nie dla NOP. Przesunięcie akumulatora w prawo wymaga rozkazu typu przesunięcie/rotacja (to operacja bitowa wpływająca na zawartość rejestru), więc nie może być skutkiem "no operation". Skok warunkowy do adresu "zapis­anego w akumulatorze" nie pasuje do typowych mechanizmów skoku w 8051 (skoki korzystają z określonych form adresowania i nie są "NOP"). Z kolei logiczny iloczyn (AND) to klasyczna operacja logiczna, która musi zmienić wynik w rejestrze docelowym, więc również przeczy idei NOP.

Uwaga egzaminacyjna: w części odmian/rdzeni zgodnych z 8051 szczegóły czasowe mogą zależeć od implementacji i zegara, ale sens NOP pozostaje ten sam: brak modyfikacji danych programu przy zużyciu czasu wykonania instrukcji.

Dodatkowe pytania

Dodatkowe pytania (FAQ):
Instrukcja NOP (no operation) to rozkaz, który nie wykonuje operacji na danych i nie zmienia rejestrów programu. Powoduje jedynie upływ czasu procesora potrzebnego na pobranie i wykonanie instrukcji, dlatego bywa używana jako "wypełniacz" lub do drobnego wyrównania czasu.
Bo NOP z definicji nie ma operandów i nie ma rejestru docelowego, w którym zapisywałby wynik. Jego zadaniem jest przejście przez cykl wykonania bez skutków ubocznych dla danych, więc akumulator i typowe flagi pozostają bez zmian.
W praktyce NOP pomaga przy prostym kształtowaniu czasu: krótkie opóźnienia, wyrównanie timingów między ścieżkami programu, a także pozostawienie miejsca w pamięci programu na przyszłe poprawki. To przydatne przy uruchamianiu i diagnozowaniu urządzeń z rdzeniem 8051.
NOP stosuje się, gdy potrzebne jest bardzo krótkie i przewidywalne opóźnienie (np. kilka instrukcji) oraz gdy nie chcemy modyfikować rejestrów w pętli. Dłuższe opóźnienia zwykle realizuje się pętlą lub timerem, bo NOP szybko zwiększa rozmiar kodu.
Typowo NOP nie jest instrukcją arytmetyczną ani logiczną, więc nie aktualizuje flag wyniku. W efekcie nie powinien zmieniać PSW w sensie flag obliczeniowych. Zawsze warto jednak sprawdzić dokumentację konkretnego klona 8051, bo szczegóły czasowe mogą się różnić.
Instrukcje typu AND zawsze wykonują obliczenie logiczne i muszą zapisać wynik do rejestru (np. akumulatora) lub pamięci, więc zmieniają dane. NOP nie ma wyniku i nie zmienia danych. Jeśli odpowiedź opisuje "iloczyn logiczny bitów", to dotyczy operacji logicznych, nie NOP.
Tak, pośrednio. NOP może być użyty jako miejsce "na później" (łatka w kodzie) lub do ustawienia punktów obserwacji w sekwencji wykonania. W debugerze ułatwia też czasem analizę przebiegu, bo dodaje przewidywalny krok bez zmiany stanu danych.
Najczęściej zakłada się, że każda instrukcja musi coś zmieniać w rejestrach, więc wybiera się odpowiedź z "akumulatorem" albo "operacją logiczną". Drugi błąd to przenoszenie skojarzeń z innych architektur. W 8051 NOP to właśnie brak operacji na danych, tylko koszt czasu.
W klasycznym ujęciu 8051 NOP jest instrukcją krótką i jej koszt czasowy podaje się jako stały, niewielki. Jednak w praktyce różne rdzenie zgodne z 8051 (różni producenci, różne zegary i tryby) mogą opisywać timing inaczej w dokumentacji. Zawsze porównuj z datasheet konkretnego układu.
W treści zwykle pojawia się zapis "’51", "8051" albo "MCS-51". W odpowiedziach pojawiają się też charakterystyczne pojęcia jak akumulator (A), PSW czy cykl maszynowy. Na egzaminie warto kojarzyć, że NOP w tej rodzinie nie wykonuje obliczeń ani skoków.
info

Około 59% zdających odpowiada poprawnie na to pytanie. średnie

Według specjalistów z branży: "NOP (no operation) w 8051 to instrukcja "bezczynności": nie zmienia rejestrów ani flag i nie wykonuje żadnej operacji na danych."

Źródła:

  • Intel Corporation, "MCS-51 Microcontroller Family User’s Manual", rozdział: Instruction Set / NOP (opis działania i czasu wykonania) — dokumentacja producenta
  • Atmel (Microchip), "8051 Microcontroller Instruction Set" / "AT89C51/AT89S51 datasheet", sekcja: Instruction Set Summary / NOP
  • Silicon Laboratories, dokumentacja rodziny C8051 (instrukcje zgodne z 8051), sekcja: 8051 Instruction Set / NOP

Materiały:

  • Dokumentacja zestawu instrukcji MCS-51/8051 (Instruction Set Summary)
  • Podręcznik do asemblera 8051 z przykładami opóźnień i pętli
  • Materiały producenta konkretnego klona 8051 (sekcja: timing/clocking)

Aktualizacja pytania: 31.03.2026



Aktualizacja pytania: 31.03.2026
📡 Brak połączenia internetowego