−23−
SDOS‑43(II)アセンブラフ°ログラムにおける
入出力処理
吉村
ゞllll
卓 Input/outputPrograminSDOS‑43(n)Assembler
TakashiYOSHIMURA (昭和54年10月25日受理)
Weconsidersomel/Otechniques inassemblerprogram, especialyamethodofusingtheexecuter ofFORTRANobjectprogramunderthediscoperatingsystemSDOS‑43(II)oftheOKITAC‑4300.
Inorder toexplainthesetechniques,weusesomeexamples insection2and3.
リに収容してユーザに提供されるので, たとえ高級 言語が普及したとしても,マイクロコンピュータの メモリ容量を節約するためにアセンブラが多く用い られることには変りがないであろう。
ところで高専におけるプログラム言語教育の現状 はどうであろうか。詳しい統計資料はないが,「高等 専門学校における情報処理教育の実態調査報告書」(2) によれば,使用教科書一覧表から推して,電気工学 科を除けば多くの学科ではFORTRANのみというと
ころが大半なのではなかろうか。アセンブラ言語教
育の重要性を再認識すべき時期にきているものと思 われる。
アセンブラ教育が敬遠される理由の第1としては,
アセンブラ言語が機種毎に全く異なるという点があ げられる。しかし,教育の目的力ざプログラミング方 法論の指導にあるとすれば, 、言語の違いは第2義的 な問題と考えてよいであろう。
本校には現在HITAC‑8250とOmTAC‑4300の2 機種が設置されているが,バッチ処理による実習を 前提にアセンブラによるプログラミングを初学者に 指導するとすれば,機械命令の種類の少ないミニコ ンシステムOKITAC‑4300を用いて行なうのが学び 易いであろう。 しかるに, このシステムのオペレー テイングシステムSDOS‑43(II)アセンブラには入 出力に関するシステムサブルーチンが用意されてい ないので,全くの初心者にとって入出力に関するプ ログラム作成を非常に困難なものにしている。 ゞ
一方,SDOS‑43(II)の管理下で機能するFORTRAN
に関しては,オブジェクト嘆行時の補助ブロック(主
として入出力関係のルーチ'ンから成る)があるのだ
, 1 ,i
から, これを同じくSDOS一一w43(II)の下でのアセン
1 .緒 ■
1971年にIntel社よりマイクロフ・ロセッサ4004が発 売されて以来,半導体技術の急速な発展により,マ イクロプロセッサの品質の向上,小型化,軽量比が 実現され,低価格のマイクロプロセッサの普及とあ いまって広範囲にわたる応用製品が開発きれ続けて いる。情報処理システムの端末,計測装置や分析機 器と連動したデータ処理システム,プロセス制御或 いは自動製図機等の数値制御への応用など,従来コ ントローラとしてはミニコンピュータが使われてい た分野にマイクロコンピュータが代って用いられる ようになり, コンパクトかつ高性能のシステムが構 成され,価格的にも充分採算のとれるものが供給さ れるようになった。加えて, キャッシュレジスタや 自動販売機など商業的応用や,燃費節約のための点 火時期の制御を始めとする種々の自動車制御への応 用,或いは画像表示端末などデータ通信への応用等 々, 巾広い新応用分野が開発されつつある。(1)
ところで,マイクロコンピュータのう°ログラミン グ言語としては, ミニコン以上の一般コンピュータ と同様アセンブラはもちろん,PL/I系,FORTRAN, COBOL.RPG,BASIC等の高級言語も考えられて いるが,現時点ではアセンブラ言語が最も広く使わ れており,高級言語としてはBASICが普及しつつあ る状態である。 しかし, ソフトウエア開発の比重が としてはBASICが普及しつつあ し, ソフトウエア開発の比重が であろうから,いずれ近い将来
〈使われることになろう。
−ラ的応用製品にあっては,制 メーカによって作成され, メモ 層
コハ
ru
幾器
肖木ubh士
︷
−
−24−
吉村 卓
プラプログラムに利用できない筈はない。また,プ ログラムの生産性の面から考えても折角現にあるソ フトウエア資源の有効利用を図ることは初学者に対 してのみならず大切なことであろう。
次節以下にいくつかのプログラム例をあげて上記 難題の解決策を考察することにしよう。
プログラム例2はニュートン法による正数Aの平 方根Yを求めるプログラムである。この例ではプロ
グラム間のデータ受け渡しは引数を用いて行なって いる。なお, このプログラムではシステムライブラ リの組込み関数ABSを用いている。システムの組込 み関数や基本外部関数の利用についての詳細はOKI‑
TAC‑4300SDOS‑43(II)の解説沖を参蝿された
↓、
C
OOOO1 SQP
OOOO2 SUB SQRGOT
OOOO3 TaP N6
00004 FL Q
OOOOS FQ C1
00006 FH C2
00007 FT X
DOOOB LaBP FL R
OOOO9 FD X
OOO10 FQ x
OOO11 FH C2
O001Z FT Y
OOO13 FS X
0つ014 CRL QBS
OOO1S FS EPS
OOO1S JNZ (S)。 EXT
OOO17 FL Y
OOO18 FT X
OOO19 J L6aP
OOO20 EXT CQL BUTPUT
OOO21 DEF R
OOO2Z DEF Y
OOO23 J Zo TaP
OOO24 Cl DC 1.O
OOO2S C2 DC 0.5
00026 EPS DC 1.OE−3
00027 R DC 7日218.O
OOO2B X BRV 2
00029 Y BRV 2
00030 END
2.FORTRANサブプログラムによる方法 先づ第1に思いつく方法は入出力に関する部分を FORTRANのサブルーチン副プログラムで構成する ことである。プログラム例1はユークリッドのアル ゴリズムによる2つの正整数A, Bの最大公約数C を求めるプログラムである。主プログラムと副プロ グラムの間におけるデータの受け渡しはCOMMON によっている。
1z34Ss7B9O12345S7B9012345S78900oOOOOOO11111111112222222222OooOOoOOOOOOoOOOOOOOoOOOOOoOOOOOOoOOOOOOOOOOOOOOOOOOOOOoOOOOoOooOOOOOOODOoOOOOOOOOOOOOo NBHPBHLDDRLvVVDRUaeRRR角ZRRRRNSSCNCLTLTLSSDXJTLTLTJLTCJBBBE
EUCLID RoBoC
INPUT R N1 B N2 N1 15 1 N2
(Q), GCD N3
N2 N1 N3 N2 HBD N2 C eUTPUT I, TBP
1 1 1 TBP
NBD
jB
●B1E
9■jH2
91
●︐OY19FR9くく了TUYOP0BTRRUHajSO0EON6HT上︑Q凸TらくUくTNaERRRTHUB1RTDUReENSHFRE
oO6
1234SOOOOOOOOOODOOoO 8.s・2gjTO□図aooBEBRZlQI2SS80︒7EYTRUBCHくEETDFXHBNBEGEE¥R単単
GCD
Oo279674BOE03
123NNN
プログラム例2
う°ログラム例3は(4, m)行例Aと (m, n)行 列Bの積Cを求めるう°ログラムである。配列要素を
引用するには,先頭要素が格納されているメモリア ドレスからの偏位値をBレジスタ修飾等の方法で指 定しなければならないが, COMMON要素に対して は間接指定やBレジスタ指定等のアドレス修飾がで
きないので,配列をCOMMONによって引渡すこと はできない。引数によるプログラム間のデータ授受 の方法をとらざるを得ない。 ところで, 引数が配列 の場合,パラメータアドレスは実引数の値が入って いるアドレスではなく, アレイサブテーブルヘのリ ンクアドレスである。アセンブラフ°ログラムではア レイサブテーブルから配列要素の実際のアドレスを 求めて処理することになる。配列要素のアドレスを 求めるルーチンとしてシステムライブラリの中にE$‑
TUBP9NCRI︐CB︐jjE︐BOSNR︐OIIRS2TRoくuENSTNeGeく角RREHDHUBTHQRTDUNaEBENSICRFRE
OO5
1234567oOOOOOOoOOOOOoOOOOOOO jSI
D
−−jH2
951
p
vH1C︐丁OSUBIPogT角くUCHa︐CjlB︐0︐E︐BONR︲SHIRolTREtuENくTNaGBERRREHTHUBTHIRTDUNaR6ENSICHFRE
OO5
12345670000000000000○OOOoOOO
¥EXECUTE,EUCLID HEHBRYoSIZEoO754
( 782, 15)= 2
¥END
¥EDF
図1 . プログラム例1
秋田高専研究紀要第15号
rIil
−25−
SDOS‑43(II)アセンブラフ°ログラムにおける入出力処理
ACというルーチンがあるので,これを利用してもよ いが, う.ログラムが簡単なのでプログラム例3では これを記号番地ADRから始まるサプブロックで計 算させている。
なお,アセンブラプログラムにおける配列の取扱 い,特にアレイサブテーブルの柵成については上記
マニュアルを参照されたい。
NBHJFFFJFFFSSJFFPBHLFFFLTSEEEBLTSEEEBLHQTIDgEERUBBQEEESSCNcDDDLTLTLTLTFFLTLTTDDDLFFTDDDLFFFFHHJTDD
1234Ss7B901234SS7B901234SS7B901234SS7B901234000000000111111111122222222223333333333444△△OOOOOOOOOOOOOOOODOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOODOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOODOOOOOOOOoOOOOODOOOOOO 71く数号号N番番9︐1行行列くH$︾0DJuDDBDR1PNNRNRPくNSSSEOEOEEODHLI角BCLICINJCJZuHKCKQLIK
TBP
【LP
3.EXE等の利用 JLP
前節の方法ではアセンブル時間に加えてFORT‑
RAN副プログラムのコンパイル時間が余計必要とな る。そこで入出力ブロックを直接アセンブラプログ ラムの中で櫛成することを考えよう。
SDOS‑43(II)FORTRANで番かれたソースプロ グラムをコンパイルすると,秤式つき入出力文の READ(u, f)k/WRITE(u, f)kはオブジェク
トプログラムの中では次のように展開される。
KLP IRRRHKJIBRHHKKKRLI DKRDKNPRNIDNIELD XXD
oワBB
LFFACEECDDD
IO$R
入出力の別‑{全職:}:1
入出力デバイスのアドレス FORMAT文番号アドレス
SS7B9012345S78901234S67B90123455789044444SS5SS5SSSSSS66S6E6S67777777777BOOOOOOOOOOOOOOOOOOOOoOoOODOOOOOOOOOOoOoOOOO・OoOOOOODOOOOOOOOoDOOOOOOOOoOODOODOODOD0ODOOOODOOOOOOOOODODDOODODO
単粘度整数型 単糖度実数型 倍梢度実数型 複素数型 論理型 倍精度整数型
FSSSSLFFFRRVVvVVVVvELBTIDIDQEEEBBQRCCCRRRRRRRRDFLFHHJHHJCDDDJNLLNXRHXTJDDDBBBBBBBB
!
JHICJJJIIIBQBCTQ201C1320011111112 NELELUSSSBD2No. DNPNPTPRDO XDDPX U TLFBACELCDD
嵐十3
LI$T データの型 データアドレス
B▽
CAL IO$E
ID
3つのルーチンIO$R,LI$T, IO$Eはいずれも FORTRANオブジェクト実行時の補助サブブロック
としてのシステムモジュールEXE$に属している。
IO$RとIO$Eは1つのREAD文或いはWRITE文に 対して1回だけコールされるが,LI$Tは入出力並び の中の要素毎にコールされる。入力にカードリーダ,
出力にラインプリンタを用いるとして,プログラム 例4にこれらのルーチンの使い方を例示する。例で はIは単精度整数,Aは単精度実数, Dは倍精度実 数, Cは複素数, Lは論理型, Jは倍精度整数を表わ
している。
RDR
99gJJ﹄
口々″ロ●▼△■■■■■■■■■■■■■■〃71■■■■■■■■■且■■■■■■ロ
B・
BDDDXRNNND20EEEENCCZIJKIJKIH
1■P4﹃︑︒α■■﹄毎F﹄■j皇■に毎画日日BgBBRuDD口0口口nuDooDoOnJココココココ可
なお,FORMAT文を構成一 JC命令で与えたのではコー|
ステムのIOCS引用ルーチン A/IOJI61から始まる40語のヰ
】I
?v、〃)てや,
OJI51おJ
RFAD、
」肖木U5R王
−26−
吉村 卓
PBJFJFLFFLFLFLFLFLFLFLLQU6SCECOSCECORCEEBQCEBRCEBRCEBQCEBQCEBRCEQQCSSNTDDDNTDDDNCDDDLCDDLCDDLCDDLCDDLCDDLCDDCCD
12345678901234567890123456789012345578901234000000000111111111122222222223333333333444ムムOOOOOOOOOOOOOOOOOOooOoOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOODOOOOOOOOOOOOOOOOOOOO
90.1z3ムラ67830B9999993gS90000000000001oOOOOOOOOOOOOOOOCOOCOOOO FvvvDCCCCECCCRRQNDDDDDDDD8BBE 20OB18BBB133へC133I11 1110506TTEROOlRO1STTTTN01013$3$3$もも1もlCT3$3$3SBJ8J◆IキーOBO口FOBOFOOOeOVH◆I+I◆I◆IIHAAHBAAHBI八DF*LOI*L1角中L2D*L3C*L4L*LSJIIA
o911 HQIN
Cs
QBr﹄
図3 プログラム例3
よびWRITE文に対するFORMAT文を読み込ませ ている。このルーチンのコーリングシーケンスの詳 細については前記マニュアルを参照されたい。
FORTRANプログラムの中では,READ/WRITE 文に対するFORMATには必ず文番号をつけなけれ ばならないことになっているが, アセンブラプログ ラムの中では文番号そのものは必らずしもそれを要 しないので,プログラム例では記号番地FMT51なら びにFMT61のところで文番号を実際に定義すること なく単にNooperationとしている。
4.付 言
IO$R,LI$T, IO$Eの3つのルーチンのコーリン グシーケンスを導き出すのにSDOS‑43(II)のモニ
",FORTRANコンパイラおよびエグゼキュータを 解読しなければならなかったが, IOCS引用ノレーチン の使い方その他細々とした点に関する質問に対し,
沖電気工業のソフトウエア事業部技術サポートセン タの幾人かの人達から懇切なる回答をお寄せいただ いた。入出力に関する上記3つのルーチンがEXE$
のサブプロックだということも, ロードモジュール のダンプをとってみてはどうかという示唆によって 知ることができた。記して謝意を表わしたい。
SS7B901234S67B901234S67B901234S67B901234S44444S55SS5SSSSS6S6S666E57777777777BBBBBBOOOOOOOOOOOOOOOOOOOOOOOoOOOOOOOOOOOOODOOOoOOOOOOOOOOOOOOOOOOOOOOoOOOOOOOOOOOOOOOOOOOOOOOOOOOOOODOoOOOOODOOOODOOOOOOOoDDDDDD 126TTTTTTENCT3も3$3$3$3$3$$IDOvH◆I◆I◆I↑I+I+IBRDF*LOI*L1R*L2D*L3C*L4L*L5JIH122341B144
?I
FFLFLFLFLFLFLFLvVvVvVVVDEEBQCEBRCEBRCEBQCEBQCEBQCEQRRRRRRCCBRBRNDDLCDDLCDDLCDDLCDDLCDDLCDDCJBBBBBBDDNBNBE
参考文 献
1)森亮一編マイクロコンピュータハンドブ ック朝倉1979
2)高等専門学校における情報処理教育の実態調査 報告書第2報,高等専門学校情報処理教育研究 協議会, 1977
3)OKITAC‑4300科学技術計算用デイスクオペ レーティングシステム(II型)解説書
112SCCTVVHIJRDCLDDF
HeJI51 FHTS1 HeJI61
図4. プログラム例4
秋田高専研究紀要第15号