Você está na página 1de 2

ARMANASC CSECT

ARMANASC AMODE 31
ARMANASC RMODE ANY
USING ARMANASC,R15 R15 = REGISTRADOR BASE
STM R14,R12,SAVEAREA+12 SALVA REGISTRADORES
DROP R15 DESALOCA R15 COMO BASE
USING ARMANASC,R2
LR R2,R15 CARREGA VALOR DO R2 (BASE)
USING PARAM,R7 R7 = ENDERECO AREA COMUM
L R7,0(,R1) CARREGA R7 COM A AREA DO END DO PARM
ST R14,SAVER14 SALVA R14
ST R13,SAVEAREA+4 SALVA ENDERECO SA ANTERIOR
LA R15,SAVEAREA R15 = ENDERECO MINHA SA
ST R15,8(,R13) SAVE R15 (ENDER SA) NA SA ANTWRIOR
*
LA R3,CPFPARM R3 = ENDERECO DO CPF
LA R4,ALGARC R4 = ENDERECO DO ALGARISMO P CALCULO
ZAP FATORP,=P'10' FATORP = 10 PARA INICIAR CALCULO
LA R5,9 R5 = QUANTIDADE DE MULTIPLICACOES
ZAP SOMAP,=P'0'
BAL R14,CALCULO EXECUTA CALCDIG
MVC CPFPARM+9(1),DIGITO COLOCA PRIMEIRO DIGITO NO CPF
*
LA R3,CPFPARM R3 = ENDERECO DO CPF
LA R4,ALGARC R4 = ENDERECO DO ALGARISMO P CALCULO
ZAP FATORP,=P'11' FATORP = 10 PARA INICIAR CALCULO
LA R5,10 R5 = QUANTIDADE DE MULTIPLICACOES
ZAP SOMAP,=P'0'
BAL R14,CALCULO EXECUTA CALCDIG
MVC CPFPARM+10(1),DIGITO COLOCA SEGUNDO DIGITO NO CPF
* VOLTA PARA O CHAMADOR
L R14,SAVER14 RECUPERA ENDERECO DE VOLTA
L R15,=F'0' RETURN-CODE = 0
L R13,SAVEAREA+4 RECUPERA ENDERECO SA ANTERIOR
LM R0,R12,SAVEAREA+20 RECUPERA REGISTRADORES
BR R14 VOLTA PARA MODULO PRINCIPAL
*
CALCULO EQU *
MVC 0(1,R4),0(R3) COLOCAR 1 ALGARISMO DO CPF EM ARGARC
PACK ALGARP,ALGARC COMPACTAR ALGARISMO
ZAP WTRAB,ALGARP ALGARP = PRIM OPERANDO DA MULTIPLIC
MP WTRAB,FATORP WTRAB = ALGARISMO * FATOR
AP SOMAP,WTRAB SOMAR PRODUTO(WTRAB) EM SOMA
* PREPARAR A PROXIMA MULTIPLICACAO
AH R3,=H'1' AVANCA R3 P PROXIMO ALGARISMO
SP FATORP,=P'1' DIMINUI 1 EM FATORP
BCT R5,CALCULO LOOP P CALCULO DO PROX ALGARISMO
* SEGUNDA PARTE DO CALCULO DO CPF
ZAP WTRAB,SOMAP SOMAP = DIVIDENDO (WTRAB)
DP WTRAB,=P'11' DIVIDE SOMA (WTRAB) POR 11
ZAP RESTOP,WTRAB+2(2) RESTO EM RESTOP
CP RESTOP,=P'2' COMPARA RESTO COM 2
BL P1 SE MENOR QUE 2 -> P1
* RESTO >= 2
ZAP WTRAB,=P'11' 11 = SUBTRAENDO
SP WTRAB,RESTOP WTRAB = 11 - RESTO
UNPK DIGITO,WTRAB DESCOMPACTA DIGITO
OI DIGITO,X'F0' ACERTA SINAL DO DIGITO
B P2 IR PARA FIM DO CALCULO
P1 EQU * RESTO < 2
MVC DIGITO,=C'0' DIGITO = 0
P2 EQU *
BR R14 SAI DA ROTINA
********* REGISTRADORES ***********
R0 EQU 0
R1 EQU 1
R2 EQU 2
R3 EQU 3
R4 EQU 4
R5 EQU 5
R6 EQU 6
R7 EQU 7
R8 EQU 8
R9 EQU 9
R10 EQU 10
R11 EQU 11
R12 EQU 12
R13 EQU 13
R14 EQU 14
R15 EQU 15
********* VARIAVEIS **************
SAVER14 DS F
SAVEAREA DS 18F
ALGARC DS CL1
ALGARP DS PL1
WTRAB DS PL4
FATORP DS PL2
SOMAP DS PL2
RESTOP DS PL2
DIGITO DS CL1
LTORG
***********************************************************
************ DUMMY SECTION DA AREA COMUM ***************
***********************************************************
PARAM DSECT
CPFPARM DS CL11
END

Você também pode gostar