Sie sind auf Seite 1von 3

ARMANAST START

USING ARMANAST,R2 DEFINIR REG BASE


LR R2,R15 CARREGAR REG BASE
ST R14,SAVER14 SALVAR R14
**************** ABRIR ARQUIVOS ***********
OPEN (ENTRADA,INPUT)
OPEN (SAIDA,OUTPUT)
**** LER DADOS
GET ENTRADA,DADOS LE CPF
MVC WPARAM(11),CPFIN CARREGA CPF NO PARAM
FIMARQ EQU *
* CHAMADA DA SUBROTINA
LA R7,WPARAM
L R9,=V(CALCDIG)
BALR R8,R9 CALL
* MENSAGENS FINAIS
MVC MSGOUT,=CL132' ' LIMPAR MSGOUT
MVC MSGOUT(11),=C'CPF LIDO = '
MVC MSGOUT+11(11),CPFIN
PUT SAIDA,MSG
*
MVC MSGOUT,=CL132' ' LIMPAR MSGOUT
MVC MSGOUT(19),=C'DIGITO CALCULADO = '
MVC MSGOUT+19(2),DIGIPARM
PUT SAIDA,MSG
* FECHAR ARQUIVOS
CLOSE ENTRADA
CLOSE SAIDA
**************** VOLTA PARA CHAMADOR ****************
L R14,SAVER14
BR R14 VOLTA PARA O CHAMADOR
********* 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
WPARAM DS 0CL13
CPFPARM DS CL11
DIGIPARM DS CL2
*
DADOS DS 0CL80
CPFIN DS CL11
DS CL69
*
MSG DS 0CL133
DC CL1' '
MSGOUT DS CL132
*
SAIDA DCB DDNAME=SAIDA, NOME DO ARQUIVO *
DSORG=PS, *
MACRF=PM, *
LRECL=133, *
RECFM=FBA, *
BLKSIZE=6650
*
ENTRADA DCB DDNAME=ENTRADA, NOME DO ARQUIVO *
DSORG=PS, *
MACRF=GM, *
LRECL=80, *
RECFM=FB, *
BLKSIZE=4000, *
EODAD=FIMARQ
LTORG
END ARMANAST
**************************************************
* MODULO DE CALCULO DO CPF *
**************************************************
CALCDIG CSECT
USING CALCDIG,R9
USING PARAM,R7
LA R5,9 R5 = QUANT PARA LOOP (9 ALGARISMOS)
LA R3,CPFPARM R3 -> INICIO DO CPF
LA R4,ALGARC R4 -> ALGARISMO
ZAP FATORP,=P'10' FATOR P MULTIPLICAR = 10
BAL R10,CALCULO EXECUTA ROTINA DE CALCULO DO DIGITO
MVC DIGIPARM(1),DIGITO COLOCA DIGITO NO PRIM DIGITO DO CPF
*
LA R5,10 R5 = QUANT PARA LOOP (10 ALGARISMOS)
LA R3,CPFPARM R3 -> INICIO DO CPF
LA R4,ALGARC R4 -> ALGARISMO
ZAP SOMAP,=P'0' ZERA SOMAP
ZAP FATORP,=P'11' FATOR P MULTIPLICAR = 11
BAL R10,CALCULO EXECUTA ROTINA DE CALCULO DO DIGITO
MVC DIGIPARM+1(1),DIGITO COLOCA SEGUNDO DIGITO DO CPF
* VOLTAR PARA CHAMADOR
BR R8 VOLTA PARA CHAMADOR
* SUBROTINA DE CALCULO DO DIGITO
CALCULO EQU *
MVC 0(1,R4),0(R3) RETIRA 1 ALGARISMO DO CPF PARA ALGARC
PACK ALGARP,ALGARC COMPACTA ALGARISMO
ZAP WTRAB,ALGARP ALGARP -> WTRAB (MULTIPLICANDO)
MP WTRAB,FATORP WTRAB = ALGARP * FATORP
AP SOMAP,WTRAB SOMA WTRAB EM SOMAP
AH R3,=H'1' SOMA 1 NA POSICAO DO ALGAR DO CPF
SP FATORP,=P'1' SUBTRAI 1 NO FATOR DE MULTIPLICACAO
BCT R5,CALCULO REPETE CALCDIG 9 VEZES
*
ZAP WTRAB,SOMAP
DP WTRAB,=P'11' DIVIDE SOMA POR 11
ZAP RESTOP,WTRAB+2(2) RESTO DA DIVISAO EM RESTOP
CP RESTOP,=P'2' COMPARA RESTO COM 2
BL P1 RESTO < 2
ZAP WTRAB,=P'11' 11 -> WTRAB
SP WTRAB,RESTOP WTRAB = 11 - RESTO
UNPK DIGITO,WTRAB DESCOMPACTA DIGITO
OI DIGITO,X'F0'
B P2
P1 EQU *
MVC DIGITO,=C'0' DIGITO = 0
P2 EQU *
BR R10 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 **************
ALGARC DS CL1
ALGARP DS PL1
FATORP DS PL2
SOMAP DC PL2'0'
RESTOP DS PL2
WTRAB DS PL4
DIGITO DS CL1
LTORG
****** DSECT PARAMETROS **********
PARAM DSECT
CPFPARM DS CL11
DIGIPARM DS CL2
END

Das könnte Ihnen auch gefallen