There are 3 statements can be used to return from a program.
1. STOP RUN
2. GOBACK
3. EXIT PROGRAM
STOP RUN
Stop run statement will stop the current program and give control back to O.S immediately, whenever it's current in main program or a sub program.
EXIT PROGRAM
Exit program statement can only be used in sub program to specifies the end of a called program and returns control to the calling program.
It is ignored on a main program.
GOBACK
When used in sub program, it's same as EXIT PROGRAM statement, giving back to caller program.
When used in main program, it's same as STOP RUN statement, giving back to O.S
For Example:
(RED statements will not be executed.)
STOP RUN in main program:
IDENTIFICATION DIVISION.
PROGRAM-ID. MAINPROG.
ENVIRONMENT DIVISION.
DATA DIVISION.
PROCEDURE DIVISION.
DISPLAY "MAIN ENTRY".
STOP RUN. *> PROGRAM STOP HERE
DISPLAY "MAIN END".
STOP RUN.
GOBACK in main program:
IDENTIFICATION DIVISION.
PROGRAM-ID. MAINPROG.
ENVIRONMENT DIVISION.
DATA DIVISION.
PROCEDURE DIVISION.
DISPLAY "MAIN ENTRY".
GOBACK. *> PROGRAM STOP HERE
DISPLAY "MAIN END".
STOP RUN.
EXIT PROGRAM in main program:
IDENTIFICATION DIVISION. PROGRAM-ID. MAINPROG. ENVIRONMENT DIVISION. DATA DIVISION. PROCEDURE DIVISION. DISPLAY "MAIN ENTRY". EXIT PROGRAM. *> STATEMENT IS IGNORED DISPLAY "MAIN END". STOP RUN.
(EXIT PROGRAM instruction is ignored.)
STOP RUN in sub program:
IDENTIFICATION DIVISION. PROGRAM-ID. MAINPROG. ENVIRONMENT DIVISION. DATA DIVISION. PROCEDURE DIVISION. DISPLAY "MAIN ENTRY". CALL "SUBPROG". DISPLAY "MAIN END". STOP RUN. IDENTIFICATION DIVISION. PROGRAM-ID. SUBPROG. DATA DIVISION. WORKING-STORAGE SECTION. PROCEDURE DIVISION. DISPLAY "SUBPROG ENTRY". STOP RUN. *> PROGRAM STOP HERE DISPLAY "SUBPROG EXIT".
GOBACK in sub program:
IDENTIFICATION DIVISION.
PROGRAM-ID. MAINPROG.
ENVIRONMENT DIVISION.
DATA DIVISION.
PROCEDURE DIVISION.
DISPLAY "MAIN ENTRY".
CALL "SUBPROG".
DISPLAY "MAIN END".
STOP RUN.
IDENTIFICATION DIVISION.
PROGRAM-ID. SUBPROG.
DATA DIVISION.
WORKING-STORAGE SECTION.
PROCEDURE DIVISION.
DISPLAY "SUBPROG ENTRY".
GO BACK. *> PROGRAM BACK TO CALLER
DISPLAY "SUBPROG EXIT".
EXIT PROGRAM in sub program:
IDENTIFICATION DIVISION.
PROGRAM-ID. MAINPROG.
ENVIRONMENT DIVISION.
DATA DIVISION.
PROCEDURE DIVISION.
DISPLAY "MAIN ENTRY".
CALL "SUBPROG".
DISPLAY "MAIN END".
STOP RUN.
IDENTIFICATION DIVISION.
PROGRAM-ID. SUBPROG.
DATA DIVISION.
WORKING-STORAGE SECTION.
PROCEDURE DIVISION.
DISPLAY "SUBPROG ENTRY".
EXIT PROGRAM. *> PROGRAM BACK TO CALLER
DISPLAY "SUBPROG EXIT".
(EXIT PROGRAM instruction will return back to caller, just like GOBACK instruction)