STOIC...

31
?(ii スタック向きプログラミング言語 STOIC 木村 I まえがき 電子回路の集積化の技術の発達に伴ない,マイクロプロセッサーの性能は急 速に向上し価格が低下していくなかで,それに伴なうべさソフトクエアの問題 が大きくなってぎている。即ちソフトワェアの開発と保守に時間と費用がかか りすぎるのである。このことは何も小さな乙/ステムに限ったことではなく,大 型乙/ステムに於いても言われていることではあるが大型機の場合は最新の開発 ツールを自由に利用できるのに対し, ミニ・マイクロコシピューター(以下マ イコンと略す)では,それが使用不可能であるかまたは準備されていないとと が多いため情況は少し異なっている。さらにターゲット乙/ステムは制御用とし ℃使われる場合が多く,アセンプラーを使わざるを得ないという情況もある。 従ってマイコンにはそれに見合うプログラム開発ツーノレが必要である。 このような考えに基づいて開発された言語に FORTH という言語があり,最 近注目されてきている。 FORTH 1969 年頃アメリカのチヤーノレス .H. ムーア によって考案され, 1973 年以後は FORTH 社がこれを供給している。現在では RCA のマイコン COSMAC1802 の標準言語として採用されているのを始めとし てほとんどのマイコンの上で走るよろになっている。(第 1 ,第 2 表〉。 FORTHの作成者や販売者の主張するところによれば, (1) FORTH に関しては特に断らない限り文献 (1) (2) (3) 及び ASR 社のパシフ レットによる。 OLIVE 香川大学学術情報リポジトリ

Transcript of STOIC...

Page 1: STOIC スタック向きプログラミング言語shark.lib.kagawa-u.ac.jp/kuir/file/5065/20190528135835/...?(ii スタック向きプログラミング言語STOIC 木村 等 中

?

(

i

i

スタック向きプログラミング言語 STOIC

木村 等

中 多目 彦キオ

I まえがき

電子回路の集積化の技術の発達に伴ない,マイクロプロセッサーの性能は急

速に向上し価格が低下していくなかで,それに伴なうべさソフトクエアの問題

が大きくなってぎている。即ちソフトワェアの開発と保守に時間と費用がかか

りすぎるのである。このことは何も小さな乙/ステムに限ったことではなく,大

型乙/ステムに於いても言われていることではあるが大型機の場合は最新の開発

ツールを自由に利用できるのに対し, ミニ・マイクロコシピューター(以下マ

イコンと略す)では,それが使用不可能であるかまたは準備されていないとと

が多いため情況は少し異なっている。さらにターゲット乙/ステムは制御用とし

℃使われる場合が多く,アセンプラーを使わざるを得ないという情況もある。

従ってマイコンにはそれに見合うプログラム開発ツーノレが必要である。

このような考えに基づいて開発された言語に FORTHという言語があり,最

近注目されてきている。 FORTHは1969年頃アメリカのチヤーノレス.H.ムーア

によって考案され, 1973年以後は FORTH社がこれを供給している。現在では

RCAのマイコン COSMAC1802の標準言語として採用されているのを始めとし

てほとんどのマイコンの上で走るよろになっている。(第 1,第2表〉。

FORTHの作成者や販売者の主張するところによれば,

(1) FORTHに関しては特に断らない限り文献 (1), (2), (3)及びASR社のパシフ

レットによる。

OLIVE 香川大学学術情報リポジトリ

Page 2: STOIC スタック向きプログラミング言語shark.lib.kagawa-u.ac.jp/kuir/file/5065/20190528135835/...?(ii スタック向きプログラミング言語STOIC 木村 等 中

-96- 第53巻 第2号

第 1表 FORTHの使える機種

-ASR社の資料によるー

機種 名 | 会 社 名

Series--1 IBM

PDP-ll DEC

NOV A/Ec!ipse DG

21MX HP

8/32 Interdata

Level 6 Honeywel

9900 TI

8086 Intel

8080/8085 Intel

Z80 Zilog

6800 Motrola

6809 Motrola

1802 RCA

第 2表 FORTH 系言語

プログラム名 適応機麓

fig-FORTH 8080

CPM Multi-FORTH 8080 (CP/M)

開発 者

FORTH INTEREST GROUP

CREA TIVE SOL UTIONS

2812

STOIC 8080 MIT & H,i¥RV ARD UNIV. BIOMEDICAL ENGINEERING CRENTER

MMS-FORTH

CONVERS Z-80 FORTH

6502 FORTH

6800 FORTH 8080 FORTH

APPLE-FORTH

LAB-FORTH

SWING

Z-80(TRS-80) Z-80

Z-80(TRS-80)

MILLER MICROCOMPUTING THE DIGITAL GROUP, INC.

6502 (APPLE II, PET 2001) 6800 (SWTPC)

8080 (IMSAI) ) PROGRAMMA CONSULTANTS 6502(APPLE II) CAP'S SOFTWARE

LSI-ll, PDP-l1 (RT-ll) LABORATORY SOFTWARE SYSTEMS, INC.

PDP-ll , Series-l CHILD IncorpoIated

FORTH FOR PDP-ll (RT-ll, ST AND ALONE)

SAO-FORTH NOVA DECUS Smithsonian Institution Astxophysical

Observatory

OLIVE 香川大学学術情報リポジトリ

Page 3: STOIC スタック向きプログラミング言語shark.lib.kagawa-u.ac.jp/kuir/file/5065/20190528135835/...?(ii スタック向きプログラミング言語STOIC 木村 等 中

283 スタック向きプログラミシグ言語STOIC - 97--

(1) プログラムの開発時聞をアセンプラーの 1/10,PL/Mの1/6に短縮する

ことができる。

(2) メモリー容量はアセンブラーより小さく PL/Mの1/4ですむ。

(3) 自己増殖型言語であるので,ユーヂー自身による言語仕様の拡張が容易

である。

(4) 構造化プログラ Eングが可能である。

ということになっている。これが事実であれば素晴しいことであるので,是非

使用してみたいと考えていたところ,今度FORTHと同種の言語STOIC(Stack

Oriented Interactive Compiler)を入手できたのでその性能評価を行なった。

評価は主として ①プログラムの実行時間,②メモリー使用量の 2点に関し,

手元にあるZ80アセンブラー, PLZ, UCSD Pascalと比較した。

本論では, IIifrjにおいて SτOICの簡単な解説と,今回の移槌に際して行な

った機能の拡張及び改善について述べ,1II節に評価した結果を述べる。

II STOICの概要

2.1 STOICの特徴

STOIC (Stack Oriented Interactive Compiler)は, 1977年 MITとハーノミ

ード大の BiomedicalEngineering Centerにより開発された8080用の言語で,

基本的な構造は FORTHと全く同じであるが,個々には少し異なっており,改

善されている面もある。

全体は,コンパイラ一,インタープリター,アセンブラー,デバッガー,ロ

ーダーとカセット MT又はフロッピー・ディスク用のオベレーテシグνステム

からなる 1つの独立した志/ステムを構成している。今回入手したものは第 l図

のようになっており,豊富なアプリクー乙/ョン。パッケージが付いているのも

特徴である。このうち KERNELだけが普通のアセンブラーで記述されてい

るが,他はすべて STOIC自身の言葉で書みれている。

OLIVE 香川大学学術情報リポジトリ

Page 4: STOIC スタック向きプログラミング言語shark.lib.kagawa-u.ac.jp/kuir/file/5065/20190528135835/...?(ii スタック向きプログラミング言語STOIC 木村 等 中

-98- 第53巻 第2号

(~友dT)

(手配努弘義)

第 1図 STOICの構成

SIOICの

器本部分

77リケ γ ヨ〆

ノ、。ノクノン

284

KERNELは, STOIC諮で書かれた基本語の定義を受け入れるために必要な

最小限の部分で,コンパイラー,インタープリタ lー,ローダー, OSが含まれ

ている。これに旬基本定義"を読み込ませることにより SτOICの基本νステ

ムが出来上る。あとは必要に応じて各アプリケ一志/ョシ・パッケージを追加し

ていくことができる。

STOICの主な特徴は次のようである。

(1) 会話型でプログラムができる。

これは, BASICと同様にプログラムを一行ずつ直接入力することができ,即

実行でまるということである。

(2) 内部にディク乙/ョナリーを持っており,定義された定数,変数,手続き

等はすべて語(ワード〕としてこれに登録される。

ディク乙/ョ:ナリーは語のオーダード・リストとして表現される。この語のう

ち, STOICの基本νステムによってあらかじめ定義されているものを基本語と

いい,それ以外のものは使用者が自由に追加していくことが可能である。ー担

定義してしまえば基本語と同様に使用することができる。普通のプログラム言

語の場合は,使用者の作成したライブラリーを使おうとすれば,ソースプログ

ラム中に埋め込んで再度コシパイノレするか, リンカーにより結合す-るかしなけ

ればならないところが違 tっている。こうして使用者は自分に固有の語奨をもっ

たνステムを仕立てることができる。またディクνョナリー全体は,いくつか

OLIVE 香川大学学術情報リポジトリ

Page 5: STOIC スタック向きプログラミング言語shark.lib.kagawa-u.ac.jp/kuir/file/5065/20190528135835/...?(ii スタック向きプログラミング言語STOIC 木村 等 中

- 9.9-スタック向きプログラミシグ言語STOIC285

(正確にはこれを語集と呼んでいる〉に分けて使い分けることもでのブランチ

きる(第 2図)

使用者が定義する語集

F司

~>.

,-)1

アセンプラーの語集

S TOIC (7) 基本詩集

ディク νョナリーの構造第 2図

区切り記号の空白とタブ記号を除く他のすべて語を識別するための名前は,

の英数字と記号が使える(例えばカシマヘ"やセミコロン";"も語である

また語iの一部としても使用できる〕。これにより新しい演算記号を定義す

ることがでまる。

し,

コードアドレス以下の部語(ワード〉の構造は第3図のようになっており,

-ht

h

↑ア

y

J

)

-AHMマ

-

ノ,l、

11ili---1E・I・

αa

ρ

冒刊

u。ρしUv

(

リの

f-,り

l語

O

、,llι11ιlit-ιt》『

lf』E'a'Bl't'

← 16ビy 卜→

link

2

3

1

4

5

第 3図

OLIVE 香川大学学術情報リポジトリ

Page 6: STOIC スタック向きプログラミング言語shark.lib.kagawa-u.ac.jp/kuir/file/5065/20190528135835/...?(ii スタック向きプログラミング言語STOIC 木村 等 中

-100- 第53巻 第2号 286

a.定数"変数を表わす語 bアセンブラーによるコードを表わす語

code address 定数/変数を参照するコードのアドレス

code address 自身のノぐラメータドフィールドのアドレス

lア一よるコード

value 定数/変数の値

配列の場合は以下に続く

parameter field

c..STOICのコードを表わす語

code address 戻り先きを保存するコードのアドレス

paramete field

hv

への

呼め円

第4図 語のコード部分のフォーマツ l

分が,その語の表わす内容により異なるが,主なものは第 4図のようになって

いる。語がマ乙/ンコードを表わす場合コードアドレスの部分に自身のコード部

分のアドレスを入れておくのは無駄のようであるが,他のものと統一的に扱う

ためにそうしてある。語が定数又は変数を表わす場合は,パラメータ・フィー

Jレドにその値が入り,コードアドレスには,定数あるいは変数参照を行なうコ

ードのアドレスが入る。定数の場合は定数の値がスタックに積まれ,変数の場

合は,そのパラメータフィーノレドのアドレスがスタックに積まれる。

OLIVE 香川大学学術情報リポジトリ

Page 7: STOIC スタック向きプログラミング言語shark.lib.kagawa-u.ac.jp/kuir/file/5065/20190528135835/...?(ii スタック向きプログラミング言語STOIC 木村 等 中

lisilli--!

287 スタック向きプログラミシグ言語STOIC -101-

語がSTOIC語のコードを表わす場合は" コード・アドレスには通常の手続

き呼び出しにあたる処理を行なうコードのアドレスが入り,以下本体の処理を

行うコード・アドレスが並ぶ。最後は呼出し元へ復帰するためのコードへのア

ドレスカ2くる。

(3) オブジェクト・コードは indirectthreaded codeになっている。

これは先の語の中味が(その語がSTOIC語で書かれたコードの場合〉別の

コードのアドレスを並べただけのものであったが,まさにそのことである。 ζ

れは一般に機械語の CALL命令よりは短かくなるので,開発者側は;プログラ

ムがアセンプラー使用時より小さくなると称しているようである。

(4) プログラム言語自身がスタック向ぎに設計されており,文は逆ポーラン

ド記法により記述される。

言語プロセッサーがスタック向ぎに作られている例は多いが,言語自身を逆

ポーランド式に書かせるのは一部のポケットカリキュレーターを除いて初めて

であろう。この方式によれば,オベレー乙/ョンはプログラム中にそれが現われ

た時点で実行できるため,先のオブジェクトコードの生成法と相まってコンパ

イラーが非常に簡単になる。

スタックは全部で 4つ用意されている0

.パラメータ・スタック

演算用のスタック

・リターシ・スタック

手続きを呼び出すとき,その戻り先きを保存するためのスタック

.ノレープ・スタック

プログラム中のjレープを制御するためのスタック

・語奨スタック (VocabularyStack)

ある時点での使用中の VocabularyBranchを指定するためのスタック

FORτHにおいてはノレープスタックと語奨スタックが兼用されているため,

別の手続きを呼び出してしまうとノレープの制御変数が直接参照できないという

欠点があったが, STOICでは改善されている。 ただしスタックの数をふやせ

OLIVE 香川大学学術情報リポジトリ

Page 8: STOIC スタック向きプログラミング言語shark.lib.kagawa-u.ac.jp/kuir/file/5065/20190528135835/...?(ii スタック向きプログラミング言語STOIC 木村 等 中

-102- 第53巻第2号 288

ばレジスタ数の少ない機種ではインタープリターのスピードが落ちることにな

ろう。

(5) プログラム中に,アセンブラーによるコードを容易に埋め込むことがで

きる。

これは,基本乙/ステム自体がアセンプラーを内蔵している ζ と,引数は;スタ

ックを介して受け渡しすること,オブジェクト・コードの構造がうまくできて

いることにより実現されている。これによりイ γタプリターのオーバーヘッド

を制御できる。ただしアセンプラー自体もスタック向けに設計されているの

で,後述のよろに Zilog社の Z-80のニーモニツクはそのままでは使えないと

いラ欠点がある。

(6) 構造化プログラミングが可能である。

このために用意されている構文としては次のよろなものがある。以下大文字

で書いたものはキ lーワ一日小文字で書いたものは式文は別の文を表わす。

c IF 8 FI

IF c THEN 8 に当る。逆ポーランド式に条件 cがIFの左にくる。

c IF 81 ELSE 82 FI

IF c τHEN 81 ELSE 82に当る。

n (8)

sをn田繰返す。 nはそのときのスタックの一番上の値(以下 t08と

いう)である。

BEGIN 8 END

ENDの直前の t08の値が真になるまで sを繰返す。 REPEAT8

UNTIL c型のJレープ

BEGIN c IF 8 REPEA T

WHILE c DO 8型のlレープ

(2) FORTH及びSTOICのものは, IF-THEN文はIF-ELSE-THENであるが,この場合 THENはIF文の終りを示すだけであるから後述する Z80STOICではFIとし

た。

OLIVE 香川大学学術情報リポジトリ

Page 9: STOIC スタック向きプログラミング言語shark.lib.kagawa-u.ac.jp/kuir/file/5065/20190528135835/...?(ii スタック向きプログラミング言語STOIC 木村 等 中

289 スタック向きプログラミシグ言語STOIC --103ー

n2 nl DO s LOOP

FOR i=nl TO n2-1 DOに当る。 nlI工tos,n2 I'i. tosの下の値。 制

御変数は常にその時点で起動している最も内側のlレープから!慣に 1,

J, K により参照する。

以上非常に簡単に述べたが,詳しくは巻末の文献を参照していただきたL、。

2.2 Z80STOIC

STOICはその中に OSをも含んだ独立の乙/ステムであるので,そのままでは

手元の計算機 (Zilog社の MCZ1/0めでは使いにく L、。また STOICは8080乙/

ステムのために作成されているので, Z-80の命令セットを有効に使えない。

これらを改善するために Z80STOICを作成した。以下主な変更について述べ

る。

(1) STOICをMCZのOSRIOの下で動くよろに, KERNELにおける入出力

の部分を RIOとのインターブ Z ースに置き換えた。

(2) STOIC向きの Z80アセシブラーを作成し, もとのアセンブラーと置き

換えた。アセンブラーのニーモニックはできるだけZilog社のものに近づけよ

うとしたが Zilog社の形式は STOICには不向ぎなため,やむをえず新しい

ニーモニックを追加したものもある。 Z80STOICの会アセンブラ一命令の形

式は appendix1にまとめてある。 STOICにおいては名札というものが存在し

ないため,後方ヘジャンプする場合と前方ヘジャシプする場合とでは処理の仕

方が異なる。後方ヘジャンプする場合は,飛先のアドレスをあらかじめスタッ

クに積んでおいてそこへ飛ぶように}すればよいが,前方ヘジャンプする場合は

ー担飛び先未定のジャンプ命令を出力しておき,あとで飛び先のマークが現わ

れた時点、でこれを書きなおすということをしている。この前方へのジャシプは

IF,又,はIFcc, (ここで ccは条件名)とし,対応する飛び先は FI,とした。〉

(3) これに伴ない STOICの基本定義分はすべて Z80STOICのアセシブラー

(3) STOICではIFcc,引川 THEN,である。またIFcc,はそのまま条件ccのときジャシプずる命令に対応していたが, Z80STOICでは条件ccのとき・・…が実行されるように変えた。

OLIVE 香川大学学術情報リポジトリ

Page 10: STOIC スタック向きプログラミング言語shark.lib.kagawa-u.ac.jp/kuir/file/5065/20190528135835/...?(ii スタック向きプログラミング言語STOIC 木村 等 中

-104-- 第53巻 第2号 290

に書き替えた。その際,減算,乗除算引の部分は Z80に固有の命令を用いて書

さ替えるなどして改善した部分もある。

以上の変更はSTOICをZ80向けにするための最小限の変更に近く,性能を

大巾に改善するといろ程のものではないことをお断りしておく。

m STOICの性能評価

3.1 評価方法

STOICの性能のうち,特にブ。ログラムの実行速度とプログラムの大きさを調

べるために 2つの問題を実際にプログラムし,それを他の言語を使ったもの

と比較した。プログラムの実行のために使用した計算機は Zilog社のマイク

ロコシピューターMCZ1/05である。これは CPUにZ-80を用いており, ク

ロックは 2.5MHzである。

比較のために用いた言語及び言語プロセツサ iーは Z四 80アセシプラー,

PLZSYS, PLZCG, P ASCALである。各言語についてのデータはAppendix2

に!まとめた。

評価のための問題は,

(1) 8-Queenの問題の解を数える,

(2) 小さい方から1000個の素数をみつける,

の2つである。 8-Queenの問題は,再帰的なアノレゴリズムを用いたため,手

続きの再帰的呼出しがあるのが特徴であり,素数の問題は繰返しが多しその

中で多数の除算が現われるのが特徴である。上の問題を各言語でプログラムし

たものはすべて appendix3に掲載した。

テストの結果は第8表に示す。なおこのテストに用いた STOICは,先に述

べたZ80SτOICであるが,もとの STOICに比べて, 乗除算lレーチシがZ80用

のものに替えてあること,インタープリターの中で普通なら一命令実行毎にス

タックのあふれ等のエラーチ 1 ツクを行なうところを,スピード測定の際だけ

(4) 各言語を用いてプログラムする際には,原則jとして同じアノレゴリズムを用いたが言語の特徴を生かすために少し変更した部分もある。同じアlレコ・リズムであっても番き方

の違いによって結果が異なる場合は,成績の良い方を採用した。

OLIVE 香川大学学術情報リポジトリ

Page 11: STOIC スタック向きプログラミング言語shark.lib.kagawa-u.ac.jp/kuir/file/5065/20190528135835/...?(ii スタック向きプログラミング言語STOIC 木村 等 中

291 スタック|匂きプログラ~. >'グ言語STOIC ー-105ーー

第H受 〈ンチマークテストの結果

1. 8-Queen問題

|言 語|実行時間耐l-cmアセシブラー 0.9 167

STOIC 40.4 548(412)*

PLZSYS 27.6 238

PLZCG 2.2 442

PASCAL 35.8 344

* STOICの認の名前と 9>'クの部分を除いた値

2. 素数をみつける問題

言 語 | 実行時間 (秒)1プログラムサイズ〈ノ〈イト)

アセシプラー 15.2 2115(115)* I

STOIC1 91.8 2268(220)**

STOIC2 63.1 2318(254)**

PLZSYS 47.3 2143(143)*

PLZCG 17.0 2267(267)*

PASCAL 54.2 2174(174)**

*素数1000r因分の配列を除いた値

料素数1000個分の配列とSTOICの語の名前とリシクの部分を除いた値

はこれを取除いたものを用いた事をお断りしておく。なお第3表中の実行時間

とは,最初の出力が表示されるまでの時間であり,プログラムサi イズには,イ

シタープリターや外部のライブラリーナプノレーチン等は含まれていない。

3.2 実行速度

本家の FORτHの資料には,高級言語でプログラムしたものに比べてはるか

に速くとだけ書いてあり, STOICの方も,速い実行速度を保ちながらメモリー

の使用効率が良いと述べているのみで具体的な数字は示されていない。 IDS-

FORτHについてはベンチマークテストの結果が公表されており,これによれ

OLIVE 香川大学学術情報リポジトリ

Page 12: STOIC スタック向きプログラミング言語shark.lib.kagawa-u.ac.jp/kuir/file/5065/20190528135835/...?(ii スタック向きプログラミング言語STOIC 木村 等 中

-106ー 第53巻第2号 292

ば, IDS-FORTHは非常に速いことになっている(第4表)。これについては

あとで検討する。

第 4表 IDS-FORTI王のペシチマークテストの結果

(文献 [3J P. 164より抜粋)

ーさぎj

zコ 語|メ ヵ ー |実行時間|プログラムすイズ

アセシプラー グ イ テ シ 0.24 183

IDS-FORTI王 アドテック 0.8 191

ロKSUPERBASICj グ イ テ シ | 払 0 1 m -

BASIC COMPILER判マイクロソフ 2.4 204

PASCAL-Z** イサカ・イシタージステムズ 1.4 207

ネ 8080のコードにコシパイノレするもの

** Z-80のコードにコシパイノレするもの

さて我々のテストによれば,両方の問題共に STOICが最も惑いという結果

になった。問題2に至っては最初に作成したもの (STOICl)が余りにも遅いの

でその原因を追究し,改良したものが STOIC2である。原因は,最も多く繰返

されるとにろのDOLOOP にあったので,これをwhile~do型のBEGIN-IF~

REPEAT Vt:.置き換えた。これにより約 3割速くなったが,それでも PASCAL

より 16~ぢも遅い。

なおとの問題では,アセンブラーの速度が他の言語に比較してるまり速くな

いが,これはこのプログラム中で除算が 25133回実行されており,ハードワェ

ア除算命令のない Z-80ではこの部分だけで約 12.6秒 (83%)を費しているた

めである。

以上の結果から少なくとも STOICは普通のインタ lープリター型言語より実

行速度が速いとはとても言えず,むしろ逆にはるかに遅いことがあると言え

る。それでは本家FORTHの実行速度はどの程度なのであるろか。これを推定

するために STOICのインタープリターの命令のフェッチからコード部分ヘジ

ャンプするまでの時間(これを仮にプエッチ時間と呼ぶことにする)がどの程

OLIVE 香川大学学術情報リポジトリ

Page 13: STOIC スタック向きプログラミング言語shark.lib.kagawa-u.ac.jp/kuir/file/5065/20190528135835/...?(ii スタック向きプログラミング言語STOIC 木村 等 中

293 スタック向ぎプログラ~ :yグ言語STOIC -107-

度かを見てみる。これはインタープリターにスタックのあふれ等のエラーチェ

ック機能を追加したときの実行時聞から簡単に推定できる。 8-Qneenの場

合そのエラーチェックにより実行時聞は14.1秒増加する。これよりイシタープ

リターの命令プヱツチは約57万回であり,従って全フ zツチ時聞は約24.2秒と

なる。この時間だけでもPLZCGの場合の11倍といラ値であり,従っ亡FORTH

が"高級言語より速い"といちことはまず考えられない。また STOICはもと

もと 8080のために作成されたものであるから, Z-80版を作る際にみ80の豊富

なレジスターを利用して(IDS-FORTH ~土l そうしている〉 改善した場合,フ

ェッチ時聞は約35%短縮されるが,全体としては8-Queenの場合で 2割程度の

改善しか見込めない。

次に STOICにおいては,プログラムの中に簡単にアセシブラーによるコー

ドを埋め込むことがでまるといろことを利用して実行時間の変化を見た(第5

表〉。改良版 1というのはチェスボード中のある場所に Queenを置くことがで

きるかどうかを調べる部分のみをアセンプラーで置き換えたもので,改良版 2

は,さらに Queenを“置く"部分と μ取り除く"部分も置き換えたものであ

る。最も時聞を費やしていそうなところをちまくみつけることができる場合

は,この例のように簡単に実行速度を上げることができるというのが救いであ

る。

第 5表 STOICのプログラムの一部をアセシプラーで霞きかえた場合

(8-Queenの問題について)

プログラム|実行時間(秒)1プログラムナイズ(パイト)

も との版 40.4 548(412)*

改良版 1 16.5 541(405)*

改良版 2 9.1 518(382)*

* STOICの語の名前とリシクの部分を除いた値

最後にIDS-FORTHのペシチマークテストの結果について触れておく。そこ

で行なわれているテストの内容はが/50-32という二次曲線を VideoRAM型

OLIVE 香川大学学術情報リポジトリ

Page 14: STOIC スタック向きプログラミング言語shark.lib.kagawa-u.ac.jp/kuir/file/5065/20190528135835/...?(ii スタック向きプログラミング言語STOIC 木村 等 中

-108- 第53巻第2号 294

のCRTにプロットするといちものである。これは計算した座標値によりメモリ

ー中のあるピットをon-offする操作を含んでいる。高級言語は普通ビット操作

の命令を用意しておらず,この問題がはじめから高級言語に不利であることは

明らかである。四ー方 IDS-FORTH はどろかと言うと本家の FORTH~にはない

新しい語 SETBITを基本語として追加してそれを使っているので,これはア

セシブラーと同レベノレの速度が得られるはずで忘る。従ってこれによって

FORTHが速いと主張することは誤っている。

3.2 メモリーの使用効率

単純に比較しただけでは,両方の問題共に STOICが最悪である。 ただし

STOICのディクνョナリーの中には。語の名前とリシクの部分が,各ヱ.シト

リー当り 8バイトずつ含まれており,そのプログラムを実行するだけのターグ

ツト乙/ステムに於いては不要のものである。 この部分を除いて比較すれば,

STOICのプログラムサイズは PLZCG,即ちマ乙/ン語に落すコンパイラーのも

のよりは小さくなるが, PASCALよりは悪く, PLZSYSよりははるかに大き

い。開発者側の資料によれば,アセシブラーの場合より小さくなるということ

であるが,との点でも期待はずれである。 FORTHが用いているイシダイレク

ト・スレツデッド・コードの手法を用いた場合, 8080系の命令に比べて短かく

なることがはっきりしているのは手続きの呼び出し命令のみであり,その他の

基本的なオベレ-i,/ョ γに於いては,間程度かあるいは長くなる傾向に怠る。

ただ一時変数〈計算の中間結果,ノレープの制御変数等)はすべてスタックに積

むととになっているため,ハードクヱアスタックのない機械に比べればその分

は節約できる。

3.3 プログラムの記述性その他

STOICのプログラムは,一応高級言語に近い形で書くことがでまるため,

アセシブラーに比べれば明らかに記述性は良い。しかし PLZSYSや PASCAL

に比べれば明らかに劣っている。

STOICでは式を記述する場合は,逆ポーラシド記法を用いるが,長い式の場

合はオペνーターとオペラシドがはなれてしまう場合があり,従ってオベレー

OLIVE 香川大学学術情報リポジトリ

Page 15: STOIC スタック向きプログラミング言語shark.lib.kagawa-u.ac.jp/kuir/file/5065/20190528135835/...?(ii スタック向きプログラミング言語STOIC 木村 等 中

1ii!l;iii

295 スタック向きプログラミシグ言語STOIC --109ー

ターとオペランドとの対応が一見してわかりにくい。この記法はYHPのボク

ツトカリキコレータのように;一命令毎に演算を実行してしまう場合にはよいか

もしれないが,プログラム言語としては計算機向きではあっても人間向きでは

ない。

また,スタティックな変数をあまり使用しないようにして実行速度を上げよ

ろとするとすぐにスタック操作が複雑になってわかりにくいプログラムになっ

てしまろといろ欠点もある。

以上悪い面を述べたが良い面としては,語の名前は空白,タブ記号を除くす

べての英数字・記号を用いて構成できるため,新しいオベレーターを簡単に定

義でき,しかもー担登録すればそのオベレーターをコシパイラーを作り変えた

かのよろに自由に使用でまること,オベレー乙/ョンは常にスタックを対象にす

るため,答として複数の値を返すよろな関数も式の中で自由に使えること,

STOICはそれ自身の中にアセンプラーを含んでいるため,ソースプログラムの

中に自由にアセンプラーコードを埋め込むことができfる等の点があげられる。

その他プログラム開発期間がどうなるかといラ問題がある。これについては

今回のテストのみで定量的な評価を下すことは差し控えるが, STOICの原理上

コンパイラーの速度が非常に速いということ,デバッグがしやすいということ

は言える。コンパイノレが速いということは,その分人聞が苦労していることに

なる訳だから,それがそのまま開発時聞の短縮につながらないが,デバッグが

しやすいことは開発期聞に大いに影響するであろう。

STOICにおけるデパッグの特徴は,プログラム開発中はメモリ内のディク乙/

ョナリーの中にすべての語の名前が残っているためすべての変数,関数,手続

きはその名前で参照することができることと,すべての手続は,必要な引数を

スタックに積んで渡し,答もスタックに積んで返すようになっているため,

つ 1つの手続きのテストが大変簡単にできるといラ点である。前者の機能はま

さにνシボリック・デバッガーの機能であり,マイコシの高級言語の場合,そ

の機能のないものが少なくないであろう。

OLIVE 香川大学学術情報リポジトリ

Page 16: STOIC スタック向きプログラミング言語shark.lib.kagawa-u.ac.jp/kuir/file/5065/20190528135835/...?(ii スタック向きプログラミング言語STOIC 木村 等 中

-110ー 第53巻第2号 296

W む す び

FORTHや STOICの開発者側が主張するような良い結果があるいは得られ

るかも知れないという期待を持ってテストを行なったのであるが,残念ながら

実行速度は中間言語を用いるコンパイラー並みかそれ以下であること,メモリ

ー使用効率も機械語に落すコシパイラーより少々良い程度でしかないこと,ス

タック操作を多用すると式が,従ってプログラムの内容がわかりにくくなるこ

と等,悪い結果が自についた。しかしながら,この小さなνステムに,コ γパ

イラー, イシタープリター,乙/ンボリック・デノミッガー,アセンブラ等の機能

を詰め込みながら,言語の柔軟な拡張性をもっている点はユニークであり評価

してよL、。

その他,プログラム中に容易にアセンプラーによるコードを組み込むことが

でま,その効果が確認されたこと,デノくッギシグが容易に行なえることが確認

された。

全体として言語開発者及び販売者側の誇大宣伝を証明するだけになった感も

あるが,この種の言語は今後ますます増加していくであろうミニ・マイクロコ

シピュータ一向け言語としてはユエークであり,良い面もあるので更なる研究

が望まれる。

参考文献

(1) 岡田 聡, FORTHの特徴と原理,イシターフェス 1979年6月号

(2 ) miclo FORTH PR IMER 第2版 FORTH,Inc. (1978)

(3) 片桐 明, IDS-FORTHの詳細,イシターフェス 1980年 5月号

(4 J CPjM User's GIOUp No.23a

(5) B. W. Lee, An IntIoduction to North Star Disk STOIC, Dr.Dobb's

Joumal Vol.4 No.40 (1979)

OLIVE 香川大学学術情報リポジトリ

Page 17: STOIC スタック向きプログラミング言語shark.lib.kagawa-u.ac.jp/kuir/file/5065/20190528135835/...?(ii スタック向きプログラミング言語STOIC 木村 等 中

297 スタック向きプログラミシグ言語STOIC

Appendix 1. Z80STOICのアセシプラー・コード

Definition of the notation

r r': any of the register symb01s f0110wing A B C D E H L (HL)

dd any of the register paix symb01s followiDI BC DE HL SP

pp any of BC DE SP qq any of BC DE HL AF x any of the index まegister symbols 1X IY n 8四 bit va1ue or symbol nn 16-bit va1ue or symbol

8圃 bit load

Zi10g

LD r,r' LD I', n LD r, (x+d) LD (x+d) , r LD (x+d) , n LD A, (BC) LD A,(DE) LD A, (nn) LD (BC) ,A LD (DE),A LD (nn),A LD A,I LD A,R LD 工,ALD R,A

16・.bit 10ad and exchange

Zilog

LD dd,nn

LD x,nn LD HL, (nn) LD x, (nn) LD (nn),HL LD (nn),x LD SP,HL LD SP,x PUSH qq PUSH x P OP qq POP x EX DE,HL EX AF,AF' EX (SP) ,HL EX (SP),x

Z80srOIC

rt r LD, n r LDI, d x+ r LD, r d x+ LD, n d x+ LD, (BC) LDAX, (DE) LDAX, nn LDA, (BC) S rAX, (DE) srAX, nn srAX, 工 ALD, R A LD, A 工 LD,A R LD,

Z80srOIC

nn dd LDI, nn x LDI, nn HL LD, nn x LD, HL nn ST, x nn ST, HL LDSP, x LDSP, qq PUSH, x PUSH, qq POP, x POP, HL DE EX, AF' AF EX, HL (SP) EX, x (SP) EX,

-111ー

OLIVE 香川大学学術情報リポジトリ

Page 18: STOIC スタック向きプログラミング言語shark.lib.kagawa-u.ac.jp/kuir/file/5065/20190528135835/...?(ii スタック向きプログラミング言語STOIC 木村 等 中

-112-- 第53巻第2号

Auto increment/decrement and repeat

Zilog Z80STOIC

LD1 LD+ LD1R LD+R LDD LD-, LDDR LD-'R, CP1 CP+ , CP1R CP+R, CPD CP-, CPDR CP-R,

8-bit arithmetic and logical

Zilog Z80STOIC

)

-G +

x

znr、sn

,,,,,

AAAAAs

nunununununb

nununμnununu

AAAAAS SUB n 1iBC A,5

SBC A,n AND 5 AND n OR 5

OR n

XOR 5 XOR n CP 5

CP n

工NC 5

DEC 5

16-bit arith田etic

Zilog

ADD HL,55 ADC HL,55 SBC HL,55 ADD X,pp INC 58 INC X

DEC 58 DEC x

8hift and Iotate

r A ADD, n ADD工,d x+ A ADD, 8 A ADC, n A ADCI, 8 SUB, n SUB 1, 8 A SBC, n A SBCI, 8 AND, n AND1, 5 OR, n OR工,8 XOR, n XORI, 8 CP, n CPI, 8 INC, s DEC,

Z80STOIC

88 HL ADD, 88 HL ADC, S8 HL SBC, pp x ADD, 88 INC, x INC, 88 DEC, x DEC,

Zilog Z80STOIC

,,

A

'

A

FUAAFV

TUTμDn“

RRR

A

A

CAC

LLR

pnHDmmpnM

298

8 i8 any of r or d x+ 8hown for ADD

OLIVE 香川大学学術情報リポジトリ

Page 19: STOIC スタック向きプログラミング言語shark.lib.kagawa-u.ac.jp/kuir/file/5065/20190528135835/...?(ii スタック向きプログラミング言語STOIC 木村 等 中

-113ースタック向きプログラミシグ言語STOIC

m is any of t or d x+ a8 8hown for RLC

RRA, r RLC, d x+ RLC, m RL, m RRC, m RR, m SLA, m SRA, m SRl, RLD, RRD,

RRA RLC r RLC (x+d) RL m

RRC m RR m

SLA m SRA m SRL m RLD RRD

299

bit operat工on

b i8 the bit p08ition

Z80SIOIC

工 b BII d x+ b BIT, r b S E1 , d x+ b SET, r b RES, d x+ b RES,

Zilog

BIT b,r BI1 b, (x+d) SET b,r SET b, (x+d) RES b, r RES b, (x+d)

rtilhipulpit-tflap--u

Backwa工d j ump

CC i8 any of following NZ non zero Z zero NC non carry C ca工ryPO parity odd PE parity even NV not overflow V overflow

Z80SIOIC

nn JP, nn 1Pcc, e JR, e JRC, e JRNC, e JRZ, e JRNZ, JP (HL) , JP (x) , e DJNZ,

Zilog

JP nn JP cc nn JR e JRC e JRNC e JRZ e JRNZ e JP (HL)

JP (x)

DJNZ e

Forward j ump

cc' i8 the negated

condition of cc

Z80STOIC

工F,... FI, IFcc', ... FI, 工FR,... FI, IFRNC, ... FI, IFRC,・". F工,IFRNZ, ... FI, IFRZ, ... FI,

Zilog

JP nn lP cC,nn JR e JR C,e JR NC,e JR Z,e JR NZ,e

Call and Return

Z80S10IC

nn CALL, nn CALcc, RET, RETcc,

Zilog

CALL nn CALL cC,nn RET RET cc

OLIVE 香川大学学術情報リポジトリ

Page 20: STOIC スタック向きプログラミング言語shark.lib.kagawa-u.ac.jp/kuir/file/5065/20190528135835/...?(ii スタック向きプログラミング言語STOIC 木村 等 中

-114- 第53巻 第2号 300

RETI RETI, RETN RETN, RST n n RST,

工nput and Output

Z ilog Z80STOIC

工N A, (n) n INA, IN r, (C) r IN(C), INI 工N+,INIR 1N+R, 工ND 1N-, INDR 1N-R, OUT (n),A n OUrA, OUT (C), r r OUT (C) , OUτ工 OUT+, OT1R OT+R, OUTD OUT-, OTDR OT-R,

Miscellaneous

Ziolg Z80ST01C

DAA DAA, CPL CPL, NEG NEG, CCF CCF, SCF SCF, NOP NOP, HALl HALT, D工 D1, E1 E1, 工M 0 1MO, 工M 1 IM1, 1M 2 IM2,

OLIVE 香川大学学術情報リポジトリ

Page 21: STOIC スタック向きプログラミング言語shark.lib.kagawa-u.ac.jp/kuir/file/5065/20190528135835/...?(ii スタック向きプログラミング言語STOIC 木村 等 中

301 スタック向きプログラミシグ言語STorC

Appendix 2. 使用した言語及び言語プロセッサ-

A2.1 PLZSYS/PLZCG

-115ー

PLZというのは, Zilog社が自社のマイクロコシピューター用にl開発した,どちらかと

言えばPasca!風のνステム記述用言語である。 PLZSYSI土そのコシパイラーであり,ソー

スプログラムを Z∞deというマVシ・イシデペシデシトな中間言語に翻訳する。

Z-codeになったプログラムVi,機械に固有の ZINTERPというイシタープリターにより

実行される。 PLZCGVlZ-codeをZ-80の機械語に変換する codegeneratOIである。従っ

てPLZで脅かれたプログラムは, Z-codeにしてインタープリターでも実行できるし,さ

らに PLZCGにより機械語のプログラムとしても実行できる。変数の基本の型は byte,

shOIt integer (以上1パイト長), wOId, integer (以上2パイト長〉の 4種類あり 1諮

1パイトの Z-80を意識したものになっている。 しかし Z-codeの段階では, その内容に

ついては公表されていないのではっきりしないが, 1 ~否が16ピットの機械向けに設計され

ているらしく,なまじ 1バイト変数を使うとかえって実行速度が遅くなり,プログラムす

イズも大きくなった。測定結果(第 3表〉中の 8-QueenのPLZSYSの値は掲載したプログ

ラムそのものの値ではなく N,K, Hの3変数を word型にしたものの値である。 byteの

ままのものは実行時間で1.7秒, プログラムサイズで 9パイト劣る。なお使用したのは

Version 3.0である。

A2.2 Pasca!

Pasca!は N.Wirthによって開発された教育用の構造化プログラム向けの言語で,

ALGOL60の流れを汲んでいる。使用したプロセツサーは, K. L. Bow!esらがミニコン・

マイコシ用に作成した UCSDPasca! veIsion 1.5である。 とのイシタープリターは8080

用のものと Z-80用のものと両方の版があるが,使用したのは Z-80用のものである。

Pasca!における変数の基本の型は integeI,boo!ean (以上2ノミイト長), Rea! (4パイト

長〉である。 integerは常t乙符号付き 2進数として計算されるため, Z-BO上で・走らせる場

合は符号のないデータとしての演算が指定できる PLZやSTOICk:比べて少し不利になる

と恩われる。

なおコンパイノレする際は変数のサプレンジを変域とする変数の値をチェックしないとい

うオプ乙ノョン {$Rー}を指定した。これにより 8-Queenは19%,素数の方は13勿実行時

間が短縮された。

OLIVE 香川大学学術情報リポジトリ

Page 22: STOIC スタック向きプログラミング言語shark.lib.kagawa-u.ac.jp/kuir/file/5065/20190528135835/...?(ii スタック向きプログラミング言語STOIC 木村 等 中

-116ー 第53巻策2号 302

Appendix 3. プログラムリスト

A3.1 アセシプラーによる 8-Queen問題

;

;N-QUEEN PR08LEM IN ASSEM8LER

GL08AL Nf)'LJEEN

EXTERI、IAL PUTOH

;

Nn: E(HI 8

白l.EN: EfJlI NO+(2長Nr日ト 1 l 長2 ;SI2E OF WORKING AREA

; 制収LlEEN: ;lNllIAlIZE E刊PTY BOARO

しf) IY,O ;COUNfER OF 80しUTIONS := 0

l D トIL,COL LO 01::,1:01.+1

l [) BC,AIEN 1 Lη (HU,l L[)I~,:

1 D BC,O ;N:"'O

10 1 X, X

C{¥ll GFNEド!

PIJsH IY

F'OF' 十Il

CAU. PIJTDEC

RFI ;

GFNEド 1 [) DE,N臼 ;H:='NG!

NE>( rH: OEC ド,:F') 11 ;IF H<D THEN RE1URN

1 [) Ilt ,COl ; (N,Hl FREE?

AOD HL,OE ;COI.LH1=TRUE?

lD A, (f!l)

AND A

JP Z,NEXTH

LD トIL, D()~m ;OOWN[N+H]=TIWE?

ADD HL,8C

白DD HL,DE

AND ( HI.l

Jr' Z, NF}(TH

LD Hし, lJP ;UP[N仙 H]=)fWE?

AOD H!.,BC

SBC HL,DE

AND (liL l

JF' Z,NEX1H

OLIVE 香川大学学術情報リポジトリ

Page 23: STOIC スタック向きプログラミング言語shark.lib.kagawa-u.ac.jp/kuir/file/5065/20190528135835/...?(ii スタック向きプログラミング言語STOIC 木村 等 中

303 スタック向さプログラミシグ言語STOIC -117ー

LD (1)() ,E ;XlN1:='H !.D H!., COI ;COL[HJ:"'FALSE ADD Hl ,[)E' [)f:C (HL) f'1I・':;H III lD ト11., [)()ωN ;O()WNlNtHl:=FAlSE ADり HL.s( 点。[) HL,DF lH,C (Hl叩}

F' [1::;11 III [[) 十11,U下回 ;UF'(N fll:..FALSE AOD HL,8(.

Hl ,OE DF:C ilH副)

F'W;H IIL

1 D A.C ; N=NG" 1 ? 1:.:[コ NIJ., 1 Jド: Z.COUNT 1 NI~ ; N : '"N + 1 INC IX F'lISH Ol ;SAVE H CAI.J GENEP F・0ド・ DE ; RESl OF.:EトlOEC じ ;N:=N咽 1DEC IX JP RE1'10VE

C OllN'1 : INC IY RE1'10VE: F'OF' Hl ;UP[N剛 HJ:=TRUE

I卜IC (llL ) F'OF' HI. ;DOWNENtH):=lIWE INC (Hl.. )

F'OP トIL ; COL E H J : ",'1 RUE INC (HL) JF' NEXTH

;

X: DEFS NG! COL: OEFS NQ

DEFS NQ-' 1 UP: DEFS NG! 00ωN: 。EFS 2養NQ--l

F.:NO

OLIVE 香川大学学術情報リポジトリ

Page 24: STOIC スタック向きプログラミング言語shark.lib.kagawa-u.ac.jp/kuir/file/5065/20190528135835/...?(ii スタック向きプログラミング言語STOIC 木村 等 中

-118- 第53巻 第2号 304

A3.2 STOICによる 8-Qlleen問題

X N QUEEN PROGRA何 IN STOIC

% USING BYTE ARRAYS OE仁I卜TぬLχ r::ONSTANTS

8 'NO CONS-r ANT

N'-~ 1引 'BIAS CONSTANT 255 'lRUE CONS1ANT o 'FALSE CONSTANl

% VARIABLES ANO ARRAYS 。'N VARIA8LE

() 'CNT VARIABLE NQ 1. 21 DUP 'X ARRAY tW OIJF' 'UP APP向Y

'COL AF~RAY 'DO~JN APPAY

'FR!,E? COL 1 + 8@ UP N 8侶 1 ._. B 1 AS + + B芭 AND。。ωN N BI~ 1 +ト B(~ AND

r S E::TI~~

1 X N 8柑-} 8! FALSE COL I ト B!

F A1.::;[ UF' N 81i! 1 凶 BIAS -} + B! FAI.SE [)()WN N 8u 1 -}ト B!

χX[NJ:=H χC OU H] : '=FALSE

χUP[N-H+BIAS1:=FALSE χDOWN[N+HJ:=FALSE

。山

口RHP

K

F

FEh

p‘

1+

山口目

nu

O

R

U

J

t

+

A

守'

門口

此山はr日、

Y'よ晶一

ぬu

s

mMMIB

÷

B

白日

+

I

N

E

》も晶

Vハ

MHMH

M

W

f

L

oopo

nunUHUFU

O

E

E

E

HUHUHU

E山

nnnk円札

'

M

H

:

τ

'

γ

i

7

s

r‘

N-M

ハVH

V

F

u

y

a

M

H

U

E

D

P

F

F

% DOWNENiHJ:=TRUE χUP[N--H+BIASJ:詔 lPUE

i: C:OUH1:=TREU

。'GENEWr VAIUA巳1FχEN1RY OF GENERATE

'GENERATE

NO 0 DO FF沼 E? IF 8FT日 N 1+! N B日 N日 EG! IF CNT 1+'

ELSE 日ENENT @ EXEC FI

N 1四 REMOV日

F J LOOP

nr hv

hv

t」DU

LY

ャ,aaM円Hw hv

nu

ED

+

nr AVTよ

、』,{

1」

p・Hu

nub-

Huv

+

D

'iロ」1

1

6LDR

Z-hv-i

pu

YE

ハV

'

N

E

D

bHU

s

n

w

n

n

u

N

!

T

EC

rE

M円

M円

AV44TB

E

N

D

A

G

A

P

Rワ

PRHHunu

っιRC

E」

n

h

n

M

M

M

T

B

T

O

Q

Q

E

N

'AHhR

,v円

UMHM同HPUP-ν

。仇PE

C」

M問

削円

UHRC

FhT目白

E」

PUA円

HU

MH凸町

、FM

'tHA

Fr .,

OLIVE 香川大学学術情報リポジトリ

Page 25: STOIC スタック向きプログラミング言語shark.lib.kagawa-u.ac.jp/kuir/file/5065/20190528135835/...?(ii スタック向きプログラミング言語STOIC 木村 等 中

-119ースタック向きフ。ログラミシグ言語STorC305

PLZによる 8-Queen問題A3.3

CONSTANT

CONOIJT : = 2

SYSLIST := 3 ASCICR : ," %00

EX 1 EI~NA t.

PUTWORD PROCEDURE(UNIT BYTE. WωORO) PUTCHAR PROCEDURE(UNIT BYTE. C BYTE)

OF EN FF~OCE 口 U~E(UNIT 8Y1E. P 'BYTE. FLAG BY1E) RETURNS(RCODE BYTE) CLOSE PROCEDURE(UNIT BYTE) RETURNS(RCOOE BYTE)

IN1ERNiil

PF:l N r F位。CE-DUIとE ( 8 8YTE )

ENl RY PUTω0恥D( COIJNT. WORD B ) NEfH 1Nl' PROCf口IJRE

EN1RY FU1CHAR( COUNT. ASCICR )

N 白ueenPro!:!raωi n PL Z NQlJEEN M.OOUf.E

! Input/Oulpul unit nurobers ! Unit number for consote output Unit numher for listino device !

END PRINT

END NEWLINE

FAL~:é :" 0 81A~, := NIJ叩 l

8YTE ω01,0

ARF:AY(N臼巴YTElARf~AY (~処N日 ω1 BYTE 1

CONS1ANl TF~UE :=

N日:" 8 lN1EI~NA L.

N. K COIJNf X, (:OL UI'. OOWN

M刊

F

ヒUH

V1

F

↑』

nU

HU

ν

hk

1

I

=

F

↑ι

-UH

t

i

-

-

'

h品

川刊

V〈

rL

広L

M代Hw

,,

uN

O

E

E

D

S

H

t

L

T

E1A門

yaar'nmm

n

u

z

M

M

刊・・=

2

1

t

j

a

f

C-v

広』八門

vbl

u--

nknu

-

+

1

g

H

a

-

-

4

8

N

K

A

E

TApe-v

nUHU

、P

4

uH''M川、

J

E

E

E

K

MunC口VUHr--

rLB」4A

aEV八

F

A目白

B

U

F

4

6

{

-M川

1tγl

v卜

:'tuN

I

1

3

u

I

E

ハUUHvtttppγa

NESP-

《H

A

I

L

4

1

R

O

A

r

o

E

P

ヒnu--anuzM川

u

z

o

E

4

・れい

にr

h

p

u

h

,F:'bnuM門戸

U

T

T

H

1

4

=

I

1

U

T

-

-

H

n

・・'KM内

C、

o

u

-

-

m

4

q

v

h

u

w

u

s

l‘

UH--M川

M円

CEmハν

ーし

bnnUHrL.rL24M円

purHL

H

υ

t

し、

JMNMN

U

A

O

N

ω

E

C

E

O

F

l

x

D

I

O

-

-

F

:

1

1

:

F

O

Hnnυ

Ely

ylAHhwh

白C

1

hwhAUM刊

ElE

N

ph phv

1-1

DOWNlN.HJ:.1RUE; UPlN-H.PIASl:=TRUE; COL(村J:,lRUEFI H→"1

o口END GENEF:AT[

lF H-NQ THEN EXll 11

nu AV

I

F

't I

Vハ

巳』MH 仁』

け門T

l

n

U

E

AvnM

M刊

ZMR

Pド白内/』=

1νA

I

Vハ

Fr

E

I

M

門.,E

l

Hnz

'i+

νA

nM M

刊.,Z

広』

νhHUU

wn

ce司

1

I

=

•. ;

1

$4vh

--'L

nU品

tUN

vhHW

=

A

V

--.,nυ

ロ」.,

T-Hut-胸、,

M内

pnnHυTa

HU

、abnnM刊

AυZ守

1

H

U

Piv--ZAV

マ16

・・

phv

K

3

'

E

K

T

L

I

U

Aυnrhv

ハ,,

NUMmAV

O

O

Y

E

rLnunupドhr、

R

;

T

D

HUnununUAH円代

n

υ

n

w

n

h

V

M

N

r

c

z

=

z

口ahHWCrb

ru------MNr

・phL

h

v

z

a

‘HUHリ

M刊

RNHvhvhGPUE

F

Y

N

E

i

l

l

-hN1

日目

八刊

e町

M川

M門

M刊

日E

E

v

t

ハリ

H

U

-

n

u

b

-

H

h

u

m

M

ρ

h

u

N

C

a

-

NEWLINE

OLIVE 香川大学学術情報リポジトリ

Page 26: STOIC スタック向きプログラミング言語shark.lib.kagawa-u.ac.jp/kuir/file/5065/20190528135835/...?(ii スタック向きプログラミング言語STOIC 木村 等 中

-120ー 第53巻第2号

A3.4 Pascalによる 8-Queen問題

f事し NQIJEEN. u s n 事日一}

PI<O日F.:AM Nf.1UEEN;

CONST NG! 8, N日2 1:;,; { 2誉N日一 1 }

VAR N. k INrEGER; x 白RRAYIO..N日] OF IN1EGEI':;

じ01... {¥f<RAY [(1“. N日J OF BOOIEAN; UF' 白Ri<:AY [-N白...NQ] OF 800lEAN; [)()I'N: Af<RAY r.リ川刊 NI)2J OF 丹<)OU,AN;CNl INHGt'f':;

Pf<()(日日1m,;I';ENF.:R内rf:, ;

VAF.: H INH:Cι五

B f:i~ I N 十:' (1;

REドEAl lf 仁,,[[f!l AND UHN..Hl AND ()O.IN[N+HJ THEN 日正(;IN

XlNJ1=H; cOL[Hl:~FAlSE; UP[N恒 Hl:=F白LSE;口OWN[N+HJ:ムエF白LSl:; N:"N+.t:

EN[);

11: '.H< 1

lF N=.NO THFN sEGIN CNT:~CNT.l;

[.:: =0; ト:UEAl しHdlE(X[ドl); [(:=.[(..1; UNTIL f(=N日 WRITELN;

f:Nll 1 1"'1 日FNF.ド:AI ~;

N: "N-.l; l)('>¥JNlN..HJ:=[f::LJL Uト[N.Hl:=l,,:lIE; COL[Hl:='lRUE

UNrIl町十1..NI1E N[¥;

{ LN I F.:~ 111 NIWEE N } flEGIN

,~: =日 I.:NT:=口;lく:己日I':EFEAf COl.lド]:冨 Tド:lJE; K:=<:'+l UNTIL <:'=NQ;

306

~( :日 f<t::PEAT UP [I;"N白.1J:=TRUE; DOWN[Kl:=TRUE; <:.:=K+1 UNTIL K=2発NQ-l;

GENEf.:ATE; WR ITELN (CNT)

END {NOUEEN}.

OLIVE 香川大学学術情報リポジトリ

Page 27: STOIC スタック向きプログラミング言語shark.lib.kagawa-u.ac.jp/kuir/file/5065/20190528135835/...?(ii スタック向きプログラミング言語STOIC 木村 等 中

l

l

307 スタック向きプログラミシグ言語STOIC -121ー

A3.5 アセンブラーによる素数の問題

FIN口 N f'f<IME NIJMBERS GlOB白 PRIMEEXTERNAL DIVIDE.PUIDEC

N' EWU 1000 l'I<IMf, ,

UJ J Y..1向日+2恭 211) HしrZ

ll> (CNl ) • Hl INI; HL LD (X) • HL

NU(l"' 1.0 HL..(}()

INC Hl INI; HI.. 1 [l (X) .11し1..0 IX.PTAB+2

r l ~: 1 , I ()ド, (J X)

INI:: 1 X l υυ, (J X) INI: IX 1 U t:C, (X) 1..0 HI .0 CAll DIVJDt I..[) A,1f (> F: JF: Z.NEXT [,)( DE. 1ft.. ~;f::(: III ,EC ,)1' ,: . 1日市 I,:IOI::r, III HL,(X) 10 ( IYl .しIII (TY;J), H INC IY J Nl: lY 1.1) Hl • (CN r ) r NC HI U) じN1) • HI.. l [l [l[ ,N ANO (, S8(: HL ,lJE ,)1' NZ .NU:r

1"1己XNl THF' 1.1"r OF H~IMES 1.0 BC.N L U X X , rl白骨

I'I..OOP' LO I..(l)()

LD H,(IX+j)

CAL!... PりIDECDEC 8C !...O A.B 01'.:

REr Z INC IX INC IX JR PLOOP

;X:=X+2

;DE'=PT白8[~ J

;X I PTAB[U

; if remainder=O then soto NEXT

X' DEFS CNl': flEFS F1品目 DEFW

DEFω DF.:FS ENI】

2 ;CANDIN白TE OF PRIME 2 ;NUMBER OF PRIMES FOUNO 2 ;TABLE OF PRIMES 3 N養2叩ゐ

OLIVE 香川大学学術情報リポジトリ

Page 28: STOIC スタック向きプログラミング言語shark.lib.kagawa-u.ac.jp/kuir/file/5065/20190528135835/...?(ii スタック向きプログラミング言語STOIC 木村 等 中

-122ー 第53巻 第2号

A3.6 STOIC による素数の問題

DEGIMAL FINED FIRSl N PRIME NUM8ERS

% CONST白N'I1日[)u 'N CONSTIミNT

% VARIBl.ES 向ND AI<RAY 日 'X V白,:IABl.E

'PRIME

。'LIt1 VARIA8LE o 'l. VI¥IUI¥BLE [J ':3臼R VARIA8LE 日'F'F:IM V白F:JA8LE N '1' ARRAY

日 lNllIALIZE P 2 <ー1 X ! 日 LIト1 ! 4 ~;日1': ! N 1口。

BECJN 2 X @ ,t X !

308

5日R 自 X 日 ULE lF LIM @ 1+ DUP LIM ! 2. P +日 DUP U蝿 S白F: F 1

;F

1 I'Rl刊 1 L. BEGIN FRIM @ @ LIM @ ULT AND lF

REPEAT PF"IM 自

END

X 日 P L 日 2勢+ @ UMOD NEZ PRIM l 1 + !

x @ P 1 2養+ '

1.001' % F'RJ Nl (llll P N 0 DO DUF 日〈根> DUP 8 SWAP - ( SPACE ) TYPE 2 + l. OOP

OLIVE 香川大学学術情報リポジトリ

Page 29: STOIC スタック向きプログラミング言語shark.lib.kagawa-u.ac.jp/kuir/file/5065/20190528135835/...?(ii スタック向きプログラミング言語STOIC 木村 等 中

userszfSLi--tttffe

309 スタアク向きプログラミシグ言語STOIC -123ー

A3.7 PLZによる索数の問題

。fin>:l firsL n Pi il干':. n l~ r.1 ル~, r包 S

PRIME MOOUしtCON~:TANT ! Infut/OutPllt unit. nu仙 ber5 !

corlOUT・ !Unit number for console out..pui: !

s y ~~l X己1・::.:3 Unif. number イor listini aevic>2 ! EXTERNAL.

NI.l!lF!ELDf:IZE CずTE ! In d j.all切 7 ! PUiWORO PROCEC~RE(lJNIT 8YTE, WωORO)

CONS1Mn N :宮 1(1(:(1

lN1 Ef':NAI t ト f.:I::AY 1. N W()~υ1 I, X, LIti, f;, '~I:'P: ~j(WD

らLI)BAlF ト:HH~ rr.oc巨t;L1"E

EN Tf~ì'

NLlMf"lU 口 ~IZ F.

f'[OJ :~2 ,日『ー 1 , LlM: "0' 1・::::t; SQR:=4; 00

NE>n・D(>x +三 21, SQR<=X THEN LIM+=1 SQR:=P[Ll何3長F'[L!MI Fl K := 1 00

lF K>=Ll門 THENEXIT FROM NEXT FI lF (X MOO P[KII=口 THENREPEAT FRO門 NEXTFl K +=1

00 00 P[II:=X 1+=1 lF I=N THEN EXIT FI

0

2

ハV

AVTιenu

F'U1WORD(CONOUT. F'[III 1+=1 lF I=N THEN EXIT Fl

1)0 EN日F'Rl料E

EN() P佼lME

A3.8 Pascalによる素数の問題

4市l. Fi::IM! l.1 ~q) {$R-) f'i10GRAI1 f'i1 Hl巨;CONST N巳 I口口0,rYPE INI)(,X= 1 "N,

VAi:: X.SI~R: INTEGER' I.Kol".I刊 INOEX', RI刊 BOOLEAN,p, ARRAY [INOEXJ OF INTEGER,

BEGIN

P(1) :."2' X:=1' LlM:=1' S t;!f~ :ら;FOR 11-2 10 N DO 日EGIN

ド:E:F'EAl X:;:::}(+2l H :::{!f¥<三日 lHEN BEG1N Ll~l! "LH, +1' S日R:=P[UMJ長F'[UMJ ENO, K:=2, PRIM:= Tf~IJE ,

WHILE PRIM AND (K<LIMI 00 日巨口IN

ドRIMI'(X MOD P[K)I<>O, KI"K+l

END UNTIL PRIM;

P (l J: =日;ENO, FOR 1:"1 TO N DOωi:J1七 (P[III畠}

ENO

OLIVE 香川大学学術情報リポジトリ

Page 30: STOIC スタック向きプログラミング言語shark.lib.kagawa-u.ac.jp/kuir/file/5065/20190528135835/...?(ii スタック向きプログラミング言語STOIC 木村 等 中

-124ー 第53巻第2号 310

A3.9 STOICの一部にアセンプラーを用いた 8-Queen問題

改良版 1

-CJU

AH

1

I

T

L

n

u

+

+

1

N

Z

V

A

Y

&

F

L

m

z

r

ι

M

M代

-

-

B

L

u

w

r

t

E

O

O

P

D

C

D

U

りh句

h

りA

ワ・FE

V

V

F

F

E

υ

Y

A

H

γ

&

P

R

T

B

A

H

n

k

n

υ

'

n

u

n

u

F

c

a

M

H

p

n

P仇

etnununνnυ

A

M

H

n

k

H

M

H

A

H町

MN

P

K

T

n

,sし八円

AH

O

S

N

R

H

L

L

r

r

M

N

'

L

U

W

Hj

、FH

n

H

n

、,

o

v

h

v

A

V

V

S

L

F

L

l

h

R

E

C

D

O

H

E

C

H

E

C

(

O

B

(〉

i

h

C

n

u

c

a

H

L

E

A

S

F

C

J

'

An

F

n

u

v

a

n

u

n

u

p

v

n

u

c

a

'

G

V

・A-L

D

E

D

J

M円

PHHnu

ハneJV

八円

I

R

R

E

l

H

A

k

a

p

n

H

A

H

F

3」

t'ht」CU

H

U

T

A円

、J白

FLFEununun川

U

N

P

L

E

D

F

C

A

T

X

U

H

C

E

E

1

γ

4

γ

4

M

.

M川

Annununu町

h

v

C

J

V

八円

T

E

M

T

e

E

AMQThAVCJV内

b

'

N

C

N

Y

E

B

D

N

A

O

A

L

A

F

L

I

T

S

C

R

B

T

A

U

-

-

B品

R

D

L

,D

'

o

'

M

N

I

E

A

I

A

H

O

L

'

I

L

Z

AH

ハvnbHunkHv

,fn

u

n

u

n

u

p

r

R

C

,R

D

A

2

l

,ALNIEJ

G

1

N

V

T

F

-

D

H

'AN+Utu-ぃ

l

H

b

h

M

円4

4

M

plvt4nu/~uHM円、,UHCJMCJV

F

C

J

'

5

s

,,

E

O

N

-

A

U

T

q

B

E

Q

Q

D

E

O

H

IP

M

H

M

O

M円ηι

ーし円unuMwnM円山V

八円nunu

,、Huoonu

E

A

B

C

;

-

l

q

t

l

-

t

U

A

S

I

P

h

M

M

H

M

u

n

p

u

H

F

uY4hり《

H

r

E

M円

p

u

p

u

H

v

u

n

ロい

ct

りhnuりh

v

'SF.丁目

rE

CJv t」A

E

F

S

2eL

E

:白

CJ1dra

'LCJVZ

AAZ

FI1

20Qun

HZ++

2可

AunM円

:H

E

守JreM門

M円

M同

5」

rLHW

rLハυnrAυ

Vハnuuunu

りh

v

“v“v“

nu

品'+

s

nu

AVJ 由

+

守'A

OU4a

74

1日n

u

t

ム申目白山

p

ι

n

p

M円

γム

+

N

N

sphuw

BOFo

nunbHUnu

M刊

CLCU

AVJむパVCJV

,、

q

-

、rill

AHAHAN

Y-晶

rrrrpr

, PIJTCONF N日 o00 X 1 + 8日[(JOF CR

'REMOVQ TRLJ在 OOWN N 8日 1 + + B! % OOWN[N+Hl :~TRUE TRUF. UP N B@ 1 - Bl白S + + B! % UP[N 明H+BIASl:~lRUElRUE COL 1 + 8! % COL[Hl:=TRELJ

。'GENENT VARI白Bl.E % ENTRY OF GENER白TE'GENERATE

N日 o00 FREE? IF SErQ N 1+! N B@ N日 E白 IF CNT 1+!

ELSE GENENT @ EXEC FI

N 1-! REMOV自

FI LOOP

() GENER白TE GENENT ~ MAIN F'ROGR白門

'NQUEEN o OLJF' N CNT NQ 0 00 TRUE COL 1 + B! LOOP

NQ 2* 1- 0 00 TRUE OUP UP 1 + B! OOWN 1 +巴 LOOPGENER白TECNT ワ

;F

OLIVE 香川大学学術情報リポジトリ

Page 31: STOIC スタック向きプログラミング言語shark.lib.kagawa-u.ac.jp/kuir/file/5065/20190528135835/...?(ii スタック向きプログラミング言語STOIC 木村 等 中

i

h

-

-

t

311 スタック向きプログラミング言語STOIC -125ー

A3.10 STOICの一部にアセシブラーを用いた 8-Qneen問題

改良版 2

KFC -MN HU ハV件

し0

uH

ハυh

v

n

k

'

S

H

n

r

c

Z

T

I

F

U

U

H

-

-

M

HU

可」

HunkrE

T

e

M

N

A

υ

'

H

U

E」r

ι

n

u

=

b

u

n

p

u

v

J

T

S

。rH

n

z

v

h

h

v

+

:

ハリ

MN円、J

'LrLUH

M円rah

T-M刊

f

L

V

4

'

E

O

O

F

n

u

n

u

n

υ

p

b

'

n

υ

n

n

u

A

n

v

h

ツ向

ν

h

a

-

-

E」

n

u

n

U

4

'

V

A

n

AnM刊

1

4

A

F

AHHn

l

1

G

U

H

A

M

L

B

D

D

D

'

D

C

T

n

w

U

H

g

L

B

L

γ

A

'

L

T

A

E

L

M

H

V

E

{

'

'

'

;

D

I

n

u

F

E

A

V

T

L

A

n

u

n

i

u

p

u

s

L

n

u

n

u

γ

A

M

H

D

l

L

A

D

l

E

4

L

A

N

A

H

F

n

u

A

n

1

L

u

n

n

w

m

p

u

o

n

p

a

ζQ

nυpuusL,e'4Jvnυ''LAN、,Z」

H

I

D

D

H

I

L

E

,,,,,内unu,、nυnuTBnk,nu,、nむunHUMNaL

n

u

v

'

n

nupunuwむ

'

n

υ

A

H

V

A

p

u

n

u

r

p

n

c

L

T

Y

A

l

O

R

D

J

'

'

D

A

E

l

E

'

T

E

A

R

A

S

A

D

D

A

N

F

U

F

E

B

Z

R

R

E

L

'

U

H

-

-

'

s

o

E

R

U

U

'

R

A

C

-

-

L

g

D

A

P

E

O

E

I

S

R

D

N

T

A

}

C

E

H

H

H

U

E

C

D

Z

L

}

T

D

?

M

N

P

ILOUれUrrAnnMSL''L'L,,

ι』A

H

t

c

E

A

T

X

U

H

c

f

E

1

)

A

H

A

n

z

H

D

+

I

E

T

N

'

'

(

N

A

H

E

D

D

L

l

}

}

{

D

D

'

L

1

h

v

p

n

q

v

A

H

H

'

U

H

n

u

j

b

'

L

S

L

usLAn八円nuuH

T

B

F

r

M刊

T

h

A

H

H

U

n

D

U

F

n

υ

A

H

M

g

r

o

s

s

-

'

U

E

B

(

{

N

1

L

E

n

K

M

M

n

v

e

F

n

u

n

u

a

t

h

υ

ι

?

'

L

U

H

'

n

u

n

u

N

A

V

A

O

A

L

A

n

F

L

n

u

E

D

'

D

'

M

N

U

H

T

I

F

T

S

E

R

E

-

u

I

I

L

N

'

I

I

I

-

c

'

E

$

R

A

H

R

G

I

'

O

F

Y

I

F

'

D

'

H

D

E

'

c

I

E

S

M

H

R

N

Z

E

I

A

N

n

l

'

I

Z

I

R

'

D

D

1

0

L

o

x

-

-

B

D

l

ハ門戸』ハvauHUDHMUVJ'nνnunυP4UHγ14Bai』nununM4ι,nυlh,op

ド'

R

L

C

R

D

A

2

l

A

H

L

N

t

E

J

O

L

h

t

A

H

O

h

i

-

-

P

O

I

G

E

T

N

V

T

P

H

A

L

}

l

L

H

O

H

D

D

l

J

I

D

-

'

A

N

+

U

l

-

-

N

"

H

L

l

l

l

L

L

H

R

7

H

E

N

-

N

C

1

C

H

N

}

H

5

5

1

H

H

H

N

H

U

E

H

U

N

T

O

E

pass'bs''FnMUwlL八円U〈

H

(

L

M

O

M

B

C

l

v

V

3

E

T

G

B

E

e

M

-

n

v

E

O

H

P

I

P

E

O

P

OC--臼

O

O

F

O

E

R

NANSNELOONNOAHU口{UHOOHHCHUBDHNCOOUACNIENF

C

a

h

A

o

u

p

M

v

c

M代叩

t

仁田

h

p

h

w

e

L

γ

'

A

H

P

U

M

F

C

A

N

H

U

W

H

A

N

G

d

v

i

f

V

H

V

M

OR

I

M

H

N

R

t

C

A

V

E

E

$

I

O

A

F

-

r

H

q

N

N

U

C

C

V

H

E

U

E

'

E

μ

L

E

a

p

H

O

B

-

ω

n

H

p

u

vhげ

h

n

u

n

u

o 'FALSE CONBIANl

'COI ARRAY 'DOWN ARR向YA XOI ~, COL Hl. l.DI, (HL) 白ND,DE HL ADD,

;: DE: = 1 % COUII

% DOWl'ltN+IJ

;: UP[N'.'IiBIABI

r. COU HI:"日(F白LBE)% lJP[N-'H+BIASI=口

% OOWN[N+HJ=O

% UPIN-H.BIASJ:=TRUE

;: ENTRY OF GENERATE

N 1 -! I~EI10VQ

FI lO')1'

() GENERA1E GENENT ! r. MAIN F'ROGRAM 'NQUEEN

o OUF N ! CNT ! N白 日 日oTRUE COl 1 + B! LOOP N(~ 2<時 1-0 00 TRUE OUP UP 1 + B! OOWN 1 +巴 LOOF'GENERATf; CNT ? F

;F

OLIVE 香川大学学術情報リポジトリ