OpenBoot 3.x コマンド・リファレンスマニュアル

演算機能の使用方法

単精度整数演算

表 4-5に示すコマンドは、単精度整数演算を行います。

表 4-5 単精度演算機能

コマンド 

スタックダイアグラム 

説明 

+

( nu1 nu2 -- sum ) 

nu1 + nu2 の加算を行います。

-

( nu1 nu2 -- diff ) 

nu1 - nu2 の減算を行います。

*

( nu1 nu2 -- prod ) 

nu1 * nu2 の乗算を行います。

*/

( n1 n2 n3 -- quot ) 

nu1 * nu2 / n3 を計算します。入力、出力、中間値はすべて 1 つのセルに入ります。

/

( n1 n2 -- quot ) 

n1n2 で割ります。剰余は捨てられます。

1+

( nu1 -- nu2 ) 

1 を足します。 

1-

( nu1 -- nu2 ) 

1 を引きます。 

2+

( nu1 -- nu2 ) 

2 を足します。 

2-

( nu1 -- nu2 )  

2 を引きます。 

abs

( n -- u ) 

絶対値。 

bounds

( start len -- len+start start ) 

do または ?do ループ用に startlenendstart に変換します。

even

( n -- n | n+1 ) 

最も近い偶数の整数 >= n に丸めます。

max

( n1 n2 -- n3 ) 

n1 と n2 の大きいほうの値を n3 とします。 

min

( n1 n2 -- n3 ) 

n1 と n2 の小さいほうの値を n3 とします。 

mod

( n1 n2 -- rem ) 

n1 / n2 の剰余を計算します。

*/mod

( n1 n2 n3 -- rem quot ) 

n1 * n2 / n3 の剰余と商。

/mod

( n1 n2 -- rem quot ) 

n1 / n2 の剰余と商。

negate

( n1 -- n2 ) 

n1 の符号を変更します。

u*

(u1 u2 -- uprod ) 

符号なしの 2 つの数値を乗算し、符号なしの積を生じます。 

u/mod

( u1 u2 -- urem uquot ) 

符号なし 1 セル数値を符号なし 1 セル数値で割り、 1 セルの剰余と商を生じます。 

<<

( x1 u -- x2 ) 

lshift の同義語。

>>

( x1 u -- x2 ) 

rshift の同義語。

2*

( x1 -- x2 ) 

2 を掛けます。 

2/

( x1 -- x2 ) 

2 で割ります。 

>>a

( x1 u -- x2 ) 

x1u ビット 右に算術シフトします。

and

( x1 x2 -- x3 ) 

ビット単位の論理積。 

invert

( x1 -- x2 ) 

x1 の全ビットを反転します。

lshift

( x1 u -- x2 ) 

x1u ビット左シフトし、下位ビットにゼロを埋め込みます。

not

( x1 -- x2 ) 

invert の同義語。

or

( x1 x2 -- x3 ) 

ビット単位の論理和。 

rshift

( x1 u -- x2 ) 

x1u ビット右シフトし、上位ビットにゼロを埋め込みます。

u2/

( x1 -- x2 ) 

1 ビット右へ論理シフトし、上位ビットにゼロをシフトします。 

xor

( x1 x2 -- x3 ) 

ビット単位排他的論理和。 

倍精度数演算

表 4-6に示すコマンドは倍精度数の演算を行います。

表 4-6 倍精度数演算機能

コマンド 

スタックダイアグラム 

説明 

d+

( d1 d2 -- d.sum ) 

d1 を d2 に足し、倍精度数 d.sum を生じます。 

d-

( d1 d2 --d.diff ) 

d1 から d2 を引き、倍精度数 d.diff を生じます。 

fm/mod

( d n -- rem quot ) 

d を n で割ります。

m*

( n1 n2 -- d ) 

符号付き乗算を行い、倍精度数の積を生じます。 

s>d

( n1 -- d1 ) 

数値を倍精度数に変換します。 

sm/rem

( d n -- rem quot ) 

dn で割ります。対称除算。

um*

( u1 u2 -- ud ) 

符号なし乗算を行い、符号なし倍精度数の積を生じます。 

um/mod

( ud u -- urem uprod ) 

udu で割ります。

データ型変換

表 4-7に示すコマンドはデータ型の変換を行います。

表 4-7 32 ビットデータ型変換機能

コマンド 

スタックダイアグラム 

説明 

bljoin

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

4 バイトを結合して quadlet (32 ビット) を作ります。 

bwjoin

( b.low b.hi -- word ) 

2 バイトを結合して doublet (16 ビット) を作ります。 

lbflip

( quad1 -- quad2 ) 

quadlet 内の 4 バイトを逆に並べ替えます。 

lbsplit

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

quadlet を 4 バイトに分割します。 

lwflip

( quad1 -- quad2 ) 

quadlet 内の 2 つの doublet をスワップします。 

lwsplit

( quad -- w.low w.hi ) 

quadlet を 2 つの doublet に分割します。 

wbflip

( word1 -- word2 ) 

doublet 内の 2 バイトをスワップします。 

wbsplit

( word -- b.low b.hi ) 

doublet を 2 バイトに分割します。 

wljoin

( w.low w.hi -- quad ) 

2 つの doublet を結合して quadlet を作ります。 

表 4-8に示すデータ型変換用コマンドは 64 ビットの OpenBoot 実装専用です。

表 4-8 64 ビットデータ型変換機能

コマンド 

スタックダイアグラム 

説明 

bxjoin

( b.lo b.2 b.3 b.4 b.5 b.6 b.7 b.hi -- o ) 

8 バイトを結合して octlet を作ります。 

lxjoin

( quad.lo quad.hi -- o ) 

2 つの quadlet を結合して octlet を作ります。 

wxjoin

( w.lo w.2 w.3 w.hi -- o ) 

4 つの doublet を結合して octlet を作ります。 

xbflip

( oct1 -- oct2 ) 

octlet 内の 8 バイトを逆に並べ替えます。 

xbsplit

( o -- b.lo b.2 b.3 b.4 b.5 b.6 b.7 b.hi ) 

octlet を 8 バイトに分割します。 

xlflip

( oct1 -- oct2 ) 

octlet 内の 2 つの quadlet をスワップします。各 quadlet 内の 4 バイトは逆に並べ替えられません。 

xlsplit

( o -- quad.lo quad.hi ) 

octlet を 2 つの quadlet に分割します。 

xwflip

( oct1 -- oct2 ) 

octlet 内の 4 つの doublet を逆に並べ替えます。各 doublet 内の 2 バイトは並べ替えられません。 

xwsplit

( o -- w.lo w.2 w.3 w.hi ) 

octlet を 4 つの doublet に分割します。 

アドレス演算

表 4-9に示すコマンドはアドレス演算を行います。

表 4-9 アドレス演算機能

コマンド 

スタックダイアグラム 

説明 

aligned

( n1 -- n1 | a-addr) 

必要な場合、 n1 大きくして可変境界アドレスを生じます。

/c

( -- n ) 

バイトのアドレス単位数 : 1。 

/c*

( nu1 -- nu2 ) 

chars の同義語。

ca+

( addr1 index -- addr2 ) 

addr1/c の値の index 倍増やします。

ca1+

( addr1 -- addr2 ) 

char+ の同義語。

cell+

( addr1 -- addr2 ) 

addr1/n の値だけ増やします。

cells

( nu1 -- nu2 ) 

nu1/n の値を掛けます。

char+

( addr1 -- addr2 ) 

addr1/c の値だけ増やします。

chars

( nu1 -- nu2 ) 

nu1/c の値を掛けます。

/l

( -- n ) 

quadlet のアドレス単位数 : 通常 4。 

/l*

( nu1 -- nu2 ) 

nu1/l の値を掛けます。

la+

( addr1 index -- addr2 ) 

addr1/l の値の index 倍増やします。

la1+

( addr1 -- addr2 ) 

addr1/l の値だけ増やします。

/n

( -- n ) 

セルのアドレス単位数。 

/n*

( nu1 -- nu2 ) 

cells の同義語。

na+

( addr1 index -- addr2 ) 

addr1/n の値 index 倍増やします。

na1+

( addr1 -- addr2 ) 

cell+ の同義語。

/w

( -- n ) 

doublet のアドレス単位数 : 通常 2。 

/w*

( nu1 -- nu2 ) 

nu1/w の値を掛けます。

wa+

( addr1 index -- addr2 ) 

addr1/w の値の index 倍増やします。

wa1+

( addr1 -- addr2 ) 

addr1/w の値だけ増やします。

表 4-10に示すアドレス演算用コマンドは 64 ビットの OpenBoot 実装専用です。

表 4-10 64 ビットアドレス演算機能

コマンド 

スタックダイアグラム 

説明 

/x

( -- n ) 

octlet のアドレス単位数 : 通常 8。 

/x*

( nu1 -- nu2 ) 

nu1 に /x の値を掛けます。

xa+

( addr1 index -- addr2 ) 

addr1 /x の値のindex 倍増やします。

xa1+

( addr1 -- addr2 ) 

addr1/x の値だけ増やします。