Instrukční sada




Vysvětlivky k následující tabulce

V tabulce jsou víceméně srozumitelné pojmy. Zde je však (pro jistotu) výklad některých z nich:


Symbol RPNPROC_CODE_*:

Symbol, reprezentující binární hodnotu pro interpreter. Viz header rpnproc.h.


Lift:

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.


Drop:

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:

RegistrPůvodní hodnotaNová hodnota
T 5 5
Z 4 5
Y 3 4
X 2 3

Last X:

Viz instrukce Last X.


Přímý operand

Tvar přímého operandu (Immediate operand) může být dvojí:


Parametr "LLL"

Návěští v programu (viz instrukce LBL, GTO, XEQ). Dekadické číslo v rozsahu (0...999).


Parametr "VVV"

Přímá adresa proměnné. Dekadické číslo v rozsahu (0...999).


Parametr "@VVV"

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:





Tabulka instrukcí

NázevMnemonikaParametrSymbol RPNPROC_CODE_*LiftDropLast 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 - - -



ENTER

Posuv RPN stacku směrem vzhůru. Změny obsahů registrů ukazuje následující tabulka:

RegistrPůvodní hodnotaNová hodnota
T 5 4
Z 4 3
Y 3 2
X 2 2


x<>y

Záměna obsahů X- a Y-registru stacku.


Rdn

Rotace RPN stacku směrem dolů. Změny obsahů registrů ukazuje následující tabulka:

RegistrPůvodní hodnotaNová hodnota
T 5 2
Z 4 5
Y 3 4
X 2 3


Rup

Rotace RPN stacku směrem vzhůru. Změny obsahů registrů ukazuje následující tabulka:

RegistrPůvodní hodnotaNová hodnota
T 5 4
Z 4 3
Y 3 2
X 2 5


CLx

Vynulování X-registru stacku.


LASTx

Nastavení X-registru na hodnotu z interního registru, který je naplněn hodnotou X-registru před provedením některých operací.


Immediate operand

Přímý operand, číslo vstupující do X-registru.


+
-
*
/
RMD
OR
XOR
AND

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ář.


SLn
SRn
RLn
RRn

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.


SB
CB

Nastavení/vynulování bitu. Zpracovávaná hodnota je v Y-registru, číslo (index) bitu je v X-registru.


B?

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.


CHS

Změna znaménka X-registru.


NOT

Bitová negace (komplement) X-registru.


SL
SR
RL
RR

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.


MASKL
MASKR

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.


CONVB
CONVW

Znaménkové rozšíření hodnoty byte resp. word na dword.


STO

Uložení obsahu X-registru do proměnné.


STO+
STO-
STO*
STO/

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í.)


RCL

Vyzvednutí obsahu proměnné (do X-registru).


RCL+
RCL-
RCL*
RCL/

Vyzvednutí výsledku operace X-registr ÷ proměnná do X-registru. (Symbol ÷ je zde v roli zástupce všech čtyř aritmetických operací.)


x<>

Záměna obsahu proměnné a X-registru.


LBL

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.


GTO

Skok na místo v programu označené instrukcí LBL se stejným parametrem, jaký je obsažen v této instrukci.


XEQ

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á.


RTN

Návrat z podprogramu. Viz instrukce XEQ.


DSE
ISG

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 variable
Je 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:

  1. Counter - aktuální/počáteční hodnota. Je měněna přírůstkem resp. úbytkem (podle typu instrukce ISG resp. DSE).
  2. Final - koncová hodnota podmiňující konec provádění smyčky. Jedná se o podmínky větší resp. rovno (podle typu instrukce ISG resp. DSE). (Hodnota se činností instrukce nemění.)
  3. Interval - hodnota přírůstku resp. úbytku (podle typu instrukce ISG resp. DSE). Hodnota 0, která by nevedla ke konci, je uvažována jako 1. (Hodnota se činností instrukce nemění.)

Rozložení těchto tří částí v 32 bitech proměnné ukazuje následující tabulka:

Interval Final Counter
31 30 29 28 27 26 25 24
23 22 21 20 19 18 17 16
15 14 13 12 11 10 09 08 07 06 05 04 03 02 01 00


x==
x!=
x<
x<=
x>
x>=

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.


STOP

Zastavení běhu programu. Funkce rpnproc_execute() vrátí aktuální hodnotu X-registru.


PSE

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.


WIDE

Nastavení šířky slova podle parametru:


SGN

Nastavení druhu provozu SIGNED. Operandy jsou chápany jako hodnoty se znaménkem (ve dvojkovém doplňku).


UNS

Nastavení druhu provozu UNSIGNED. Operandy jsou chápany jako hodnoty bez znaménka.


Link to continued job

Parametrem této instrukce (v binárním tvaru) je pointer na další (zřetězený) tok instrukcí. Instrukce nemá mnemonický ekvivalent.


End of job

Konec programu. Instrukce nemá mnemonický ekvivalent.