突然、下記のようなプログラム(アセンブラらしい)を多々渡されて、「これをCOBOLに変換して!!」といわれました。
解説書も無く、何アセンブラかも??で途方に暮れています(--;;;何アセンブラか教えて欲しいです。また、参考書or参考HPも。とにかく情報をください。お願い致します。
AAAAAA START
R0 EQU 0
:
R12 EQU 12
SAVE (14,12)
BALR R3,0
USING *,R3,R4
LA R4,4095(R3)
LA R4,1(R4)
ST 13,OCSV1+4
LA 13,OCSV1
OPEN (TFIN,(INPUT,DISP))
OPEN (TFOUT,(OUTPUT,DISP))
RDIN ST 13,###@SV13
L 13,=A(###@RSV)
GET TFIN,TW
L 13,###@SV13
ST 13,###@SV13
L 13,=A(###@RSV)
PUT TFOUT,TW
L 13,###@SV13
B RDIN
EOFIN CLOSE (TFIN,DISP)
CLOSE (TFOUT,DISP)
L 13,OCSV1+4
RETURN (14,12),RC=0
LTORG
OCSV1 DS 18F
OCSV2 DS 18F
###@RSV DS 18F
###@SV13 DS F
DS 0D
TFIN DCB DDNAME=TFIN,
LRECL=0,
EODAD=EOFIN,
RECFM=FB,
MACRF=(GM),
BLKSIZE=0,
DEVD=DA,
DSORG=PS
TFOUT DCB DDNAME=TFOUT,
LRECL=0,
RECFM=FB,
MACRF=(PM),
BLKSIZE=0,
DEVD=DA,
DSORG=PS
DS 0D
TW DC 1024C' '
END
No.7ベストアンサー
- 回答日時:
ファイルのコピーをしている事は間違いないようです。
ただ、マクロの部分を中心にまだわからないところが多々あります。
特にレジスター13がキーポイントのようです。
R13はいろんな使い方をされているようです。
(1)一つ思い出しましたが、昔、R13はサブルーチンの飛び先か戻り先のアドレス保持に使っていました。このプログラムもRETURNで終わっていますので戻りアドレスの保持をR13でしているようです。先頭の方でR13をセーブしていないのもそれが理由でしょう。
ST 13,OCSV1+4
・
・
L 13,OCSV1+4
がそのセーブと回復ですね。
(2)OPENマクロの中で18ワード(72BYTE)の領域(ワーク?)を欲しがるようです。そこでOCSV1の先頭アドレスをR13で渡しています。
(3)同様に、GETマクロ,PUTマクロでも同じ大きさの領域を要求すると見えて、R13で###@RSVの先頭アドレスを教えています。
残念ですが、L 13,###@SV13 と ST 13,###@SV13 が2個ずつあるのですが、よくわかりません。無意味のように思えてなりません。制御用プログラムなどでタイミング調整にこんな事をやったような気もするのですが。
私はこの辺が限界です。それではがんばって下さい。
ymmasayanさん。本当にありがとうございました。<(_ _)>
今後、200本近く変換作業を行うらしく 凹んでいます。
・・・・お陰様で、少しはプログラムを見て 考える知識が付きました。(まだまだですが、考えようと努力できる自信が・・・付いたかなぁ(^^;;;;;;)
また、なにか????のコマンドがありましたら 再度投稿しますので これに懲りず 助言お願い致します。
本当に、ありがとうございました。<m(__)m>
-----欲をいえば、ymmasayanさんの知識を購入したいですね(笑)
No.8
- 回答日時:
私もとっくに限界超えてま(^^;
あとはマニュアル類で調べないと手が出ません。
汎用機で間違いなさそうですから、入手法はあるでしょう。
そもそも、これをCOBOLに直して実行したいということなら、COBOLを実行できる汎用機の環境があると思えますので,
何かしら資料があるのでは?
もし、汎用機が無いのでしたら,移植そのものがあまり意味がないと思えますし。
イロイロとありがとうございました。
汎用機のシステムをダウンサイジングするので、COBOLに変換するらしい・・・・です。それで、このような質問でした。
ただ、昔の汎用機の資料が無く(マニュアル込) プログラムをみて 変換するようです。(他人事に聞こえるが・・・他人事にしたい(^^;;;;)
??のコマンドがありましたら、再度投稿いたしますので
そのときは宜しくお願い致します。<m(__)m>
助言 本当にありがとうございました。お陰様で、少しずつ理解できるようになってきました。たぶん。
No.6
- 回答日時:
私よりymmasayanさんの方が詳しそうですが,
せっかくなのでもう少し書いていきます(^^;
間違いはymmasayanさんが指摘してくれると期待して。
>GET TFIN,TW
ラベルTFINにあるDCB(Data Control Block?,Device?)の設定に従い、ラベルTWの領域に読み込む。
同様に、PUTならTFOUTの設定に従い,ラベルTWの内容を出力する。
>TW DC 1024C' '
TWがラベルで、ここのアドレスを表し、
DCがData Charcterかな? 1byte単位で1024byteの領域.
つまり、ここがI/O用のバッファになります。
>TFIN DCB DDNAME=TFIN,
..
>DSORG=PS
TFINがラベル名で、DCBがマクロ名で、
データアクセス用の設定用マクロです。
Cで例えるなら,DCB型のstaticな構造体があって、
DDNAMEというメンバをTFIN(これはラベルでなく文字)
で初期化, EODADはEOFINで初期化‥のような意味です。
COBOLでは例えられません(^^;
EODADはEnd Of Data jump ADdressみたいな意味でしょう(^^;
というわけで、1024単位でファイルのコピーをしているだけの感じですね。
ただ、データセットの形式が違うようなので,それの変換という意味と思えます.
これは、TFINが MACRF=(GM)なのにTFOUTが MACRF=(PM)で、他はDCBの設定自体が同じことからの推測です。
MACRFの意味が見当つかないので、これ以上わかりませんが。
この回答への補足
本当に何度も質問してすみません。
L 13,###@SV13 ** 13レジスタ←###@SV13の内容
ST 13,###@SV13 ** ###@SV13←13レジスタ
と、何をやっているのか??です。
解説をお願いしたいです。
大変申し訳ありませんが、教えて戴きたいです。
No.5
- 回答日時:
ymmasayanです。
一つ思い出しました。
BALRはCALL命令と等価というのは本当ですが、先頭部のはちょっと意味が違います。
BALR R3,0 0がダミーコールを示す。
USING *,R3,R4 ここがベースレジスタのスタートポイントという宣言。
LA R4,4095(R3)
LA R4,1(R4)
この4命令でベースレジスターのR3とR4をセットしています。
最初のBALRは ダミーCALLで、どこへも飛ばずに戻りアドレスをR3に取得する仕事だけをします。これが実は次のLA命令のアドレスです。
次に2つのLAでR4=R3+4095+1を計算しています。
R3とR4で8キロバイトのメモリがアクセスできる事になります。
この回答への補足
本当に何度もすみません。
この
GET TFIN,TW
って、下に宣言している 領域(?)を TW に移していますよね。
でも、その下の L , ST 命令に TW が無く GET した情報をどうしているのか??です。
更に PUT も 何を PUT しているのか??です。
大変申し訳ありませんが、教えて下さい。お願いいたします
No.4
- 回答日時:
No.3のymmasayan です。
補足にお答えします。> B RDIN っていわゆる GO TO 文ですよね。
比較文等が無ければ、永久ループになると思うのですがそこら辺が??の状態です。
確かに永久ループに見えますね。
実は、GET文でEOF(End Of File)を検出すると自動的に EOFINに飛ぶと思います(多分)。
EODAD=EOFIN がその指定だと思います。
No.3
- 回答日時:
1960年代の汎用機(IBM、富士通、日立・・・)のアセンブラーにそっくりです。
今の汎用機もそれをほとんど継続しているはずです。思い出す範囲で命令語の意味を書いてみます。
EQU equate アドレス等置
(例)R4 EQU 4 R4と言うラベルは4番地・・・・R4と書くとアセンブラーが4と読み替える。ここでは LA R4,4095(R3)が好例。LA 4,4095(3) と同じ。
BALR R3,0 Branch and Link Register スタックがない当時のCALL命令。レジスタを2つ書く。飛び先と戻り先。
USING *,R3,R4 ベースRegisterを2個割り当てている。(擬似命令)
L ロード
LA ロードアドレス
ST ストアー
B RDIN 無条件分岐命令
RETURN (14,12),RC=0 リターン命令
LTORG Literal Origin リテラルプールの先頭の宣言(擬似命令)
OCSV1 DS 18F
OCSV2 DS 18F
###@RSV DS 18F
###@SV13 DS F
DS 0D バウンダリー調整 ダブルワードに調整
> L 13,=A(###@RSV)
リテラルプールに###@rsvのアドレスを作り、その中身(アドレス)をR13にロードします。
LA 13,###@rsv と同じですが、リテラルプールにアドレス定数が取られるか取られないかが違います。(使った理由はわかりません)
この回答への補足
すみません。更に教えて下さい。
B RDIN
っていわゆる GO TO 文ですよね。
比較文等が無ければ、永久ループになると思うのですが
そこら辺が??の状態です。
もしかして PUT文で自動的に EOFIN に飛ぶのでしょうか??
申し訳ありませんが、教えていただきたいです。
No.2
- 回答日時:
多分,汎用機、メインフレームのアセンブラと思います。
昔,富士通の汎用機でプログラムしたことや、アセンブラを眺めたことがありますが、
それらしい記述があります。
また、当時使っていた富士通のはIBMの汎用機の互換機です。
特徴的なのは,
>TFIN DCB DDNAME=TFIN,
にある、DDNAMEとか、
ファイルの形式を示している、
>RECFM=FB,
固定長ブロック形式をあらわすFBとかですね。
後は忘れました(^^;
ざっと見た感じでは,TFINから読み込んだ物をTFOUTに
単にコピーしているような感じです。
但し,ファイル形式は違うようですが。
# JCLもすっかり忘れたなぁ.
アセンブラの命令自体は、8080なんかとそんなに違わないので意味は見当つきますね。
ただ、レジスタが数字で表現して、命令中の場所で判断しないといけないので読み辛いです.
>ST 13,OCSV1+4
>LA 13,OCSV1
ストア、ロードで、13はレジスタ番号の13です。
この回答への補足
ごめんなさい。
L 13,=A(###@RSV)
って、13レジスタ ← ###@RSV って解りましたが、=A って何の意味があるか分かりますか??
教えて下さい。お願いいたします。
No.1
- 回答日時:
詳しくないのでトッケンハッケンなこと書くかもしれませんが…
シャープのポケコン「PC-1360」用のモノではないでしょうか?
PC-1360用クロスアセンブラ「TNKASM」に、「EQU」という擬似命令があります。
TNKASMのオペコードは、SC61860(これもシャープのポケコン)機械語命令に擬似命令とマクロ命令を追加したもの、とあり、その擬似命令の一つが「EQU」でした。
「equ」ならX68000のアセンブラに出てくるのをwebで見たことがありますが。
#これ以外だとPICとかかなぁ
参考URL:http://www.linkclub.or.jp/~watanu/paso/log/TNKAS …
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
関連するカテゴリからQ&Aを探す
おすすめ情報
- ・漫画をレンタルでお得に読める!
- ・街中で見かけて「グッときた人」の思い出
- ・「一気に最後まで読んだ」本、教えて下さい!
- ・幼稚園時代「何組」でしたか?
- ・激凹みから立ち直る方法
- ・1つだけ過去を変えられるとしたら?
- ・【あるあるbot連動企画】あるあるbotに投稿したけど採用されなかったあるある募集
- ・【あるあるbot連動企画】フォロワー20万人のアカウントであなたのあるあるを披露してみませんか?
- ・映画のエンドロール観る派?観ない派?
- ・海外旅行から帰ってきたら、まず何を食べる?
- ・誕生日にもらった意外なもの
- ・天使と悪魔選手権
- ・ちょっと先の未来クイズ第2問
- ・【大喜利】【投稿~9/7】 ロボットの住む世界で流行ってる罰ゲームとは?
- ・推しミネラルウォーターはありますか?
- ・都道府県穴埋めゲーム
- ・この人頭いいなと思ったエピソード
- ・準・究極の選択
- ・ゆるやかでぃべーと タイムマシンを破壊すべきか。
- ・歩いた自慢大会
- ・許せない心理テスト
- ・字面がカッコいい英単語
- ・これ何て呼びますか Part2
- ・人生で一番思い出に残ってる靴
- ・ゆるやかでぃべーと すべての高校生はアルバイトをするべきだ。
- ・初めて自分の家と他人の家が違う、と意識した時
- ・単二電池
- ・チョコミントアイス
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
ライン数とステップ数の違いは?
-
アセンブラからC言語に変換する...
-
PICに書き込むプログラムや変数...
-
アセンブラエディタ
-
組み込み系C言語の学習法
-
[C言語→アセンブリ言語]はどう...
-
アセンブラについて質問です。
-
アセンブリ言語について。
-
アセンブラ マイコン
-
実行ファイルからソースはみれる?
-
このアセンブラの意味を教えて...
-
インラインアセンブラの関数に...
-
アセンブラからCの関数を呼び出...
-
アセンプラ16ビット8086
-
void __cdeclなど_
-
PowerPC用逆アセンブラを知りま...
-
解析魔法少女を読んだ方に質問
-
0xffffとは?
-
8ビットのデータの、先頭ビット...
-
シーケンサのデータレジスタD...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
アセンブラからC言語に変換する...
-
ライン数とステップ数の違いは?
-
実行ファイルからソースはみれる?
-
PC-9801でマシン語を学習するに...
-
[C言語→アセンブリ言語]はどう...
-
void __cdeclなど_
-
アセンブラwordという単位
-
アセンブラ言語がわかりません。
-
バイナリの実行ファイルをgccを...
-
SHの命令の意味について
-
PC-9801 MS-DOSでの実行ファイ...
-
アセンブラエディタ
-
PICに書き込むプログラムや変数...
-
PICのアセンブラからC言語へ変...
-
アセンブラのLA
-
【H8マイコン】HEWで埋め込みア...
-
ニーモニックコードを使って割...
-
7セグメントLEDの点灯について
-
アセンブラのコマンドについて
-
MASMの機種依存についてお尋ね...
おすすめ情報