表 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 ) |
n1 を n2 で割ります。剰余は捨てられます。 |
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 ループ用に start、len を end、start に変換します。 |
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 ) |
x1 を u ビット右に算術シフトします。 |
and |
( x1 x2 -- x3 ) |
ビット単位の論理積。 |
invert |
( x1 -- x2 ) |
x1 の全ビットを反転します。 |
lshift |
( x1 u -- x2 ) |
x1 を u ビット左シフトし、下位ビットにゼロを埋め込みます。 |
not |
( x1 -- x2 ) |
invert の同義語。 |
or |
( x1 x2 -- x3 ) |
ビット単位の論理和。 |
rshift |
( x1 u -- x2 ) |
x1 を u ビット右シフトし、上位ビットにゼロを埋め込みます。 |
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 ) |
d を n で割ります。対称除算。 |
um* |
( u1 u2 -- ud ) |
符号なし乗算を行い、符号なし倍精度数の積を生じます。 |
um/mod |
( ud u -- urem uprod ) |
ud を u で割ります。 |
表 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 の値だけ増やします。 |