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
Foram necessárias algumas alterações para se tornar apenas uma fonte verdadeiramente alfanumérica.
A ID do PROGRAMA pode ser descartada. Você obtém um nome de programa gerado (consulte as mensagens).
O ARMAZENAMENTO DE TRABALHO pode ser descartado. Novamente o compilador geme.
Como essas duas linhas anteriormente tinham pontos / pontos ausentes ausentes, que não são mais relevantes agora que as descrições estão ausentes, o número de mensagens de erro é o mesmo de antes e ainda não afeta o código gerado para o programa.
Ao alterar o COMP-5 para COMP, as cláusulas VALUE não são mais permitidas, pois o COMP 9999 possui apenas quatro dígitos decimais, enquanto o COMP-5 é um binário de dois bytes com todos os valores de bits disponíveis.
Os valores nos MOVEs são os valores decimais que fornecem os valores binários que fornecem os pares de caracteres.
Mesmo que os campos COMP tenham quatro dígitos e não permitam cláusulas VALUE com mais de quatro dígitos, você pode usar mais dígitos no MOVE de um valor literal sem truncamento nesse ponto ... não me pergunte por que. A opção do compilador DIAGTRUNC (que eu desliguei) produzirá diagnósticos de aviso para eles.
A opção do compilador TRUNC (BIN) pode ser usada para tratar o COMP como COMP-5, mas os MOVEs são outra maneira de fazê-lo.
Por ser COBOL, a saída deve estar em MAIÚSCULAS (uma mentira, mas apenas por diversão).
HELLO WORLD!
OK, cedido, agora produz:
Hello, World!
O qual, sendo um número ímpar de caracteres, exigiu algumas alterações adicionais, já que não podemos ter campos binários de números ímpares com este compilador. Olhe para essa linha de 13 Xs! Normalmente seria escrito como X (13), mas pode ser como eu mostrei ...
E ORTEXT é necessário (ou não OR, de qualquer maneira) como um nome, porque OR é uma palavra reservada para o compilador (significa OR, é claro).
Esses são os valores EBCDIC, não ASCII, pois estão sendo executados em uma caixa compatível com EBCDIC e Big Endian.
Oh, COBOL requer muitos pontos / períodos completos. Eu os deixei de fora (eles são banidos), então recebi muitas mensagens de compilação. Apenas disse ao compilador para gerar o código de qualquer maneira (nenhuma das mensagens está relacionada ao código do objeto).
Mesmo sem DIAGTRUNC, as mensagens agora têm até 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".