メインフレームのオープン化~アセンブラ☞COBOL変換編⑤~
はじめにメインフレームのアセンブラ資産を COBOL へ移行する際、必ずといっていいほど直面するのが、 レジスタを使ったパラメータ受け渡し の問題です。アセンブラでは、処理対象データのアドレスをレジスタに設定し、そのままサブルーチンを呼び出すという書き方が一般的です。しかし COBOL にはレジスタという概念がなく、同じロジックをそのまま再現することはできません。今回は、アセンブラ的な「レジスタにアドレスを設定して共通サブルーチンを呼び出す処理」を、COBOL でどのように置き換えたかを紹介します。アセンブラでよくあるパターンLA R9,ARG1BAS R14,ARGCHKL R9,ARG2BAS R14,ARGCHK このコードでは、以下のような処理が行われています。R9 に処理対象データのアドレスを設定共通サブルーチン ARGCHK を呼び出しサブルーチン側は「R9 の内容」を前提に処理つまり、暗黙的な引数渡し(レジスタ依存) になっています。COBOL での課題COBOL には以下の制約があります。レジスタという概念がないCALL / PERFORM では明示的な引数が必要アドレスではなく「データそのもの」を扱うそのため、アセンブラのように「レジスタにアドレスを入れて呼び出す」という方法は使えません。対応方針:中間バッファ方式今回採用したのは、シンプルで移行しやすい方法です。👉 レジスタの代わりに中間バッファを用意する作業用バッファ(例:R9BUFF)を定義呼び出し前に対象データをバッファへ MOVEサブルーチンは R9BUFF を参照して処理COBOL
0