Check Digit Program
Check Digit Program
BEGIN NAME=SAMP,VERSION=07,AMODE=64
*|==================================================================|*
*|----------- P R O G R A M D E S C R I P T I O N ----------------|*
*|==================================================================|*
*| PROJECT NUMBER 04 | DATE 30/07/2024 |*
*|------------------------------------------------------------------|*
*| PROGRAMMER : THRISSA D |*
*|==================================================================|*
SPACE
*|==================================================================|*
*| PROGRAM FUNCTION: |*
*| |*
*| IT CALCULATES THE CHECK DIGIT FOR THE GIVEN SEQUENCE OF 14 |*
*| DIGIT NUMBERS |*
*|==================================================================|*
SPACE
*|==================================================================|*
*| METHOD: |*
*| IT ALTERNATIVELY MULTIPLY THE GIVEN 14 NUMBERS BY 1 AND 2 AND |*
*| IF THE DIGIT IS GREATER THAN 10, SUM UP LIKE 1+0 AND FIND THE |*
*| CHECK DIGIT |*
*|==================================================================|*
*| ENTRIES: |*
*| THE INPUT IS 14 DIGITS |*
*| THE GIVEN INPUT CONTAINS ONLY 14 DIGITS, IF NOT THROW ERROR |*
*| THE OUTPUT DISPLAYED IN THE SCREEN CONTAINS SINGLE DIGIT |*
*| AFTER EXECUTION , IF ENTRY IS VALID IT SHOWS DHECK DIGIT |*
*| IF INVALID , IT SHOWS AN ERROR MESSAGE |*
*|==================================================================|*
SPACE
*|==================================================================|*
*|------------ R E G I S T E R S & L E V E L S ----------------|*
*|==================================================================|*
*| REGISTER USAGE: |*
*| |*
*| INPUT PROGRAM OUTPUT |*
*| |*
*| R0 |*
*| R1 |*
*| R2 R2 CONTAINS INPUT VALUE |*
*| R3 R3 INDICATES LOOP |*
*| R4 |*
*| R5 R5 CONTAINS ADDRESS OF THE EBW WORKSPACE |*
*| R6 |*
*| R7 R7 CONTAINS FINAL CHECK DIGIT VALUE|*
*| R14 |*
*| R15 |*
*| |*
*|==================================================================|*
SPACE
*====================================================================*
* L O C A L W O R K A R E A *
*====================================================================*
INPUT DSECT
STORE DS C
CHECK1 DS XL20
SPACE
*====================================================================*
* M A I N P R O C E S S *
*====================================================================*
$IS$ CSECT
***** START CODING *****
USING INPUT,R5
LA R5,EBW000 TEMPORARY STORAGE REGISTER
LA R1,23(R1) 23 OF POSITION IS LOADED IN R1 REG
LR R2,R1 GIVEN INPUT IN R2
* NUMBER VALIDATION
LA R3,14 14 TIMES LOOP EXECUTED, LOAD IN R3
LOOP EQU * LOOP STARTS
CLI 0(R1),C'+' '+' IS COMPARED TO 0(R1)
BE LEN_ERR IF NOT EQUAL, BRANCH TO LEN_ERR
CLI 0(R1),X'F0' COMPARE IMMEDIATELY F0 WITH 0(R1)
BL NUMERR IF LOW, GO TO BRANCH NUMERR
AHI R4,1 INCREMENTING 1 IN R4 REGISTER
CLI 0(R1),X'F9' COMPARE IMMEDIATELY F9 WITH 0(R1)
BH NUMERR IF HIGH, GO TO BRANCH NUMERR
LA R1,1(R1) BUMPING IS DONE TO GET NEXT VALUE
BCT R3,LOOP LOOP ENDS
CLI 0(R1),C'+' '+' IS COMPARED TO 0(R1)
BNE LEN_ERR IF NOT EQUAL, BRANCH TO LEN_ERR
* CALCULATION CALCULATION STARTS
SR R3,R3 CLEARS R3 REGISTER
SR R4,R4 CLEARS R4 REGISTER
XR R6,R6 CLEARS R6 REGISTER
LA R4,7 7 TIMES LOOP EXECUTED, LOAD IN R3
LOOP1 EQU * ODD POSITION CALCULATION
XI 0(R2),X'F0' CLEARS F AND MAKE IT AS 0 IN 0(R2)
IC R3,0(R2) 1 BYTE IS INSERTED TO R3 REGISTER
AR R6,R3 R3 AND R6 IS ADDED AND STORED IN R6
LA R2,2(R2) BUMP 2 TIMES TO GET ODD POS VALUE
BCT R4,LOOP1 LOOP ENDS
NUMERR EQU *
LA R4,INVAL1 INVAL1 IS LOADED TO R4 REGISTER
BAS R6,SUB_RTN BRANCH TO SUB_RTN
LEN_ERR EQU *
LA R4,INVAL2 INVAL2 IS LOADED TO R4 REGISTER
BAS R6,SUB_RTN BRANCH TO SUB_RTN
*====================================================================*
* C O N S T A N T S / E Q U A T E S *
*====================================================================*
FINIS SAMP
END