Bạc hà
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
Yêu cầu một số thay đổi để chỉ trở thành nguồn chữ và số thực sự.
CHƯƠNG TRÌNH-ID có thể được loại bỏ. Bạn nhận được một tên chương trình được tạo (xem tin nhắn).
LÀM VIỆC-BẢO QUẢN có thể được bỏ. Một lần nữa trình biên dịch rên rỉ.
Do cả hai dòng này trước đây đã thiếu các điểm dừng / thời gian đầy đủ, hiện không còn phù hợp nữa khi các mô tả bị thiếu hoàn toàn, số lượng thông báo lỗi vẫn giống như trước đây và vẫn không ảnh hưởng đến mã được tạo cho chương trình.
Khi thay đổi COMP-5 thành COMP, các mệnh đề VALUE không còn được phép, vì COMP 9999 chỉ có bốn chữ số thập phân trong khi COMP-5 là nhị phân hai byte với tất cả các giá trị bit có sẵn.
Các giá trị trong MOVE là các giá trị thập phân cung cấp các giá trị nhị phân cho các cặp ký tự.
Mặc dù các trường COMP có bốn chữ số và không cho phép các mệnh đề GIÁ TRỊ có nhiều hơn bốn chữ số, bạn có thể sử dụng nhiều chữ số hơn trong M CHUYỂN của một giá trị bằng chữ mà không cắt ngắn tại thời điểm đó ... đừng hỏi tôi tại sao. Tùy chọn trình biên dịch DIAGTRUNC (mà tôi đã tắt) sẽ tạo ra chẩn đoán cảnh báo cho những điều này.
Tùy chọn trình biên dịch TRUNC (BIN) có thể được sử dụng để coi COMP là COMP-5, nhưng MOVE là một cách khác để làm điều đó.
Vì nó là COBOL, đầu ra phải ở dạng UPPER CASE (một lời nói dối, nhưng chỉ để cho vui).
HELLO WORLD!
OK, đã đồng ý, bây giờ sản xuất:
Hello, World!
Mà, là một số ký tự lẻ, yêu cầu một số thay đổi hơn nữa, vì chúng ta không thể có các trường nhị phân byte số lẻ với trình biên dịch này. Nhìn vào dòng 13 Xs! Nó thường được viết là X (13), nhưng có thể như tôi đã chỉ ra ...
Và ORTEXT là cần thiết (hoặc không phải OR, dù sao) như một tên vì OR là một từ dành riêng cho trình biên dịch (tất nhiên nó có nghĩa là OR).
Đây là các giá trị EBCDIC, không phải ASCII, vì nó đang chạy trên hộp nhận biết EBCDIC và Big Endian ,.
Ồ, COBOL yêu cầu rất nhiều điểm dừng / thời gian. Tôi đã để chúng ra ngoài (chúng bị cấm) vì vậy có rất nhiều tin nhắn biên dịch. Chỉ cần nói với trình biên dịch để tạo mã bằng mọi cách (không có thông báo nào liên quan đến mã đối tượng).
Ngay cả khi không có DIAGTRUNC, các tin nhắn hiện đã lên tới 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".