Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #INCLUDE<P12F629.INC>
- A_reg3 EQU 0x20 ;msb DO NUMERO A
- A_reg2 EQU 0x21 ;registrador do meio
- A_reg1 EQU 0x22 ;lsb do numero A
- B_reg3 EQU 0x23 ;msb do numero b
- B_reg2 EQU 0x24
- B_reg1 EQU 0x25
- C_reg6 EQU 0x30 ;resultado
- C_reg5 EQU 0x31
- C_reg4 EQU 0x32
- C_reg3 EQU 0x33
- C_reg2 EQU 0x34
- C_reg1 EQU 0x35
- temp_reg4 EQU 0x26 ;REGISTRADORES TEMPORARIOS
- temp_reg3 EQU 0x27
- temp_reg2 EQU 0x28
- temp_reg1 EQU 0x29
- counter EQU 0x38
- ;VALORES TEMPORARIOS DE SOMA
- S1_reg4 EQU 0x50 ;SOMA DE REGISTRADOR 1
- S1_reg3 EQU 0x51
- S1_reg2 EQU 0x52
- S1_reg1 EQU 0x53
- S2_reg4 EQU 0x54 ;SOMA DE REGISTRADOR 2
- S2_reg3 EQU 0x55
- S2_reg2 EQU 0x56
- S2_reg1 EQU 0x57
- S3_reg4 EQU 0x58 ;SOMA DE REGISTRADOR 3
- S3_reg3 EQU 0x59
- S3_reg2 EQU 0x5A
- S3_reg1 EQU 0x5B
- test EQU 0x39
- inic_prog ORG 0x00
- ;Declaracao de variaveis
- MOVLW 0x00 ;Move valor para acumulador
- MOVWF A_reg1 ;Move o valor do acumulador para Lsb do primeiro numero
- MOVLW 0xF2 ;Move valor para acumulador
- MOVWF A_reg2 ;Move o valor do acumulador para o registrador do meio no primeiro numero
- MOVLW 0x10
- MOVWF A_reg3
- MOVLW 0x40 ;move valor para acumulador
- MOVWF B_reg1 ;move valor para Lsb do primeiro numero
- MOVLW 0x00
- MOVWF B_reg2
- MOVLW 0xB0
- MOVWF B_reg3
- MAIN
- ;ATRIBUINDO PARAMETROS DA FUNCAO
- MOVF A_reg1,0 ;move valor do registrador lsb do primeiro numero para acumulador
- MOVWF 0x42 ;move valor do acumulador para o parametro 0x42
- MOVF A_reg2,0
- MOVWF 0x41
- MOVF A_reg3,0
- MOVWF 0x40
- MOVF B_reg1,0 ;lsb do segundo numero, vou passar para funcao
- MOVWF 0x43
- MOVWF test
- CALL func_1 ;CHAMADA DA FUNCAO
- ;GUARDANDO VALORES EM SOMA1,RESULTADOS TEMPORARIOS
- MOVF temp_reg1,0
- MOVWF S1_reg1
- MOVF temp_reg2,0
- MOVWF S1_reg2
- MOVF temp_reg3,0
- MOVWF S1_reg3
- MOVF temp_reg4,0
- MOVWF S1_reg4
- ;ATRIBUINDO VALORES DA FUNCAO2
- MOVF B_reg2,0 ;AGORA PASSO O SEGUNDO REGISTRADOR DE B A SER MULTIPLICADO
- MOVWF 0x43
- MOVWF test
- CALL func_1 ;SEGUNDA CHAMADA DE FUNCAO
- ;GUARDANDO VALORES EM SOMA2
- MOVF temp_reg1,0
- MOVWF S2_reg1
- MOVF temp_reg2,0
- MOVWF S2_reg2
- MOVF temp_reg3,0
- MOVWF S2_reg3
- MOVF temp_reg4,0
- MOVWF S2_reg4
- ;ATRIBUINDO SOMA3
- MOVF B_reg3,0 ;AGORA PASSO COMO PARAMETRO O TERCEIRO REGISTRADOR
- MOVWF 0x43
- MOVWF test
- CALL func_1 ;CHAMADA DA FUNCAO
- ;GUARDANDO VALORES EM SOMA3
- MOVF temp_reg1,0
- MOVWF S3_reg1
- MOVF temp_reg2,0
- MOVWF S3_reg2
- MOVF temp_reg3,0
- MOVWF S3_reg3
- MOVF temp_reg4,0
- MOVWF S3_reg4
- ;COLOCO EM DETERMINADOS POSICOES
- MOVF S1_reg1,0 ;COLOCO NO PRIMEIRO REGISTRADOR
- MOVWF C_reg1
- MOVF S3_reg4,0
- MOVWF C_reg6
- ;ADICAO DE APENAS DOIS REGISTRADORES
- MOVF S1_reg2,0
- ADDWF S2_reg1,0
- BTFSC STATUS,0
- INCF C_reg3,1
- ADDWF C_reg2,1 ;GUARDO EM 2
- MOVF S2_reg4,0
- ADDWF S3_reg3,0
- BTFSC STATUS,0
- INCF C_reg6,1
- ADDWF C_reg5,1 ;GUARDO EM 5
- ;ADICAO DE TRES REGITRADORES
- MOVF S1_reg3,0
- ADDWF S2_reg2,0
- BTFSC STATUS,0
- INCF C_reg4,1
- ADDWF S3_reg1,0
- BTFSC STATUS,0
- INCF C_reg4,1
- ADDWF C_reg3,1 ;GUARDO EM 3
- MOVF S1_reg4,0
- ADDWF S2_reg3,0
- BTFSC STATUS,0
- INCF C_reg5,1
- ADDWF S3_reg2,0
- BTFSC STATUS,0
- INCF C_reg5,1
- ADDWF C_reg4,1 ;GUARDO EM 4
- GOTO end_prog
- func_1 NOP
- CLRF temp_reg1
- CLRF temp_reg2
- CLRF temp_reg3
- CLRF temp_reg4 ;test=00+1=01-01=00
- INCF test,1 ;INCREMENTO O TEST,PARA VERIFICAR SE O NOSSO REGISTRADOR B É 0
- DECFSZ test,1 ;DECREMENTO LOGO EM SEGUIDA SE FOR 00, ELE PULA E NAO VAI PARA O LAÇO DE MULTIPLICAÇÃO
- GOTO LOOP_1
- RETURN
- LOOP_1
- MOVF temp_reg1,0
- ADDWF 0x42,0
- BTFSC STATUS,0
- INCF temp_reg2,1
- MOVWF temp_reg1
- MOVF temp_reg2,0
- ADDWF 0x41,0
- BTFSC STATUS,0
- INCF temp_reg3,1
- MOVWF temp_reg2
- MOVF temp_reg3,0
- ADDWF 0x40,0
- BTFSC STATUS,0
- INCF temp_reg4,1
- MOVWF temp_reg3
- DECFSZ 0x43,1
- GOTO LOOP_1
- RETURN
- end_prog
- END
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement