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
Einige Änderungen waren erforderlich, um eine echte alphanumerische Quelle zu werden.
PROGRAM-ID kann fallengelassen werden. Sie erhalten einen generierten Programmnamen (siehe Meldungen).
ARBEITSLAGERUNG kann entfallen. Wieder stöhnt der Compiler.
Da in beiden Zeilen zuvor Punkte / Punkte fehlten, die jetzt, da die Beschreibungen vollständig fehlen, nicht mehr relevant sind, ist die Anzahl der Fehlermeldungen dieselbe wie zuvor, und der generierte Code für das Programm wird weiterhin nicht beeinflusst.
Wenn Sie COMP-5 in COMP ändern, sind die VALUE-Klauseln nicht mehr zulässig, da COMP 9999 nur vier Dezimalstellen enthält, während COMP-5 eine Zwei-Byte-Binärdatei mit allen verfügbaren Bitwerten ist.
Die Werte in den MOVEs sind die Dezimalwerte, die die Binärwerte ergeben, die die Zeichenpaare ergeben.
Auch wenn die COMP-Felder vierstellig sind und keine VALUE-Klauseln mit mehr als vier Stellen zulassen, können Sie im MOVE eines Literalwerts mehr Stellen ohne Kürzung verwenden ... fragen Sie mich nicht, warum. Die Compiler-Option DIAGTRUNC (die ich deaktiviert habe) erzeugt eine Warnungsdiagnose für diese.
Die Compiler-Option TRUNC (BIN) könnte verwendet werden, um COMP als COMP-5 zu behandeln, aber die MOVEs sind eine andere Möglichkeit, dies zu tun.
Da es sich um COBOL handelt, muss die Ausgabe in GROSSBUCHSTABEN erfolgen (eine Lüge, aber nur zum Spaß).
HELLO WORLD!
OK, unnachgiebig, produziert jetzt:
Hello, World!
Da dies eine ungerade Anzahl von Zeichen ist, sind einige weitere Änderungen erforderlich, da wir mit diesem Compiler keine binären Felder mit ungerader Anzahl von Bytes haben können. Schauen Sie sich diese Linie von 13 Xs an! Es würde normalerweise als X (13) geschrieben werden, kann aber so sein, wie ich es gezeigt habe ...
Und ORTEXT wird als Name benötigt (oder auch nicht OR), da OR für den Compiler ein reserviertes Wort ist (es bedeutet natürlich OR).
Dies sind EBCDIC-Werte, keine ASCII-Werte, da sie auf einer EBCDIC-fähigen und Big Endian-fähigen Box ausgeführt werden.
Oh, COBOL erfordert viele Punkte. Ich habe sie ausgelassen (sie sind verboten), also habe ich viele Kompilierungsnachrichten erhalten. Ich habe den Compiler gerade angewiesen, den Code trotzdem zu generieren (keine der Meldungen bezieht sich auf den Objektcode).
Auch ohne DIAGTRUNC sind die Nachrichten jetzt bis zu 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".