Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- ;***********************************************************
- ;DEFINICAO DOS ESPAÇOS DE MEMÓRIA UTILIZADOS PELAS VARIAVEIS
- ;VARIAVEL r: --------
- var_r EQU 0x20
- ;VARIAVEL s: --------
- var_s EQU 0x21
- ;VARIAVEL t: --------
- var_t EQU 0x22
- ;VARIAVEL u: --------
- var_u EQU 0x23
- ;VARIAVEL v: --------
- var_v EQU 0x24
- ;VARIAVEL z: --------
- var_z EQU 0x25
- ;VARIAVEIS TEMPORARIAS:----------
- temp1 EQU 0x30
- temp2 EQU 0x31
- temp3 EQU 0x32
- ;INICIO DO PROGRAMA ************************
- ORG 0x00 ;DEFINICAO DE ONDE COMEÇA O PROGRAMA
- MOVLW 0x06 ;MOVE O VALOR 06 PARA O ACUMULADOR
- MOVWF var_s ;COPIA O VALOR DE W PARA r_lsb
- MOVLW 0x09 ;COLOCA O VALOR 09 EM W
- MOVWF var_t ;COPIA O VALOR DE W PARA s_lsb
- ;REALIZAR A OPERAÇÃO v = s + t - (3*t + 5)
- MOVF var_t,0 ;COPIA O VALOR DE var_t PARA W
- MOVWF temp1 ;COLOCA O VALOR DE W PARA temp1
- MOVLW 0x03 ;COLOCA 0x03 EM W
- MOVWF temp2 ;COLOCA O VALOR DE W EM temp2
- CALL funcmult ;CHAMA A FUNCAO DE MULTIPLICAÇÃO
- ADDLW 0x05 ;FAZ: W = W + 5
- MOVWF temp1 ;COLOCA O RESULTADO DE W EM temp1
- MOVF var_s,0 ;COPIA O VALOR DE S PARA W
- ADDWF var_t,0 ;FAZ: W = W + T
- MOVWF temp2 ;COPIA O VALOR DE W PARA temp2
- MOVF temp1,0 ;COLOCA O VALOR DE temp1 EM W
- SUBWF temp2,0 ;FAZ: W = temp2 - W
- MOVWF var_v ;COLOCA O VALOR DE W EM V
- ;IMPLEMENTAÇÃO DE if(r>0):
- BTFSC var_r,7 ;VERIFICA SE R É NEGATIVO
- GOTO else1 ;SE FOR, VA PARA else1
- DECF var_r,1 ;SE NAO, DECREMENTA R
- BTFSC var_r,7 ;VERIFICA NOVAMENTE SE R É NEGATIVO
- GOTO else1 ;SE FOR, VA PARA else1
- if1 NOP
- ;REALIZAR A OPERAÇÃO U = 2*V - T:
- MOVF var_v,0 ;COPIA PARA W O VALOR DE V
- MOVWF temp1 ;COLOCA O VALOR DE W EM temp1
- MOVLW 0x02 ;COLOCA 0x02 EM W
- MOVWF temp2 ;COPIA O VALOR DE W PARA temp2
- CALL funcmult ;CHAMA A FUNCAO DE MULTIPLICAÇÃO
- MOVWF temp1 ;COLOCA O VALOR DE W PARA 0x30
- MOVF var_t,0 ;COPIA O VALOR DE T PARA W
- SUBWF temp1,0 ;FAZ: W = temp1 - W
- MOVWF var_u ;COLOCA O RESULTADO EM U
- ;IMPLEMENTAR Z = funcD(u,v)
- MOVF var_u,0 ;CARREGA U EM W
- MOVWF parD1 ;COLOCA O VALOR DE W EM parD1
- MOVF var_v,0 ;CARREGA V EM W
- MOVWF parD2 ;COLOCA O VALOR DE W EM parD2
- CALL funcD ;CHAMA funcD
- MOVWF var_z ;COLOCA O VALOR DE RETORNO EM Z
- GOTO finalprog
- else1 NOP
- ;IMPLEMENTAR U = 3*V + 4*T
- INCF var_r ;INCREMENTA R
- MOVF var_v,0 ;CARREGA V EM W
- MOVWF temp1 ;COPIA O VALOR DE W PARA temp1
- MOVLW 0x03 ;CARREGA O LITERAL 0x03 EM W
- MOVWF temp2 ;COLOCA O VALOR DE W EM temp2
- CALL funcmult ;CHAMA A FUNCAO DE MULTIPLICAÇÃO
- MOVWF temp3 ;DEIXA O RESULTADO EM temp3
- MOVF var_t,0 ;CARREGA t EM W
- MOVWF temp1 ;COPIA O VALOR DE W PARA temp1
- MOVLW 0x04 ;CARREGA O LITERAL 0x04 EM W
- MOVWF temp2 ;COLOCA O VALOR DE W EM temp2
- CALL funcmult ;CHAMA A FUNCAO DE MULTIPLICAÇÃO
- ADDWF temp3,0 ;FAZ: W = W + temp3
- MOVWF var_u ;COLOCA O VALOR DE W EM U
- ;IMPLEMENTAR Z= funcE(u,r)
- MOVF var_u,0 ;CARREGA O VALOR DE U EM W
- MOVWF parE1 ;COPIA O VALOR DE W PARA parE1
- MOVF var_r,0 ;CARREGA O VALOR DE R EM W
- MOVWF parE2 ;COPIA O VALOR DE W PARA parE2
- CALL funcE ;CHAMA A FUNCAO E
- MOVWF var_z ;COLOCA O VALOR DE RETORNO EM Z
- GOTO finalprog
- ;************* SUB-ROTINAS **********************
- ;
- ;FUNCAO DE MULTIPLICAÇÃO DE 8bits
- funcmult NOP
- CLRW
- loop NOP
- DECF temp2,1
- BTFSC temp2,7
- GOTO retorna
- ADDWF temp1,0
- GOTO loop
- retorna NOP
- RETURN
- ;FUNCAO D:
- funcD NOP
- ;DEFINIÇÃO DAS VARIAVEIS DA FUNCAO
- parD1 EQU 0x40
- parD2 EQU 0x41
- ;--------------------------------
- MOVF parD1,0 ;COLOCA O VALOR DE 0x40 EM W
- ADDWF parD2,0 ;FAZ: W = parD2 + W
- NOP
- RETURN ;RETORNA
- ;FUNÇÃO E:
- funcE NOP
- ;DEFINIÇÃO DAS VARIAVEIS DA FUNCAO
- parE1 EQU 0x42
- parE2 EQU 0x43
- ;--------------------------------
- MOVF parE2,0 ;CARREGA O VALOR DE parE2 em W
- SUBWF parE1,0 ;FAZ: W = parE1 - W
- NOP
- RETURN ;RETORNA
- finalprog NOP
- END
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement