Asembler dla maszyny stosowej

Maszyna stosowa

Nieograniczony stos o rozmiarze elementu sizeof(int)
Pamięć dla zmiennych
Rozkazy, działanie i czas wykonywania instrukcji [w cyklach CPU]
Rozkaz Opis Cykle
PUSH #liczba stos « liczba 2
PUSH [adres] stos « [adres] 3
POP [adres] [adres] « stos 3
MOV ST(n),[adres] (n-ty element ze stosu) « [adres] 4
MOV [adres],ST(n) [adres] « (n-ty element ze stosu) 4
DUP duplikuj element ze szczytu stosu 2
DEL usuń element ze szczytu stosu 1
SWAP zamień element 1 i 2 na szczycie stosu 3
ADD element1 « stos ; element2 « stos ; stos « element1+element2 2
SUB element1 « stos ; element2 « stos ; stos « element1-element2 2
MUL element1 « stos ; element2 « stos ; stos « element1×element2 3
DIV element1 « stos ; element2 « stos ; stos « element1 : element2 4
NEG zamień wartość ze szczytu stosu liczbą przeciwną 1
NOT jeśli element na szczycie stosu jest zerem, zamień go na 1, w przeciwnym wypadku - na 0 1
CALL stos skoków « PC+1 ; PC « stos 4
RET PC « stos skoków 4
JMP adres « stos ; PC « adres 2
JE element « stos ; adres « stos ; PC « adres jeżeli element=0 2 (skok wykonany) lub 1
JNE element « stos ; adres « stos ; PC « adres jeżeli element nie jest równy 0 2 (skok wykonany) lub 1
JG element « stos ; adres « stos ; PC « adres jeżeli element większy od 0 2 (skok wykonany) lub 1
JL element « stos ; adres « stos ; PC « adres jeżeli element mniejszy od 0 2 (skok wykonany) lub 1
JGE element « stos ; adres « stos ; PC « adres jeżeli element większy równy 0 2 (skok wykonany) lub 1
JLE element « stos ; adres « stos ; PC « adres jeżeli element mniejszy równy 0 2 (skok wykonany) lub 1

Symulator
Pseudoinstrukcje, wykorzystywane przez symulator
DD id zadeklarowanie miejsca w pamięci zmiennych dla id
BRK punkt przerwania programu dla komendy symulatora t
* Uwaga do symulatora : można odkładać na stos adresy zapisane symbolicznie, używajac PUSH #etykieta