Simulator - Namizna aplikacija

Slika namizne aplikacije

Program lahko naložimo na poljubno lokacijo v pomnilniku tako, da izberemo željeno celico pomnilnika, nato pa naložimo program. Program se naloži od izbrane celice naprej.

Urejanje kode

Simulator sam ne omogoča pisanje oz. spreminjanje programske kode, zato se programsko kodo piše s poljubnim drugim tekstovnim urejevalnikom (npr. Notepad). Primer programa lahko vidite na sliki.

Primer kode

Pri pisanju kode se je potrebno držati nekaterih pravil:

Simulator - Spletna aplikacija

Slika spletne aplikacije

Prednost spletne različice je, da aplikacije ni potrebno nameščati, saj deluje v spletnem brskalniku. Dodatno omogoča urejanje programske kode v samem simulatorju in ima vgrajen seznam ukazov z osnovno razlago. Slabost je, da ne omogoča nalaganja programske kode na poljubno lokacijo in ne omogoča uporabe prekinitvenih točk (angl. "breakpoint").

Ob vsaki spremembi programa je potrebno tega ponovno naložiti v pomnilnik. Ena velja, če program izvedemo do konca in ga želimo ponovno izvesti. Program se vedno naloži na prvo lokacijo. Med izvajanjem programa je v statusni vrstici razložen trenutno označen ukaz. Poleg koračnega izvajanja omogoča samodejno izvedbo programa pri različnih hitrostih. Med samodejnim izvajanjem programa lahko izvajanje ustavimo in nadaljujemo s koračnim izvajanjem.

Registri

Oznaka Opis
IR Ukazni register (Instruction Register) vsebuje ukaz, ki je pripravljen za izvajanje
PC Programski števec (Program Counter) vsebuje naslov ukaza, ki je pripravljena za izvajanje
SP Kazalec sklada (Stack Pointer) vsebuje naslov vrha sklada
AC Akumulator oz. splošnonamenski register (tudi GPR - General Purpose Register)
MAR Register naslovnega vodila (Memory Address Register) vsebuje naslov pomnilnika, iz katerega se bere ali piše
MBR Register podatkovnega vodila (Memory Buffer Register) vsebuje vrednost, ki je prebrana ali se bo pisala v pomnilnik

Ukazi

Seznam vseh ukazov:

ADDD ADDI ADDL
CALL DESP INSP JNEG
JNZE JPOS JUMP JZER
LOCO LODD LODI LODL
POP POPI PSHI PUSH
RETN STOD STOI STOL
SUBD SUBI SUBL SWAP

Ukaze je mogoče razvrstiti v več skupin. Razvrstitev ukazov glede na tip operacije je naslednja:

Branje* LOCO LODD LODI LODL POP POPI
Pisanje* STOD STOI STOL PSHI PUSH  
Aritmetika ADDD ADDI ADDL SUBD SUBI SUBL
Skoki JUMP JPOS JNEG JZER JNZE  
Drugo CALL RETN DESP INSP SWAP  

* Branje je tukaj mišljeno kot prenos podatka iz pomnilnika/sklada/programa v akumulator, pisanje pa obratno.

Operacije branja, pisanja in aritmetike imajo več variant enakih ukazov, ki se razlikujejo glede na način naslavljanja. Ukazi se razlikujejo v zadnji črki mnemonika, ki je lahko:

D - direktno naslavljanje
operand ukaza predstavlja naslov lokacije v pomnilniku, ki vsebuje vrednost. Primer za ukaz LODD:
Razlaga direktnega naslavljanja
I - indirektno (posredno) naslavljanje
operand ukaza predstavlja naslov lokacije v pomnilniku, katere vednost predstavlja nov naslov lokacije, kjer se nahaja dejanska vrednost. Princip je enak kot pri kazalcih v višjih programskih jezikih. Pozor: razlaga ne velja za ukaza POPI in PSHI! Primer za ukaz LODI:
Razlaga direktnega naslavljanja
L - lokalno naslavljanje
operand ukaza predstavlja odmik od vrha sklada, od koder se vzame vrednost. Operand z vrednostjo 0 predstavlja vrh sklada. Primer za ukaz LODL:
Razlaga direktnega naslavljanja
/

ADD

Sintaksa: ADD izvor, ponor
Mnemonik: ADD (seštej)

Sešteje vrednost iz akumulatorja in vrednost iz pomnilnika, katero določa naslov v operandu izvor. Rezultat shrani v akumulator in v pomnilnik na naslov, ki je v operandu ponor.

Primer:

%Primer ukaza ADD LOCO 2 %Pripravimo vrednost, katera bo v pomnilniku STOD 8 %Shranimo pripravljeno vrednost v pomnilnik LOCO 3 %Shranimo novo vrednost v akumulator ADD 8,9 %Sestejemo vrednosti iz akumulatorja in pomnilnika

ADDD

Sintaksa: ADDD izvor
Mnemonik: ADD Direct (seštej direktno)

Sešteje vrednost iz akumulatorja in vrednost iz pomnilnika, katero določa naslov v operandu izvor. Rezultat shrani v akumulator.

Primer:

%Primer ukaza ADDD LOCO 3 %Pripravimo vrednost, katera bo v pomnilniku STOD 8 %Shranimo pripravljeno vrednost v pomnilnik LOCO 2 %Shranimo novo vrednost v akumulator ADDD 8 %Sestejemo vrednosti iz akumulatorja in pomnilnika

ADDI

Sintaksa: ADDI izvor
Mnemonik: ADD Indirect (seštej posredno)

Iz pomnilnika prebere vrednost, katero določa naslov v operandu izvor. Prebrana vrednost postane novi naslov. Zatem sešteje vrednost iz akumulatorja in vrednost iz pomnilnika, katero določa novi naslov. Rezultat shrani v akumulator.

Primer:

%Primer ukaza ADDI
LOCO 2 %Pripravimo vrednost, katera bo v pomnilniku STOD 8 %Shranimo pripravljeno vrednost v pomnilnik LOCO 8 %Pripravimo naslov, kateri bo v pomnilniku STOD 9 %Shranimo pripravljeni naslov v pomnilnik LOCO 5 %Shranimo novo vrednost v akumulator ADDI 9 %Sestejemo vrednosti iz akumulatorja in pomnilnika

ADDL

Sintaksa: ADDL izvor
Mnemonik: ADD Local (seštej lokalno)

Sešteje vrednost iz akumulatorja in vrednost iz sklada. Oddaljenost omenjene vrednosti od vrha sklada določa vrednost v operandu izvor. Rezultat shrani v akumulator.

Primer:

%Primer ukaza ADDL
LOCO 3 %Pripravimo vrednost, katera bo na skladu PUSH %Pripravljeno vrednost damo na sklad LOCO 2 %Pripravimo vrednost, katera bo na skladu PUSH %Pripravljeno vrednost damo na sklad LOCO 4 %V akumulator shranimo vrednost 4 ADDL 1 %Sestejemo vrednosti iz akumulatorja in sklada ADDL 0 %Sestejemo vrednosti iz akumulatorja in vrha sklada

CALL

Sintaksa: CALL naslov|labela
Mnemonik: CALL (pokliči)

Naslov iz programskega števca shrani na sklad. Zatem shrani naslov iz operanda v programski števec. Naslov v operandu je lahko v obliki labele.

Primer:

%Primer ukaza CALL JUMP GLAVNI %Vstopimo v glavni program SESTEJ LODL 1 %Vrednost prvega operanda ADDL 2 %Prištejemo vrednost drugega operanda RETN %Izstopimo iz funkcije SESTEJ GLAVNI LOCO 5 %Vrednost prvega operanda PUSH %Podamo prvi operand LOCO 3 %Vrednost drugega operanda PUSH %Podamo drugi operand CALL SESTEJ %Sestejemo vrednosti operandov LOCO 2 %Vrednost prvega operanda PUSH %Podamo prvi operand LOCO 7 %Vrednost drugega operanda PUSH %Podamo drugi operand CALL SESTEJ %Sestejemo vrednosti operandov

DESP

Sintaksa: DESP količina
Mnemonik: DEcrement Stack Pointer (zmanjšaj kazalec sklada)

Poveča sklad za število elementov, katero določa vrednost v operandu količina.

Primer:

%Primer ukaza DESP DESP 9 %Ustvarimo sklad v katerem je 9 elementov LOCO 4 %Pripravimo vrednost, katera bo v skladu STOL 5 %Pripravljeno vrednost damo v sklad

INSP

Sintaksa: INSP količina
Mnemonik: INcrement Stack Pointer (povečaj kazalec sklada)

Zmanjša sklad za število elementov, katero določa vrednost v operandu količina.

Primer:

%Primer ukaza INSP LOCO 1 %Pripravimo vrednost, katera bo na skladu PUSH %Pripravljeno vrednost damo na sklad LOCO 8 %Pripravimo vrednost, katera bo na skladu PUSH %Pripravljeno vrednost damo na sklad INSP 2 %Odstranimo sklad

JNEG

Sintaksa: JNEG naslov|labela
Mnemonik: Jump if NEGative (skoči, če negativno)

Če je vrednost iz akumulatorja manjša od nič, v programski števec shrani naslov iz operanda. Naslov v operandu je lahko v obliki labele.

Primer:

%Primer ukaza JNEG LOCO -5 %V akumulator shranimo negativno vrednost JNEG L1 %Ali je vrednost iz akumulatorja manjša od nič LOCO 1 %V akumulator shranimo vrednost 1 JUMP L2 %Preskočimo naslednjo inštrukcijo L1 LOCO -1 %V akumulator shranimo vrednost -1 L2 PUSH %Vrednost iz akumulatorja damo tudi na sklad

JNZE

Sintaksa: JNZE naslov|labela
Mnemonik: Jump if Not ZEro (skoči, če ni ničla)

Če je vrednost iz akumulatorja različna od nič, v programski števec shrani naslov iz operanda. Naslov v operandu je lahko v obliki labele.

Primer:

%Primer ukaza JNZE LOCO 3 %V akumulator shranimo neničelno vrednost JNZE L1 %Ali je vrednost iz akumulatorja različna od nič LOCO 0 %V akumulator shranimo vrednost 0 JUMP L2 %Preskočimo naslednjo inštrukcijo L1 LOCO 1 %V akumulator shranimo vrednost 1 L2 PUSH %Vrednost iz akumulatorja damo tudi na sklad

JPOS

Sintaksa: JPOS naslov|labela
Mnemonik: Jump if POSitive (skoči, če pozitivno)

Če je vrednost iz akumulatorja večja ali enaka ničli, v programski števec shrani naslov iz operanda. Naslov v operandu je lahko v obliki labele.

Primer:

%Primer ukaza JPOS LOCO 7 %V akumulator shranimo pozitivno vrednost JPOS L1 %Ali je vrednost iz akumulatorja večja ali enaka ničli LOCO -1 %V akumulator shranimo vrednost -1 JUMP L2 %Preskočimo naslednjo inštrukcijo L1 LOCO 1 %V akumulator shranimo vrednost 1 L2 PUSH %Vrednost iz akumulatorja damo tudi na sklad

JUMP

Sintaksa: JUMP naslov|labela
Mnemonik: JUMP (skoči)

V programski števec shrani naslov iz operanda. Naslov v operandu je lahko v obliki labele.

Primer:

%Primer ukaza JUMP LOCO 5 %V akumulator shranimo vrednost 5 JUMP L %Preskočimo naslednjo inštrukcijo LOCO 0 %V akumulator shranimo vrednost 0 L PUSH %Vrednost iz akumulatorja damo tudi na sklad

JZER

Sintaksa: JZER naslov|labela
Mnemonik: Jump if ZERo (skoči, če ničla)

Če je vrednost iz akumulatorja enaka ničli, v programski števec shrani naslov iz operanda. Naslov v operandu je lahko v obliki labele.

Primer:

%Primer ukaza JZER LOCO 0 %V akumulator shranimo ničelno vrednost JZER L1 %Ali je vrednost iz akumulatorja enaka ničli LOCO -1 %V akumulator shranimo vrednost -1 JUMP L2 %Preskočimo naslednjo inštrukcijo L1 LOCO 1 %V akumulator shranimo vrednost 1 L2 PUSH %Vrednost iz akumulatorja damo tudi na sklad

LOCO

Sintaksa: LOCO konstanta
Mnemonik: LOad COnstant (naloži konstanto)

V akumulator shrani vrednost, katera je v operandu konstanta.

Primer:

%Primer ukaza LOCO LOCO 7 %V akumulator shranimo vrednost 7

LODD

Sintaksa: LODD izvor
Mnemonik: LOaD Direct (naloži direktno)

V akumulator shrani vrednost iz pomnilnika, katero določa naslov v operandu izvor.

Primer:

%Primer ukaza LODD LOCO 4 %Pripravimo vrednost, katera bo v pomnilniku STOD 8 %Shranimo pripravljeno vrednost v pomnilnik LOCO 0 %"Pocistimo" akumulator LODD 8 %Nalozimo vrednost iz pomnilnika

LODI

Sintaksa: LODI izvor
Mnemonik: LOaD Indirect (naloži posredno)

Iz pomnilnika prebere vrednost, katero določa naslov v operandu izvor. Prebrana vrednost postane novi naslov. Zatem v akumulator shrani vrednost iz pomnilnika, katero določa novi naslov.

Primer:

%Primer ukaza LODI LOCO 3 %Pripravimo vrednost, katera bo v pomnilniku STOD 8 %Shranimo pripravljeno vrednost v pomnilnik LOCO 8 %Pripravimo naslov, kateri bo v pomnilniku STOD 9 %Shranimo pripravljeni naslov v pomnilnik LOCO 0 %"Pocistimo" akumulator LODI 9 %Nalozimo vrednost iz pomnilnika

LODL

Sintaksa: LODL izvor
Mnemonik: LOaD Local (naloži lokalno)

V akumulator shrani vrednost iz sklada. Oddaljenost omenjene vrednosti od vrha sklada določa vrednost v operandu izvor.

Primer:

%Primer ukaza LODL LOCO 8 %Pripravimo vrednost, katera bo na skladu PUSH %Pripravljeno vrednost damo na sklad LOCO 3 %Pripravimo vrednost, katera bo na skladu PUSH %Pripravljeno vrednost damo na sklad LODL 1 %V akumulator shranimo vrednost iz sklada LODL 0 %V akumulator shranimo vrednost iz vrha sklada

POP

Sintaksa: POP
Mnemonik: POP (vzami (s sklada))

Iz vrha sklada pobere vrednost in jo shrani v akumulator. Pri tem se velikost sklada zmanjša za 1 element.

Primer:

%Primer ukaza POP LOCO 4 %Pripravimo vrednost, katera bo na skladu PUSH %Pripravljeno vrednost damo na sklad LOCO 7 %Pripravimo vrednost, katera bo na skladu PUSH %Pripravljeno vrednost damo na sklad LOCO 0 %V akumulator shranimo vrednost 0 POP %Iz vrha sklada poberemo vrednost in jo shranimo v akumulator POP %Poberemo še eno vrednost

POPI

Sintaksa: POPI
Mnemonik: POP Indirect (vzami (s sklada) posredno)

Iz vrha sklada pobere vrednost in jo shrani v pomnilnik na naslov, ki je v akumulatorju. Pri tem se velikost sklada zmanjša za 1 element.

Primer:

%Primer ukaza POPI LOCO 6 %Pripravimo vrednost, katera bo na skladu PUSH %Pripravljeno vrednost damo na sklad LOCO 5 %Pripravimo vrednost, katera bo na skladu PUSH %Pripravljeno vrednost damo na sklad LOCO 8 %V akumulator shranimo naslov 8 POPI %Iz sklada poberemo vrednost in jo shranimo v pomnilnik LOCO 9 %V akumulator shranimo naslov 9 POPI %Iz sklada poberemo vrednost in jo shranimo v pomnilnik

PSHI

Sintaksa: PSHI
Mnemonik: PuSh Indirect (potisni (na sklad) posredno)

Na sklad shrani vrednost iz pomnilnika, katero določa naslov v akumulatorju. Pri tem se velikost sklada poveča za 1 element.

Primer:

%Primer ukaza PSHI LOCO 5 %Pripravimo vrednost, katera bo v pomnilniku STOD 8 %Shranimo pripravljeno vrednost v pomnilnik LOCO 3 %Pripravimo vrednost, katera bo v pomnilniku STOD 9 %Shranimo pripravljeno vrednost v pomnilnik LOCO 8 %V akumulator shranimo naslov 8 PSHI %Na sklad shranimo vrednost iz pomnilnika LOCO 9 %V akumulator shranimo naslov 9 PSHI %Na sklad shranimo vrednost iz pomnilnika

PUSH

Sintaksa: PUSH
Mnemonik: PUSH (potisni (na sklad))

Na vrh sklada shrani vrednost iz akumulatorja. Pri tem se velikost sklada poveča za 1 element, kazalec sklada (SP) se zmanjša.

Primer:

%Primer ukaza PUSH LOCO 6 %V akumulator shranimo vrednost 6 PUSH %Na sklad shranimo vrednost iz akumulatorja LOCO 2 %V akumulator shranimo vrednost 2 PUSH %Na sklad shranimo vrednost iz akumulatorja

RETN

Sintaksa: RETN
Mnemonik: RETurN (vrni)

Iz sklada pobere naslov in ga spremeni tako, da kaže na naslednjo pomnilniško lokacijo. Zatem ga shrani v programski števec.

Primer:

%Primer ukaza RETN JUMP GLAVNI %Vstopimo v glavni program SIGNUM LODL 1 %Vrednost operanda JZER L1 %Ali je vrednost operanda enaka ničli JPOS L2 %Ali je vrednost operanda pozitivna LOCO -1 %Rezultat za negativno vrednost operanda RETN %Izstopimo iz funkcije SIGNUM L1 LOCO 0 %Rezultat za ničelno vrednost operanda RETN %Izstopimo iz funkcije SIGNUM L2 LOCO 1 %Rezultat za pozitivno vrednost operanda RETN %Izstopimo iz funkcije SIGNUM GLAVNI LOCO 8 %Vrednost operanda PUSH %Podamo operand CALL SIGNUM %Določimo signum od vrednosti operanda

STOD

Sintaksa: STOD ponor
Mnemonik: STOre Direct (shrani direktno)

V pomnilnik na naslov, ki je v operandu ponor, shrani vrednost iz akumulatorja.

Primer:

%Primer ukaza STOD LOCO 5 %Pripravimo vrednost, katera bo v pomnilniku STOD 8 %Shranimo pripravljeno vrednost v pomnilnik

STOI

Sintaksa: STOI ponor
Mnemonik: STOre Indirect (shrani posredno)

Iz pomnilnika prebere vrednost, katero določa naslov v operandu ponor. Prebrana vrednost postane novi naslov. Zatem v pomnilnik na novi naslov shrani vrednost iz akumulatorja.

Primer:

%Primer ukaza STOI LOCO 9 %Pripravimo naslov, kateri bo v pomnilniku STOD 8 %Shranimo pripravljeni naslov v pomnilnik LOCO 6 %Pripravimo vrednost, katera bo v pomnilniku STOI 8 %Shranimo pripravljeno vrednost v pomnilnik

STOL

Sintaksa: STOL ponor
Mnemonik: STOre Local (shrani lokalno)

V sklad shrani vrednost iz akumulatorja. Oddaljenost omenjene shrambe od vrha sklada določa vrednost v operandu ponor.

Primer:

%Primer ukaza STOL DESP 4 %Ustvarimo sklad LOCO 8 %V akumulator shranimo vrednost 8 STOL 2 %V sklad shranimo vrednost iz akumulatorja STOL 0 %Na vrh sklada shranimo vrednost iz akumulatorja

SUBD

Sintaksa: SUBD izvor
Mnemonik: SUBtract Direct (odštej direktno)

Odšteje vrednost iz pomnilnika, katero določa naslov v operandu izvor, od vrednosti iz akumulatorja. Rezultat shrani v akumulator.

Primer:

%Primer ukaza SUBD LOCO 2 %Pripravimo vrednost, katera bo v pomnilniku STOD 8 %Shranimo pripravljeno vrednost v pomnilnik LOCO 5 %Shranimo novo vrednost v akumulator SUBD 8 %Odstejemo vrednost iz pomnilnika od vrednosti iz akumulatorja

SUBI

Sintaksa: SUBI izvor
Mnemonik: SUBtract Indirect (odštej posredno)

Iz pomnilnika prebere vrednost, katero določa naslov v operandu izvor. Prebrana vrednost postane novi naslov. Zatem odšteje vrednost iz pomnilnika, katero določa novi naslov, od vrednosti iz akumulatorja. Rezultat shrani v akumulator.

Primer:

%Primer ukaza SUBI LOCO 3 %Pripravimo vrednost, katera bo v pomnilniku STOD 8 %Shranimo pripravljeno vrednost v pomnilnik LOCO 8 %Pripravimo naslov, kateri bo v pomnilniku STOD 9 %Shranimo pripravljeni naslov v pomnilnik LOCO 4 %Shranimo novo vrednost v akumulator SUBI 9 %Odstejemo vrednost iz pomnilnika od vrednosti iz akumulatorja

SUBL

Sintaksa: SUBL izvor
Mnemonik: SUBtract Local (odštej lokalno)

Odšteje vrednost iz sklada od vrednosti iz akumulatorja. Oddaljenost omenjene vrednosti od vrha sklada določa vrednost v operandu izvor. Rezultat shrani v akumulator.

Primer:

%Primer ukaza SUBL LOCO 4 %Pripravimo vrednost, katera bo na skladu PUSH %Pripravljeno vrednost damo na sklad LOCO 5 %Pripravimo vrednost, katera bo na skladu PUSH %Pripravljeno vrednost damo na sklad LOCO 6 %V akumulator shranimo vrednost 6 SUBL 1 %Odstejemo vrednost iz sklada od vrednosti iz akumulatorja SUBL 0 %Odstejemo vrednost iz vrha sklada od vrednosti iz akumulatorja

SWAP

Sintaksa: SWAP
Mnemonik: SWAP (zamenjaj)

Akumulator in kazalec sklada med seboj zamenjata svoje vrednosti.

Primer:

%Primer ukaza SWAP LOCO 80 %V akumulator shranimo vrednost 80 SWAP %Zamenjamo vrednosti akumulatorja in kazalca sklada

Pogosta vprašanja in odgovori

Program se po dvojnem kliku ne zažene.

Program je starejše izdelave in na novejših operacijskih sistemih Windows privzeto ne deluje. Za zagon poskusite naslednje (v tem vrstnem redu):

Program se ob dvojem kliku ne zažene oz. mi javi napako "Failed to load control 'CommonDialog' from COMDLG32.OCX. Your version of COMDLG32.OCX may be outdated. Make sure you are using the version of the control that was provided with your application."

Poleg programa je tudi datoteka "COMDLG32.OCX". To datoteko skopirajte v mapo %WINDIR%\system32\, kjer je %WINDIR% pot do mape z Windows operacijskim sistemom (običajno C:\windows\). Pazite, ker na tej poti že obstaja datoteka z istim imenom. Priporočamo, da obstoječi datoteki v %WINDIR%\system32\ spremenite ime, preden izvedete kopiranje.

Kako lahko ugotovim kje imam napako v programu?

Preverite ali je napaka sintaktična:
Preverite ali je pravilno naložilo celoten program. V kolikor manjka kakšna programska vrstica, potem je v njej napaka. V kolikor je na zaslonu na levi strani kjerkoli znak "x" potem preverite to vrstico in vrstico pred njo saj se tu nahaja sintaktična napaka.

V primeru programske napake bo potrebno koračno izvajati program (glej odgovor spodaj). Ob sledenju izvajanja lahko ugotovite, kje je vaš algoritem (postopek) napačen oz. kje ste npr. pozabili naložiti ali shraniti neko vrednost. Opazujte registre in vrstico z sporočilom.

Kako lahko koračno izvajam program (namizna različica)?

S klikom na gumb "Vse prekinitvene točke" (kljukica) nastavimo, da se program ustavi v vsaki vrstici programa. S klikom na "Zazeni" se program izvede do naslednje prekinitve točke. Ker vsaka vrstica vsebuje prekinitveno točko se program izvaja koračno (ukaz za ukazom). Vedno se izvede ukaz iz lokacije na katero kaže register PC. Če želimo vrstico preskočiti ali izvesti že izvedene vrstice kliknemo na vrstico v programu in na gumb "PC". S tem PC kaže na označeno vrstico. Program lahko izvedemo do določene programske vrstice (izberemo vrstico in nato gumb z sliko roke: "Prekinitvena točka"). Nato od tu dalje izvajamo koračno ("Vse prekinitvene točke"), itd.

Kaj sta najpogostejši sintaktični napaki?

Študenti pozabijo, da mora pred ukazom mora prostor (presledki, tabulator) za labelo, četudi le-te ni. Primer napake (kjer ni presledka pred JUMP):

la5 LOCO 0 JUMP 10

Tipkarske napake pri labelah. Kjer se lokacija kamor želimo skočiti ne imenuje enako kot labela. Primer:

laBEl5 LOCO 0 JUMP labela5

Kaj sta najpogostejši programski napaki?

Študentje pogosto pri računanju (npr. povečevanju števca) pozabijo shraniti novo vrednos nazaj v pomnilnik.

Pri pogojnih skokih na lokacije, (nižje) študentje pogosto pozabijo, da se program izvaja zaporedno in je potrebno skočiti iz pogoja. Primer napake. V spodnjem primeru je po zagovnu na skladu vedno vrednost 5 in nikoli ni vrednosti -2, saj manjka skok preko vrsitice "pozitivno" ):

JPOS pozitiv LOCO -2 pozitv LOCO 5 PUSH