RPN32 - Seznam instrukcí
| Název | Mnemonický tvar | Popis nebo odpovídající výraz v jazyku C | Ovlivňuje/nastavuje | ||
|---|---|---|---|---|---|
| Manipulace s RPN stackem | Drop | Lift | Last X | ||
| Enter number | ENTER | (viz popis manipulace Lift) | |||
| Swap | x<>y | Přesun x→Y-registr, y→X-registr | • | ||
| Roll down | Rdn | (viz popis manipulace Roll down) | • | ||
| Roll up | Rup | (viz popis manipulace Roll up) | • | ||
| Clear X | CLx | Vynulování X-registru | |||
| Clear stack | CLST | Vynulování všech registrů RPN stacku | |||
| Last X | LASTx | Kopie l→X-registr | • | ||
| Operace s X-, Y- a Z-registrem RPN stacku | Drop | Lift | Last X | ||
| Compose LCN | LCN | Sestavení Loop Control-number z trojice hodnot: x→counter, y→final, z→increment | 2 | • | |
| Operace s X- a Y-registrem RPN stacku | Drop | Lift | Last X | ||
| Addition | + | y + x | • | • | • |
| Subtraction | − | y - x | • | • | • |
| Multiplication | * | y * x | • | • | • |
| Division | / | y / x | • | • | • |
| Division remainder | RMD | y % x | • | • | • |
| Disjunction | OR | y | x | • | • | • |
| Exclusive disjunction | XOR | y ^ x | • | • | • |
| Conjunction | AND | y & x | • | • | • |
| Shift left (N bytes) | SLn | y << x | • | • | • |
| Shift right (N bytes) | SRn | y >> x | • | • | • |
| Rotate left (N bytes) | RLn | Bitová rotace hodnoty y o x bitů vlevo | • | • | • |
| Rotate right (N bytes) | RRn | Bitová rotace hodnoty y o x bitů vpravo | • | • | • |
| Set bit | SB | y | 1 < x | • | • | • |
| Clear bit | CB | y & ~(1 << x) | • | • | • |
| Change bit | XB | y ^ 1 << x | • | • | • |
| Bit value | B? | (y & 1 << x) != 0 | • | • | • |
| Operace s X-registrem RPN stacku | Drop | Lift | Last X | ||
| Change sign | CHS | -x | • | ||
| Complement | NOT | ~x | • | • | |
| Absolute value | ABS | Absolutní hodnota (respektuje druh provozu SIGNED resp. UNSIGNED) | • | • | |
| Signum | SIGN | Funkce znaménka (respektuje druh provozu SIGNED resp. UNSIGNED) | • | • | |
| Shift left (1 byte) | SL | x << 1 | • | • | |
| Shift right (1 byte) | SR | x >> 1 | • | • | |
| Rotate left (1 byte) | RL | Bitová rotace hodnoty x o 1 bit vlevo | • | • | |
| Rotate right (1 byte) | RR | Bitová rotace hodnoty x o 1 bit vpravo | • | • | |
| Mask left | MASKL |
Bitová maska šíře x od nejvyššího bitu
(1 << x) - 1 << wide - x |
• | • | |
| Mask right | MASKR |
Bitová maska šíře x od nejnižšího bitu
(1 << x) - 1 |
• | • | |
| Extension from byte | CONVB | Znaménkové rozšíření hodnoty x bitové šíře Byte (8 bitů) | • | • | |
| Extension from word | CONVW | Znaménkové rozšíření hodnoty x bitové šíře Word (16 bitů) | • | • | |
| Left justify | LJ | Hodnota x je posunuta vlevo o tolik bitů, kolik je třeba pro umístění prvního nenulového bitu zleva do MSB. Tento počet bitů je umístěn do X-registru, v Y-registru je výsledná hodnota (Viz údaj v sloupci Drop) | -1 | • | • |
| Counter of LCN | COUNT | Hodnota v x je chápana jako Loop Control-number. Z ní je „vypreparována“ složka counter | • | • | |
| Number of bits | NB | Počet nastavených bitů v hodnotě x | • | • | |
| Word size | WSIZE | Hodnota v x v rozsahu 0..32 určuje bitovou šířku (viz též IWSIZE) | • | • | • |
| Allocate local regs | PUSH | Alokace lokálních registrů v počtu daném hodnotou v x (viz též IPUSH a také flag č. 27) | • | • | • |
| Flags | Drop | Lift | Last X | ||
| Set flag |
SF f SF @r SF @s |
Nastavení | • | ||
| Clear flag |
CF f CF @r CF @s |
Shození | • | ||
| Change flag |
XF f XF @r XF @s |
Změna stavu | • | ||
| Flag value |
F? f F? @r F? @s |
Přenesení hodnoty flag do X-registru | • | ||
| Operace s paměťovými registry | Drop | Lift | Last X | ||
| Store |
STO r STO @r STO s STO @s |
Uložení x do paměťového registru | • | ||
| Storage addition |
STO+ r STO+ @r STO+ s STO+ @s |
Přičtení x k hodnotě paměťového registru | • | ||
| Storage subtracion |
STO- r STO- @r STO- s STO- @s |
Odečtení x od hodnoty paměťového registru | • | ||
| Storage multiplication |
STO* r STO* @r STO* s STO* @s |
Vynásobení hodnoty paměťového registru hodnotou x | • | ||
| Storage division |
STO/ r STO/ @r STO/ s STO/ @s |
Vydělení hodnoty paměťového registru hodnotou x | • | ||
| Storage flags | STO F | Uložení x do registru flags | • | ||
| Recall |
RCL r RCL @r RCL s RCL @s |
Vyčtení obsahu paměťového registru do X-registru | • | ||
| Recall addition |
RCL+ r RCL+ @r RCL+ s RCL+ @s |
Přičtení hodnoty paměťového registru k x | • | ρ | |
| Recall subtracion |
RCL- r RCL- @r RCL- s RCL- @s |
Odečtení hodnoty paměťového registru od x | • | ρ | |
| Recall multiplication |
RCL* r RCL* @r RCL* s RCL* @s |
Vynásobení x hodnotou paměťového registru | • | ρ | |
| Recall division |
RCL/ r RCL/ @r RCL/ s RCL/ @s |
Vydělení x hodnotou paměťového registru | • | ρ | |
| Recall flags | RCL F | Vyčtení obsahu registru flags do X-registru | • | ρ | |
| Exchange |
x<> r x<> @r x<> s x<> @s |
Záměna obsahu X-registru a paměťového registru | • | ||
| Increment |
INC r INC @r INC s INC @s |
Přičtení 1 k obsahu paměťového registru | • | ι | |
| Decrement |
DEC r DEC @r DEC s DEC @s |
Odečtení 1 od obsahu paměťového registru | • | ι | |
| Větvení programu | Drop | Lift | Last X | ||
| Label | LBL b | Návěští definuje místo, na které se běh programu bezpodmínečně nastaví vykonáním instrukcí GTO resp. XEQ | • | ||
| Go to |
GTO b GTO @r GTO @s |
Skok na místo v programu označené instrukcí LBL se stejným operandem b, který obsahuje tato instrukce nebo registr r resp. s | • | ||
| Execute |
XEQ b XEQ @r XEQ @s |
Volání podprogramu. Totéž co instrukce GTO, navíc je uložena návratová adresa adresující instrukci následující za instrukcí XEQ. Podprogram by měl končit instrukcí RTN, která skok na návratovou adresu vykoná | • | ||
| Return | RTN | Návrat z podprogramu. Viz instrukce XEQ | • | ||
| Equal to |
x==0? x==y? |
Porovnání x s nulou resp. s y. Je-li podmínka testu splněna, následující instrukce je provedena. V opačném případě je následující instrukce přeskočena | • | ||
| Not equal to |
x!=0? x!=y? |
• | |||
| Less then |
x<0? x<y? |
• | |||
| Less or equal |
x<=0? x<=y? |
• | |||
| Greater than |
x>0? x>y? |
• | |||
| Greater or equal |
x>=0? x>=y? |
• | |||
| BIT SET test | BS? | Test bitu určeného hodnotou x v hodnotě y. Je-li bit nastaven, následující instrukce je provedena. V opačném případě je následující instrukce přeskočena | • | • | |
| BIT SET test and clear | BS?C | Totéž co instrukce BS?, navíc je testovaný bit vždy shozen | • | • | |
| BIT CLEAR test | BC? | Test bitu určeného hodnotou x v hodnotě y. Je-li bit shozen, následující instrukce je provedena. V opačném případě je následující instrukce přeskočena | • | • | |
| BIT CLEAR test and clear | BC?C | Totéž co instrukce BC?, navíc je testovaný bit vždy shozen | • | • | |
| FLAG SET test |
FS? f FS? @r FS? @s |
Test flagu určeného operandem f nebo obsahem registrů r resp. s. Je-li flag nastaven, následující instrukce je provedena. V opačném případě je následující instrukce přeskočena | • | ||
| FLAG SET test and clear |
FS?C f FS?C @r FS?C @s |
Totéž co instrukce FS?, navíc je testovaný flag vždy shozen | • | ||
| FLAG CLEAR test |
FC? f FC? @r FC? @s |
Test flagu určeného operandem f nebo obsahem registrů r resp. s. Je-li flag shozen, následující instrukce je provedena. V opačném případě je následující instrukce přeskočena | • | ||
| FLAG CLEAR test and clear |
FC?C f FC?C @r FC?C @s |
Totéž co instrukce FC?, navíc je testovaný flag vždy shozen | • | ||
| Increment and skip if greater than |
ISG r ISG @r ISG s ISG @s |
Operand obsahuje/adresuje Loop Control-number. Je-li counter po zvýšení o interval větší než final, následující instrukce je přeskočena. V opačném případě je následující instrukce provedena | • | ||
| Decrement and skip if less than or equal to |
DSE r DSE @r DSE s DSE @s |
Operand obsahuje/adresuje Loop Control-number. Je-li counter po snížení o interval menší nebo rovnen final, následující instrukce je přeskočena. V opačném případě je následující instrukce provedena | • | ||
| Increment and skip if zero |
ISZ r ISZ @r ISZ s ISZ @s |
Je-li hodnota obsažená/adresovaná operandem po zvýšení o 1 rovna nule, následující instrukce je přeskočena. V opačném případě je následující instrukce provedena | • | ||
| Decrement and skip if zero |
DSZ r DSZ @r DSZ s DSZ @s |
Je-li hodnota obsažená/adresovaná operandem po snížení o 1 rovna nule, následující instrukce je přeskočena. V opačném případě je následující instrukce provedena | • | ||
| Direktivy | Drop | Lift | Last X | ||
| Stop executing | STOP | Zastavení běhu programu. Funkce rpn32_run() ukončí svoji činnost s návratovou hodnotou RPN32_RTNVAL_STOP | |||
| Pause | PSE | Vykonává-li instrukce programu funkce rpn32_run() s argumentem __type obsazeným hodnotou RPN32_RUN_CB_TYPE_PSE je činnost této instrukce realizována voláním callbacku. Další popis viz RPNPROC | |||
| Mode signed | SGN | Nastavení druhu provozu SIGNED. Hodnoty jsou zpracovávány jako znaménkové (ve dvojkovém doplňku) | |||
| Mode unsigned | UNS | Nastavení druhu provozu UNSIGNED. Hodnoty jsou zpracovávány jako bezznaménkové | |||
| Bit wide |
WIDE B WIDE W WIDE D |
Nastavení šířky slova podle operandu: Byte (8 bitů), Word (16 bitů), Double word (32 bitů). Instrukce ponechána z důvodu kompatibility s RPNPROC. Vhodnější je použití IWSIZ nebo WSIZE | |||
| Word size | IWSIZ n | Hodnota operandu v rozsahu 0..32 určuje bitovou šířku (viz též WSIZE) | |||
| Allocate local regs | IPUSH n | Alokace lokálních registrů v počtu daném hodnotou operandu v rozsahu 1..32767 (viz též PUSH a také flag č. 27) | |||
| Release local regs | POP | Uvolnění lokálních registrů | |||
| Drop | Lift | Last X | |||
Termín program, který se prolíná celou tabulkou seznamu instrukcí znamená vždy RPN program.
Operandy instrukcí jsou v tabulce seznamu instrukcí zastoupeny různými znaky. Jejich význam vysvětluje odstavec názvosloví instrukční sady.
Některé INSTRUKCE jsou barevně vyznačené. Jsou to ty, které přináší RPN32 a v původním řešení RPNPROC se nevyskytovaly.
U skupiny instrukcí RCL kombinovaných s aritmetickými funkcemi je ve sloupci Last X znak ρ (řecké písmeno ró). Také u instrukcí INC a DEC je ve sloupci Last X neočekávaný znak ι (řecké písmeno ióta). Vliv činnosti těchto instrukcí na obsah registru LASTx je podmíněný aktuálním obsahem flags č. 28 resp. 29. Detaily v úvodních kapitolách.
Instrukce porovnání obsahu X-registru RPN stacku v sekci Větvení programu jsou zakončeny znakem ?. V původním řešení RPNPROC tyto instrukce otazník neobsahovaly. K rozporu přesto nedochází: RPN32 akceptuje obojí notaci.