Next: Control-Related Instructions
Up: Primitive Instructions
Previous: Primitive Instructions
Basic Data Stack-Related Instructions
- ARITHMETIC.
c0(),c1(), c2(), ..., c5() return constants 0, 1, 2, 3, 4, 5, respectively;
inc(x) returns
;
dec(x) returns
;
by2(x) returns
;
add(x,y) returns
;
sub(x,y) returns
;
mul(x,y) returns
;
div(x,y) returns the smallest integer
;
powr(x,y) returns
(and costs
unit time steps).
- BOOLEAN.
Operand eq(x,y) returns 1 if
, otherwise 0.
Analogously for
geq(x,y) (greater or equal),
grt(x,y) (greater).
Operand
and(x,y) returns 1 if
and
, otherwise 0.
Analogously for or(x,y).
Operand not(x) returns
1 if
, otherwise 0.
- SIMPLE STACK MANIPULATORS.
del() decrements dp;
clear() sets
;
dp2ds() returns dp;
setdp(x) sets
;
ip2ds() returns
;
base() returns
;
fromD() returns
;
toD() pushes
onto Ds;
delD() decrements Dp;
topf() returns the integer name of the most recent self-made function;
intopf() and outopf() return its number of requested inputs and
outputs, respectively;
popf() decrements fnp, returning its old value;
xmn(m,n) exchanges the
-th and the
-th
elements of ds, measured from the stack's top;
ex() works like xmn(1,2);
xmnb(m,n) exchanges the
-th and the
-th
elements above the current base
;
outn(n) returns
;
outb(n) returns
(the
-th
element above the base pointer);
inn(n) copies
onto
;
innb(n) copies
onto
.
- PUSHING CODE. Instruction
getq(n)
pushes onto ds the sequence beginning at the start address of
the
-th frozen program (either user-defined or frozen by OOPS)
and ending with the program's final token.
insq(n,a)
inserts the
-th frozen program above
,
then increases dp by the program size.
Useful for copying previously frozen code into modifiable
memory, to later edit the copy.
- EDITING STRINGS ON STACK. Instruction
cpn(n) copies the n topmost ds entries onto the top of ds,
increasing dp by
;
up() works like cpn(1);
cpnb(n) copies
ds entries above
onto the top of ds, increasing dp by
;
mvn(a,b,n) copies
the
ds entries starting with
to
and following cells,
appropriately increasing dp if necessary;
ins(a,b,n) inserts the
ds entries above
after
, appropriately increasing dp;
deln(a,n) deletes
the
ds entries above
,
appropriately decreasing dp;
find(x) returns the stack index of the topmost entry in ds matching
;
findb(x) the index of the first ds entry above base
matching
.
Many of the above instructions can be used to edit stack contents
that may later be interpreted as executable code.
Next: Control-Related Instructions
Up: Primitive Instructions
Previous: Primitive Instructions
Juergen Schmidhuber
2004-04-15
Back to OOPS main page