COBOL
ID DIVISION
DATA DIVISION
01 HELLOWORLDBINARY
05 HE COMP PIC 9999
05 LL COMP PIC 9999
05 OCOMMA COMP PIC 9999
05 SPACEW COMP PIC 9999
05 ORTEXT COMP PIC 9999
05 LD COMP PIC 9999
05 EXCLAMATION COMP PIC 9999
01 FILLER REDEFINES HELLOWORLDBINARY
05 HELLOWORLDTEXT PIC XXXXXXXXXXXXX
05 FILLER PIC X
PROCEDURE DIVISION
MOVE 51333 TO HE
MOVE 37779 TO LL
MOVE 38507 TO OCOMMA
MOVE 16614 TO SPACEW
MOVE 38553 TO ORTEXT
MOVE 37764 TO LD
MOVE 23104 TO EXCLAMATION
DISPLAY HELLOWORLDTEXT
GOBACK
真の英数字ソースのみになるには、いくつかの変更が必要でした。
PROGRAM-IDは削除できます。生成されたプログラム名を取得します(メッセージを参照)。
WORKING-STORAGEは削除できます。再びコンパイラがうめき声を上げます。
これらの行の両方には、以前は完全なストップ/ピリオドがありませんでしたが、これは説明が完全になくなったため、もはや関連しなくなったため、エラーメッセージの数は以前と同じであり、プログラムの生成されたコードには影響しません。
COMP-5をCOMPに変更すると、VALUE句は許可されなくなります。COMP9999は4桁の10進数のみであるのに対し、COMP-5はすべてのビット値を使用できる2バイトのバイナリです。
MOVEの値は、文字のペアを提供するバイナリ値を提供する10進値です。
COMPフィールドには4桁があり、4桁を超えるVALUE句を許可していませんが、その時点で切り捨てをせずにリテラル値のMOVEでより多くの桁を使用できます。理由を聞かないでください。コンパイラオプションDIAGTRUNC(これはオフになっています)は、これらの警告診断を生成します。
コンパイラー・オプションTRUNC(BIN)を使用してCOMPをCOMP-5として扱うこともできますが、MOVEは別の方法です。
COBOLであるため、出力は大文字である必要があります(嘘ですが、楽しみのためだけです)。
HELLO WORLD!
OK、寛容、今すぐ生成:
Hello, World!
このコンパイラでは奇数バイトのバイナリフィールドを使用できないため、奇数文字であるため、さらに変更が必要です。13 Xのその行を見てください!通常はX(13)として記述されますが、私が示したとおりにすることができます...
ORはコンパイラの予約語であるため(もちろんORを意味します)、名前としてORTEXTが必要です(とにかくORではありません)。
これらはEBCDIC対応のビッグエンディアンボックスで実行されているため、ASCIIではなくEBCDIC値です。
ああ、COBOLには多くのフルストップ/ピリオドが必要です。私はそれらを禁止しました(禁止されています)ので、多くのコンパイルメッセージがありました。とにかくコードを生成するようコンパイラーに指示しました(オブジェクトコードに関連するメッセージはありません)。
DIAGTRUNCがなくても、メッセージは最大17になりました...
1 IGYDS1003-E A "PROGRAM-ID" paragraph was not found.
Program-name "CBLNAM01" was assumed.
2 IGYDS1082-E A period was required. A period was assumed
before "DATA".
3 IGYDS1082-E A period was required. A period was assumed
before "01".
Same message on line: 11
3 IGYDS1040-E A data item was found in the "DATA DIVISION"
before a section header was encountered.
"WORKING-STORAGE SECTION" was assumed.
4 IGYDS1082-E A period was required. A period was assumed
before "05".
Same message on line: 5 6 7 8
9 10 12 13
14 IGYDS1082-E A period was required. A period was assumed
before "PROCEDURE".
15 IGYPS2145-E A period was required. A period was assumed
before "MOVE".
23 IGYSC1082-E A period was required. A period was assumed
before "END OF PROGRAM".