-2

COBOL プログラムに次のコードがあります。

05  WS-CHARACTER-STRING.                               
   10  WS-CHARS-LOW-VALUES     PIC X(08) VALUE X'0000'.   
   10  WS-CHARS                PIC X(08).  
.
.
.          
05  WS-BINARY                 PIC 9(18) BINARY.  
05  WS-RESULT                 PIC 9(18).  
.
.
.  
MOVE WKO-DATA-RECORD(116:8) TO WS-CHARS   
DISPLAY ' WS-CHARS:' WS-CHARS              
MOVE WS-CHARACTER-STRING    TO WS-BINARY   
DISPLAY ' WS-BINARY:' WS-BINARY          
MOVE WS-BINARY              TO WS-RESULT  
DISPLAY ' WS-RESULT:' WS-RESULT         

WS-CHARS に渡される 8 文字は、異なる有効な値です。ただし、WS-RESULT の出力は常に同じ値です。表示メッセージを入れて確認したところ、WS-BINARY と WS-RESULT の値は同じです。まず、このロジックに意味があるかどうかわかりません。そうである場合、異なる入力に対して同じ値を取得するのはなぜですか?

4

2 に答える 2

0

BINARY、DISPLAY、および DISPLAY EDITED 数値データ項目を含むコード例を使用しました。

コンパイラは、型の説明が異なるデータ項目を移動するときに、内部で特定の調整を行います。

原則として、定義が異なる別の領域にデータを移動することは避けてください。そうしないと、「アルファを数値に移動すると、予期しない結果が生じる可能性があります」という診断メッセージが表示されます。つまり、最終結果があなたの望むものではないかもしれません。

UNISYS システムの私の COBOL マニュアル (IBM 構成は異なる場合があります) から、PIC 9(18) BINARY は 63 ビットまたは 7 ASCII バイトで構成されます。この例では、16 バイトの USAGE DISPLAY フィールドを 7 バイトの USAGE BINARY フィールドに移動しています。

これは大したことではないように見えるかもしれません。コンパイラが値の DISPLAY から BINARY への変換に対して内部調整を行うと想定するでしょう。

ただし、データ定義の主な問題は、送信データ フィールドと受信データ フィールドがワード境界にないことです。05 レベルのデータ項目は、メモリ内のワード境界に内部的に配置されません。つまり、このようなデータ フィールドの転送は、コンピュータ メモリ ワードの一部が分解されてから、他のデータ定義タイプに変換されることを意味します。

おそらく、16 ~ 7 バイトの移動命令の最終結果は、最後の 2 つの MOVE コマンドに引き継がれた巨大なバイナリ値の結果を生成しました。

コードのもう 1 つの大きな問題は、PIC X USAGE DISPLAY フィールドが左に同期され、PIC 9 USAGE BINARY フィールドがコンピューター内で右に同期されることです。 WS-CHARS の元の値に関係なく「同一データ移動ミス」。肝心なのは、コーディングが悪いということです。

これをよりよく理解するには、私が最初にプログラミングしていたアセンブリ言語プログラミングを理解する必要があります。

于 2015-05-11T18:21:14.103 に答える