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
Se requieren algunos cambios para convertirse en una fuente verdaderamente alfanumérica únicamente.
PROGRAM-ID se puede descartar. Obtiene un nombre de programa generado (ver mensajes).
ALMACENAMIENTO DE TRABAJO se puede dejar caer. Nuevamente el compilador gime.
Dado que a estas dos líneas les faltaban puntos completos / períodos, que ya no son relevantes ahora que faltan por completo las descripciones, el número de mensajes de error es el mismo que antes y aún no afecta el código generado para el programa.
Al cambiar COMP-5 a COMP, las cláusulas VALUE ya no están permitidas, ya que COMP 9999 tiene solo cuatro dígitos decimales, mientras que COMP-5 es un binario de dos bytes con todos los valores de bits disponibles.
Los valores en los MOVE son los valores decimales que dan los valores binarios que dan los pares de caracteres.
Aunque los campos COMP tienen cuatro dígitos y no permiten cláusulas VALUE con más de cuatro dígitos, puede usar más dígitos en el MOVE de un valor literal sin truncamiento en ese punto ... no me pregunte por qué. La opción del compilador DIAGTRUNC (que he desactivado) producirá diagnósticos de advertencia para estos.
La opción de compilador TRUNC (BIN) podría usarse para tratar COMP como COMP-5, pero los MOVE son otra forma de hacerlo.
Como es COBOL, la salida debe estar en MAYÚSCULAS (una mentira, pero solo por diversión).
HELLO WORLD!
OK, cedido, ahora produce:
Hello, World!
Lo cual, al ser un número impar de caracteres, requirió algunos cambios adicionales, ya que no podemos tener campos binarios de números impares con este compilador. ¡Mira esa línea de 13 X! Normalmente se escribiría como X (13), pero puede ser como he mostrado ...
Y ORTEXT es necesario (o no OR, de todos modos) como nombre porque OR es una palabra reservada para el compilador (significa OR, por supuesto).
Estos son valores EBCDIC, no ASCII, ya que se ejecuta en un cuadro compatible con EBCDIC y Big Endian.
Oh, COBOL requiere muchas paradas completas / períodos. Los dejé fuera (están prohibidos), así que recibí muchos mensajes de compilación. Acabo de decirle al compilador que genere el código de todos modos (ninguno de los mensajes está relacionado con el código objeto).
Incluso sin DIAGTRUNC, los mensajes ahora son hasta 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".