V tabulce jsou víceméně srozumitelné pojmy. Zde je však (pro jistotu) výklad některých z nich:
Symbol, reprezentující binární hodnotu pro interpreter. Viz header rpnproc.h.
V originále: "The automatic lifting of the stack's contents". V tomto sloupci označené instrukce nastaví vnitřní příznak pro automatické posunutí RPN stacku směrem vzhůru při vkládání nové číselné hodnoty do stacku. Vložení nové hodnoty způsobí instrukce RCL, IMOP.
Instrukce pracující se dvěma operandy v X- a Y-registru stacku provádějí operaci podle následujícího postupu (pro znázornění je použit operátor ÷):
Změny obsahů registrů ukazuje následující tabulka:
Registr | Původní hodnota | Nová hodnota |
---|---|---|
T | 5 | 5 |
Z | 4 | 5 |
Y | 3 | 4 |
X | 2 | 3 |
Viz instrukce Last X.
Tvar přímého operandu (Immediate operand) může být dvojí:
Návěští v programu (viz instrukce LBL, GTO, XEQ). Dekadické číslo v rozsahu (0...999).
Přímá adresa proměnné. Dekadické číslo v rozsahu (0...999).
Nepřímá adresa proměnné. Nebo také přímá adresa proměnné, která obsahuje číslo použité pro skutečnou adresaci jiné proměnné nebo návěští. Dekadické číslo v rozsahu (0...999).
Příklad:
Je-li obsahem proměnné 17 číslo 4, instrukce:
Název | Mnemonika | Parametr | Symbol RPNPROC_CODE_* | Lift | Drop | Last X |
---|---|---|---|---|---|---|
Enter | ENTER | · | ENTER | - | - | - |
Swap | x<>y | · | SWAP | • | - | - |
Roll down | Rdn | · | RDN | • | - | - |
Roll up | Rup | · | RUP | • | - | - |
Clear X | CLx | · | CLX | - | - | - |
Last X | LASTx | · | LASTX | • | - | - |
Immediate operand | · | · | IMOP | • | - | - |
Addition | + | · | ADD | • | • | • |
Subtraction | - | · | SUB | • | • | • |
Multiplication | * | · | MUL | • | • | • |
Division | / | · | DIV | • | • | • |
Division remainder | RMD | · | RMD | • | • | • |
Disjunction | OR | · | OR | • | • | • |
Exclusive disjunction | XOR | · | XOR | • | • | • |
Conjunction | AND | · | AND | • | • | • |
Shift left (N bytes) | SLn | · | SLN | • | • | • |
Shift right (N bytes) | SRn | · | SRN | • | • | • |
Rotate left (N bytes) | RLn | · | RLN | • | • | • |
Rotate right (N bytes) | RRn | · | RRN | • | • | • |
Set bit | SB | · | SB | • | • | • |
Clear bit | CB | · | CB | • | • | • |
Test bit | B? | · | BIT | • | • | • |
Change sign | CHS | · | CHS | • | - | - |
Complement | NOT | · | NOT | • | - | • |
Shift left (1 byte) | SL | · | SL1 | • | - | • |
Shift right (1 byte) | SR | · | SR1 | • | - | • |
Rotate left (1 byte) | RL | · | RL1 | • | - | • |
Rotate right (1 byte) | RR | · | RR1 | • | - | • |
Mask left | MASKL | · | MASKL | • | - | • |
Mask right | MASKR | · | MASKR | • | - | • |
Coversion from byte | CONVB | · | CONVB | • | - | • |
Coversion from word | CONVW | · | CONVW | • | - | • |
Store | STO | VVV @VVV |
STO ISTO |
• | - | - |
Storage addition | STO+ | VVV @VVV |
STOADD ISTOADD |
• | - | - |
Storage subtracion | STO- | VVV @VVV |
STOSUB ISTOSUB |
• | - | - |
Storage multiplication | STO* | VVV @VVV |
STOMUL ISTOMUL |
• | - | - |
Storage division | STO/ | VVV @VVV |
STODIV ISTODIV |
• | - | - |
Recall | RCL | VVV @VVV |
RCL IRCL |
• | - | - |
Recall addition | RCL+ | VVV @VVV |
RCLADD IRCLADD |
• | - | - |
Recall subtracion | RCL- | VVV @VVV |
RCLSUB IRCLSUB |
• | - | - |
Recall multiplication | RCL* | VVV @VVV |
RCLMUL IRCL |
• | - | - |
Recall division | RCL/ | VVV @VVV |
RCLDIV IRCL |
• | - | - |
Exchange | x<> | VVV @VVV |
XCHG IXCHG |
• | - | - |
Label | LBL | LLL | LBL | - | - | - |
Go to | GTO | LLL @VVV |
GTO IGTO |
• | - | - |
Execute | XEQ | LLL @VVV |
XEQ IXEQ |
• | - | - |
Return | RTN | · | RTN | • | - | - |
Decrement, skip if less or equal to | DSE | VVV @VVV |
DSE IDSE |
• | - | - |
Increment, skip if great then | ISG | VVV @VVV |
ISG IISG |
• | - | - |
Equal to | x== | 0 y |
EQ0 EQY |
• | - | - |
Not equal to | x!= | 0 y |
NE0 NEY |
• | - | - |
Less then | x< | 0 y |
LT0 LTY |
• | - | - |
Less or equal | x<= | 0 y |
LE0 LEY |
• | - | - |
Greater than | x> | 0 y |
GT0 GTY |
• | - | - |
Greater or equal | x>= | 0 y |
GE0 GEY |
• | - | - |
Stop execute | STOP | · | STOP | - | - | - |
Pause | PSE | · | PSE | - | - | - |
Bit wide | WIDE | B W D |
WIDEB WIDEW WIDED |
- | - | - |
Mode signed | SGN | · | SGN | - | - | - |
Mode unsigned | UNS | · | UNS | - | - | - |
Link to continued job | · | · | JOB | - | - | - |
End of job | · | · | END | - | - | - |
Posuv RPN stacku směrem vzhůru. Změny obsahů registrů ukazuje následující tabulka:
Registr | Původní hodnota | Nová hodnota |
---|---|---|
T | 5 | 4 |
Z | 4 | 3 |
Y | 3 | 2 |
X | 2 | 2 |
Záměna obsahů X- a Y-registru stacku.
Rotace RPN stacku směrem dolů. Změny obsahů registrů ukazuje následující tabulka:
Registr | Původní hodnota | Nová hodnota |
---|---|---|
T | 5 | 2 |
Z | 4 | 5 |
Y | 3 | 4 |
X | 2 | 3 |
Rotace RPN stacku směrem vzhůru. Změny obsahů registrů ukazuje následující tabulka:
Registr | Původní hodnota | Nová hodnota |
---|---|---|
T | 5 | 4 |
Z | 4 | 3 |
Y | 3 | 2 |
X | 2 | 5 |
Vynulování X-registru stacku.
Nastavení X-registru na hodnotu z interního registru, který je naplněn hodnotou X-registru před provedením některých operací.
Přímý operand, číslo vstupující do X-registru.
Aritmetické a logické operace. X- a Y-registry jsou obsazeny příslušnými operandy podle vysvětlivky Drop.
RMD je zbytek po dělení (Modulo). Ostatní nepotřebují další komentář.
Bitové posuvy a rotace. Posouvaná/rotovaná hodnota je v Y-registru, počet kroků bitový posuvů (vyjádřeno literou n ve jménu instrukce) je v X-registru. Výpočet respektuje nastavenou šířkou slova - viz instrukce WIDE, instrukce SRn navíc nastavení druhu provozu - viz SGN resp. UNS.
Nastavení/vynulování bitu. Zpracovávaná hodnota je v Y-registru, číslo (index) bitu je v X-registru.
Zjištění hodnoty bitu. Testovaná hodnota je v Y-registru, číslo (index) bitu je v X-registru. Výsledkem je hodnota 0 nebo 1.
Změna znaménka X-registru.
Bitová negace (komplement) X-registru.
Bitové posuvy a rotace o jeden bit. Posouvaná/rotovaná hodnota je v X-registru. Výpočet respektuje nastavenou šířkou slova - viz instrukce WIDE, instrukce SR navíc nastavení druhu provozu - viz SGN resp. UNS.
Hodnota v X-registru udává šířku bitové masky (nepřetržitou sérii hodnot 1 v binárním tvaru slova) nastavenou zleva (od nejvýznamnějších bitů) resp. zprava (od nejméně významných bitů). Výpočet respektuje nastavenou šířkou slova - viz instrukce WIDE.
Znaménkové rozšíření hodnoty byte resp. word na dword.
Uložení obsahu X-registru do proměnné.
Uložení výsledku operace proměnná ÷ X-registr do proměnné. (Symbol ÷ je zde v roli zástupce všech čtyř aritmetických operací.)
Vyzvednutí obsahu proměnné (do X-registru).
Vyzvednutí výsledku operace X-registr ÷ proměnná do X-registru. (Symbol ÷ je zde v roli zástupce všech čtyř aritmetických operací.)
Záměna obsahu proměnné a X-registru.
Návěští v programu. Doplněno parametrem definuje místo v programu, na které se běh programu bezpodmínečně nastaví vykonáním instrukcí GTO resp. XEQ.
Skok na místo v programu označené instrukcí LBL se stejným parametrem, jaký je obsažen v této instrukci.
Volání podprogramu. Totéž co instrukce GTO. Navíc je uložena návratová adresa adresující instrukci v programu následující za instrukcí XEQ. Podprogram by měl končit instrukcí RTN, která skok na návratovou adresu vykoná.
Návrat z podprogramu. Viz instrukce XEQ.
Realizace programové smyčky. Instrukce fungují tak, že při splnění podmínky pro ukončení programové smyčky je následující instrukce přeskočena. Činnost těchto instrukcí lze přirovnat ke konstrukci programové smyčky v jazyku BASIC:
FOR variable=counter TO final STEP interval : : NEXT variableJe zde vidět trojice hodnot (counter, final a interval). Ty jsou sdruženy do tzv. "Loop Control-number" a uloženy v proměnné, která tvoří parametr instrukce DSE resp.ISG:
Rozložení těchto tří částí v 32 bitech proměnné ukazuje následující tabulka:
Interval | Final | Counter | ||||||||||||||||||||||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
|
|
|
Skupina instrukcí pro větvení programu porovnává hodnotu v X-registru s parametrem. Tím je hodnota 0 resp. obsah Y-registru. Je-li splněna podmínka, kterou tyto instrukce reprezentují, je následující instrukce provedena. V případě opačném je přeskočena.
Zastavení běhu programu. Funkce rpnproc_execute() vrátí aktuální hodnotu X-registru.
Název "Pause" je pro tuto instrukci možná poněkud zavádějící. Nejedná se o skutečné pozastavení běhu programu na určitou dobu, ale o zavolání uživatelské funkce (callback), jejíž adresa může být předána funkci rpnproc_execute(). Hlavním účelem této instrukce je možnost zobrazení mezivýsledků a to už je termín bližší názvosloví programovatelných kalkulátorů. Koneckonců, to zpoždění (delay, sleep) je možné v uživatelské funkci realizovat, a rázem souhlasí i název této instrukce.
Nastavení šířky slova podle parametru:
Nastavení druhu provozu SIGNED. Operandy jsou chápany jako hodnoty se znaménkem (ve dvojkovém doplňku).
Nastavení druhu provozu UNSIGNED. Operandy jsou chápany jako hodnoty bez znaménka.
Parametrem této instrukce (v binárním tvaru) je pointer na další (zřetězený) tok instrukcí. Instrukce nemá mnemonický ekvivalent.
Konec programu. Instrukce nemá mnemonický ekvivalent.