Кобол
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 может быть удален. Вы получаете сгенерированное имя программы (см. Сообщения).
РАБОЧАЯ ХРАНИЛИЩА может быть сброшена. Опять стонет компилятор.
Поскольку в обеих этих строках ранее отсутствовали точки останова / периоды, которые больше не актуальны, поскольку описания полностью отсутствуют, количество сообщений об ошибках такое же, как и раньше, и все еще не влияет на сгенерированный код для программы.
При изменении COMP-5 на COMP предложения VALUE больше не допускаются, поскольку COMP 9999 имеет только четыре десятичных знака, тогда как COMP-5 представляет собой двухбайтовый двоичный файл со всеми доступными битовыми значениями.
Значения в MOVE - это десятичные значения, которые дают двоичные значения, которые дают пары символов.
Несмотря на то, что поля COMP имеют четыре цифры и не допускают предложений VALUE с более чем четырьмя цифрами, вы можете использовать больше цифр в MOVE литерального значения без усечения в этой точке ... не спрашивайте меня, почему. Опция компилятора DIAGTRUNC (которую я отключил) выдаст диагностическую диагностику для них.
Опция компилятора TRUNC (BIN) может использоваться для обработки COMP как COMP-5, но MOVE - это еще один способ сделать это.
Поскольку это COBOL, вывод должен быть в верхнем регистре (ложь, но просто для удовольствия).
HELLO WORLD!
Хорошо, уступил, теперь производит:
Hello, World!
Что, будучи нечетным числом символов, потребовало некоторых дальнейших изменений, поскольку мы не можем иметь двоичные поля с нечетным числом байтов с этим компилятором. Посмотрите на эту линию 13 X! Обычно это пишется как X (13), но может быть, как я показал ...
И ORTEXT нужен (или не OR, во всяком случае) как имя, потому что OR является зарезервированным словом для компилятора (это, конечно, означает OR).
Это значения EBCDIC, а не ASCII, поскольку он работает на коробке с поддержкой EBCDIC и Big Endian.
О, 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".