Advertisement
apollw

q4_multi_asm

Jul 1st, 2014
185
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 5.66 KB | None | 0 0
  1. #INCLUDE<P12F629.INC>
  2.  
  3. A_reg3 EQU 0x20 ;msb DO NUMERO A
  4. A_reg2 EQU 0x21 ;registrador do meio
  5. A_reg1 EQU 0x22 ;lsb do numero A
  6. B_reg3 EQU 0x23 ;msb do numero b
  7. B_reg2 EQU 0x24
  8. B_reg1 EQU 0x25
  9. C_reg6 EQU 0x30 ;resultado
  10. C_reg5 EQU 0x31
  11. C_reg4 EQU 0x32
  12. C_reg3 EQU 0x33
  13. C_reg2 EQU 0x34
  14. C_reg1 EQU 0x35
  15. temp_reg4 EQU 0x26 ;REGISTRADORES TEMPORARIOS
  16. temp_reg3 EQU 0x27
  17. temp_reg2 EQU 0x28
  18. temp_reg1 EQU 0x29
  19. counter EQU 0x38
  20. ;VALORES TEMPORARIOS DE SOMA
  21. S1_reg4 EQU 0x50 ;SOMA DE REGISTRADOR 1
  22. S1_reg3 EQU 0x51
  23. S1_reg2 EQU 0x52
  24. S1_reg1 EQU 0x53
  25. S2_reg4 EQU 0x54 ;SOMA DE REGISTRADOR 2
  26. S2_reg3 EQU 0x55
  27. S2_reg2 EQU 0x56
  28. S2_reg1 EQU 0x57
  29. S3_reg4 EQU 0x58 ;SOMA DE REGISTRADOR 3
  30. S3_reg3 EQU 0x59
  31. S3_reg2 EQU 0x5A
  32. S3_reg1 EQU 0x5B
  33. test EQU 0x39
  34. inic_prog ORG 0x00
  35. ;Declaracao de variaveis
  36. MOVLW 0x00 ;Move valor para acumulador
  37. MOVWF A_reg1 ;Move o valor do acumulador para Lsb do primeiro numero
  38. MOVLW 0xF2 ;Move valor para acumulador
  39. MOVWF A_reg2 ;Move o valor do acumulador para o registrador do meio no primeiro numero
  40. MOVLW 0x10
  41. MOVWF A_reg3
  42. MOVLW 0x40 ;move valor para acumulador
  43. MOVWF B_reg1 ;move valor para Lsb do primeiro numero
  44. MOVLW 0x00
  45. MOVWF B_reg2
  46. MOVLW 0xB0
  47. MOVWF B_reg3
  48.  
  49. MAIN
  50. ;ATRIBUINDO PARAMETROS DA FUNCAO
  51. MOVF A_reg1,0 ;move valor do registrador lsb do primeiro numero para acumulador
  52. MOVWF 0x42 ;move valor do acumulador para o parametro 0x42
  53. MOVF A_reg2,0
  54. MOVWF 0x41
  55. MOVF A_reg3,0
  56. MOVWF 0x40
  57. MOVF B_reg1,0 ;lsb do segundo numero, vou passar para funcao
  58. MOVWF 0x43
  59. MOVWF test
  60. CALL func_1 ;CHAMADA DA FUNCAO
  61. ;GUARDANDO VALORES EM SOMA1,RESULTADOS TEMPORARIOS
  62. MOVF temp_reg1,0
  63. MOVWF S1_reg1
  64. MOVF temp_reg2,0
  65. MOVWF S1_reg2
  66. MOVF temp_reg3,0
  67. MOVWF S1_reg3
  68. MOVF temp_reg4,0
  69. MOVWF S1_reg4
  70. ;ATRIBUINDO VALORES DA FUNCAO2
  71. MOVF B_reg2,0 ;AGORA PASSO O SEGUNDO REGISTRADOR DE B A SER MULTIPLICADO
  72. MOVWF 0x43
  73. MOVWF test
  74. CALL func_1 ;SEGUNDA CHAMADA DE FUNCAO
  75. ;GUARDANDO VALORES EM SOMA2
  76. MOVF temp_reg1,0
  77. MOVWF S2_reg1
  78. MOVF temp_reg2,0
  79. MOVWF S2_reg2
  80. MOVF temp_reg3,0
  81. MOVWF S2_reg3
  82. MOVF temp_reg4,0
  83. MOVWF S2_reg4
  84. ;ATRIBUINDO SOMA3
  85. MOVF B_reg3,0 ;AGORA PASSO COMO PARAMETRO O TERCEIRO REGISTRADOR
  86. MOVWF 0x43
  87. MOVWF test
  88. CALL func_1 ;CHAMADA DA FUNCAO
  89. ;GUARDANDO VALORES EM SOMA3
  90. MOVF temp_reg1,0
  91. MOVWF S3_reg1
  92. MOVF temp_reg2,0
  93. MOVWF S3_reg2
  94. MOVF temp_reg3,0
  95. MOVWF S3_reg3
  96. MOVF temp_reg4,0
  97. MOVWF S3_reg4
  98. ;COLOCO EM DETERMINADOS POSICOES
  99. MOVF S1_reg1,0 ;COLOCO NO PRIMEIRO REGISTRADOR
  100. MOVWF C_reg1
  101. MOVF S3_reg4,0
  102. MOVWF C_reg6
  103. ;ADICAO DE APENAS DOIS REGISTRADORES
  104. MOVF S1_reg2,0
  105. ADDWF S2_reg1,0
  106. BTFSC STATUS,0
  107. INCF C_reg3,1
  108. ADDWF C_reg2,1 ;GUARDO EM 2
  109. MOVF S2_reg4,0
  110. ADDWF S3_reg3,0
  111. BTFSC STATUS,0
  112. INCF C_reg6,1
  113. ADDWF C_reg5,1 ;GUARDO EM 5
  114. ;ADICAO DE TRES REGITRADORES
  115. MOVF S1_reg3,0
  116. ADDWF S2_reg2,0
  117. BTFSC STATUS,0
  118. INCF C_reg4,1
  119. ADDWF S3_reg1,0
  120. BTFSC STATUS,0
  121. INCF C_reg4,1
  122. ADDWF C_reg3,1 ;GUARDO EM 3
  123. MOVF S1_reg4,0
  124. ADDWF S2_reg3,0
  125. BTFSC STATUS,0
  126. INCF C_reg5,1
  127. ADDWF S3_reg2,0
  128. BTFSC STATUS,0
  129. INCF C_reg5,1
  130. ADDWF C_reg4,1 ;GUARDO EM 4
  131. GOTO end_prog
  132.  
  133. func_1 NOP
  134. CLRF temp_reg1
  135. CLRF temp_reg2
  136. CLRF temp_reg3
  137. CLRF temp_reg4 ;test=00+1=01-01=00
  138. INCF test,1 ;INCREMENTO O TEST,PARA VERIFICAR SE O NOSSO REGISTRADOR B É 0
  139. DECFSZ test,1 ;DECREMENTO LOGO EM SEGUIDA SE FOR 00, ELE PULA E NAO VAI PARA O LAÇO DE MULTIPLICAÇÃO
  140. GOTO LOOP_1
  141. RETURN
  142.  
  143. LOOP_1
  144. MOVF temp_reg1,0
  145. ADDWF 0x42,0
  146. BTFSC STATUS,0
  147. INCF temp_reg2,1
  148. MOVWF temp_reg1
  149. MOVF temp_reg2,0
  150. ADDWF 0x41,0
  151. BTFSC STATUS,0
  152. INCF temp_reg3,1
  153. MOVWF temp_reg2
  154. MOVF temp_reg3,0
  155. ADDWF 0x40,0
  156. BTFSC STATUS,0
  157. INCF temp_reg4,1
  158. MOVWF temp_reg3
  159. DECFSZ 0x43,1
  160. GOTO LOOP_1
  161. RETURN
  162. end_prog
  163. END
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement