OpenBoot 2.x Command Reference Manual

Using Arithmetic Functions

The commands listed in Table 4-4 perform basic arithmetic with items on the data stack.

Table 4-4 Arithmetic Functions

Command 

Stack Diagram 

Description 

+

( nu1 nu2 -- sum ) 

Add nu1 + nu2.

-

( nu1 nu2 -- diff ) 

Subtract nu1 - nu2.

*

( nu1 nu2 -- prod ) 

Multiply nu1 * nu2.

/

( n1 n2 -- quot ) 

Divide n1 by n2; remainder is discarded.

/mod

( n1 n2 -- rem quot ) 

Remainder, quotient of n1 / n2.

<<

( x1 u -- x2 ) 

Synonym for lshift.

>>

( x1 u -- x2 ) 

Synonym for rshift.

>>a

( x1 u -- x2 ) 

Arithmetic right-shift x1 by u bits.

*/

( n1 n2 n3 -- quot ) 

n1 * n2 / n3.

*/mod

( n1 n2 n3 -- rem quot ) 

Remainder, quotient of n1 * n2 / n3.

1+

( nu1 -- nu2 ) 

Add 1. 

1-

( nu1 -- nu2 ) 

Subtract 1. 

2*

( nu1 -- nu2 ) 

Multiply by 2. 

2+

( nu1 -- nu2 ) 

Add 2. 

2-

( nu1 -- nu2 )  

Subtract 2. 

2/

( nu1 -- nu2 ) 

Divide by 2. 

abs

( n -- u ) 

Absolute value. 

aligned

( n1 -- n1 | a-addr) 

Round n1 up to the next multiple of 4.

and

( n1 n2 -- n3 ) 

Bitwise logical AND.

bounds

( startaddr len -- endaddr startaddr ) 

Convert startaddr len to endaddr startaddr for do loop.

bljoin

( b.low b2 b3 b.hi -- quad ) 

Join four bytes to form a 32-bit quadword. 

bwjoin

( b.low b.hi -- word ) 

Join two bytes to form a 16-bit word. 

d+

(d1 d2 -- d.sum ) 

Add two 64-bit numbers. 

d-

(d1 d2 --d.diff ) 

Subtract two 64-bit numbers. 

even

( n -- n | n+1 ) 

Round to nearest even integer >= n.

fm/mod

( d n -- rem quot ) 

Divide d by n.

invert

( x1 -- x2 ) 

Invert all bits of x1.

lbflip

( quad1 -- quad2 ) 

Swap the bytes within a 32-bit quadword 

lbsplit

( quad -- b.low b2 b3 b.hi ) 

Split a 32-bit quadword into four bytes. 

lwflip

( quad1 -- quad2 ) 

Swap halves of a 32-bit quadword. 

lwsplit

( quad -- w.low w.hi ) 

Split a 32-bit quadword into two 16-bit words. 

lshift

( x1 u -- x2 ) 

Left-shift x1 by u bits. Zero-fill low bits.

max

( n1 n2 -- n3 ) 

n3 is maximum of n1 and n2.

min

( n1 n2 -- n3 ) 

n3 is minimum of n1 and n2.

mod

( n1 n2 -- rem ) 

Remainder of n1 / n2.

negate

( n1 -- n2 ) 

Change the sign of n1.

not

( x1 -- x2 ) 

Synonym for invert.

or

( n1 n2 -- n3 ) 

Bitwise logical OR. 

rshift

( x1 u -- x2 ) 

Right-shift x1 by u bits. Zero-fill high bits.

s>d

( n1 -- d1 ) 

Convert a number to a double number. 

sm/rem

( d n -- rem quot ) 

Divide d by n, symmetric division.

u2/

( x1 -- x2 ) 

Logical right shift 1 bit; zero shifted into high bit. 

u*

(u1 u2 -- uprod ) 

Multiply 2 unsigned numbers yielding an unsigned product. 

u/mod

( u1 u2 -- urem uquot ) 

Divide unsigned 32-bit number by an unsigned 32-bit number; yield 32-bit remainder and quotient. 

um*

( u1 u2 -- ud ) 

Multiply 2 unsigned 32-bit numbers; yield unsigned double number product. 

um/mod

( ud u -- urem uprod ) 

Divide ud by u.

wbflip

( word1 -- word2 ) 

Swap the bytes within a 16-bit word. 

wbsplit

( word -- b.low b.hi ) 

Split 16-bit word into two bytes. 

wljoin

( w.low w.hi -- quad ) 

Join two words to form a quadword. 

xor

( x1 x2 --x3 ) 

Bitwise exclusive OR.