Dokumentacja SMS32V50 Simulator

Ta strona w prosty sposób wyjaśnia, jak działa Twój program na SMS32V50 Simulator (8-bitowy procesor). Znajdziesz tu informacje o działaniu kodu, architekturze, rejestrach, stosie, CMP, JUMP oraz różnicach między przerwaniami a skokami.

1. Wprowadzenie

Twój program wykonuje następujące zadania:

CLO             ; Czyścimy pamięć
IN 00           ; Czekamy na wybór systemu
      

2. Architektura (8-bit)

SMS32V50 to symulator 8-bitowego procesora, czyli:

3. Rejestry

Rejestry to małe miejsca w procesorze do przechowywania danych:

4. Stos i procedury

Stos działa jak pudełko, do którego wkładasz dane, a potem wyjmujesz je w odwrotnej kolejności (LIFO):

PUSH BL    ; Zapisujemy wynik na stosie
POP AL     ; Pobieramy wynik ze stosu
      

5. CMP

CMP (compare) porównuje dwie wartości i ustawia flagi procesora, bez zmiany samych danych.

W Twoim programie CMP jest używane do:

CMP AL, 31      ; Porównujemy AL z 31 (dla '1')
      

6. JUMP

JUMP zmienia kolejność wykonywania kodu przez ustawienie nowego adresu w IP:

JMP wprowadz_liczby  ; Skok do pobierania danych
      

7. Przerwania vs. JUMP

Różnice między przerwaniami a zwykłymi skokami:

INT 01   ; Wywołanie przerwania nr 1
// Procesor zapisuje IP i rejestry, wykonuje ISR, a potem wraca
      

8. Podsumowanie

9. Jak działa mój program

Oto krok po kroku, co dzieje się podczas działania Twojego programu:

Podczas całego procesu program używa rejestrów, stosu i instrukcji sterujących (CMP, JUMP) do prawidłowego przetwarzania danych.

// Przykładowa sekwencja wejścia i przetwarzania:
IN 00          ; Odczyt wyboru systemu
CMP AL, 31     ; Sprawdzamy, czy wybrano '1'
JZ system_dziesietny  ; Jeśli tak, wybór dziesiętny
...
// Wprowadzanie cyfr:
petla_wprowadzania:
  IN 00        ; Pobieramy cyfrę
  CMP AL, 0D      ; Sprawdzamy ENTER
  ...
      

10. FAQ – Odpowiedzi na pytania

Co robi ten kod, główne działanie?
  • Czyści pamięć, pobiera dane (wybór systemu, cyfry) i wykonuje odejmowanie.
  • Na końcu wyświetla wynik operacji.

Fragment kodu:

CLO             ; Czyścimy pamięć
IN 00           ; Pobieramy wybór systemu
          
Jaka jest architektura SMS32V50 (8-bit)?
  • Dane są 8-bitowe – od 0 do 255.
  • Rejestry, adresy i flagi są 8-bitowe.

Przykład: Każda liczba mieści się w jednym bajcie.

Do czego są rejestry ogólnego przeznaczenia?
  • Przechowują dane i wyniki obliczeń.

Fragment kodu:

MOV AL, 10   ; Przykład: zapisujemy 10 do AL
          
Do czego są specjalne rejestry (SP, IP)?
  • SP – wskaźnik stosu, przechowuje adresy powrotu i dane tymczasowe.
  • IP – wskazuje, którą instrukcję wykonać następną.

Fragment kodu:

JMP wprowadz_liczby  ; Skok zmienia IP
          
Czy używany jest stos i jak działa?
  • Tak, stos działa jak pudełko (LIFO) – ostatni element, który włożysz, jest pierwszym, który wyjmiesz.
  • Przechowuje adresy powrotu oraz tymczasowe wyniki.

Fragment kodu:

PUSH BL    ; Zapisujemy wynik na stosie
POP AL     ; Pobieramy wynik ze stosu
          
Jak działają procedury i stos przy ich użyciu?
  • Przy wywołaniu procedury adres powrotu (IP) jest zapisywany na stosie.
  • Po zakończeniu procedury adres ten jest odzyskiwany, by wrócić do głównego programu.

Przykład:

// Wywołanie procedury:
CALL procedura_xyz  ; Adres powrotu jest zapisywany na stosie
          
Jak działa CMP i gdzie jest używany?
  • CMP porównuje dwie wartości i ustawia flagi (Zero, Sign).
  • Wykrywa, czy wartości są równe lub czy wynik jest ujemny.

Przykład:

CMP AL, 31  ; Porównanie wartości w AL z 31
          
Jak działają instrukcje JUMP?
  • JUMP zmienia adres wykonywania programu (IP).
  • Skoki warunkowe (JZ, JS) działają na podstawie flag ustawionych przez CMP.

Przykład:

JMP wprowadz_liczby  ; Skok do etykiety
          
Czym różni się przerwanie od jumpa?
  • Jump – zwykły skok, który zmienia IP według logiki programu.
  • Przerwanie – nagłe zdarzenie, które zapisuje stan procesora na stosie, wywołuje specjalną procedurę, a następnie przywraca stan i kontynuuje działanie.

Przykład:

INT 01   ; Wywołanie przerwania nr 1