Solução Problema do Produto Escalar no ARM3

De IFSC
Revisão de 14h37min de 14 de outubro de 2025 por imported>Fargoud
Ir para navegação Ir para pesquisar


Programa que salva dois vetores de 7 valores na memória (A, no endereço 800h e B, no endereço 820h) e executa a operação:

           C[i] =  ∑ A[i].B[i], com i variando de 0 a 7.

Os valores de C serão salvos na memória a partir do endereço 840h, e o valor do somatório final é salvo em 860h

       mov		R0, #4 ; passo de memória
       mov		R10, #0x800 ;endereço de A
       mov		R11, #0x820 ;endereço de B
       mov		R12, #0x840 ;endereço de C
       
       ;valores	do vetor A
       mov		R2, #30
       mov		R3, #27
       mov		R4, #21
       mov		R5, #17
       mov		R6, #10
       mov		R7, #3
       mov		R8, #-1
       mov		R9, #-2
       	
       ;grava	valores de A na memória
       mov		R1, R10
       str		R2, [R1],R0
       str		R3, [R1],R0
       str		R4, [R1],R0
       str		R5, [R1],R0
       str		R6, [R1],R0
       str		R7, [R1],R0
       str		R8, [R1],R0
       str		R9, [R1]
       	
       ;valores	do vetor B
       mov		R2, #-3
       mov		R3, #1
       mov		R4, #7
       mov		R5, #11
       mov		R6, #13
       mov		R7, #23
       mov		R8, #4
       mov		R9, #5
       	
       ;grava	valores de B na memória
       mov		R1, R11
       str		R2, [R1],R0
       str		R3, [R1],R0
       str		R4, [R1],R0
       str		R5, [R1],R0
       str		R6, [R1],R0
       str		R7, [R1],R0
       str		R8, [R1],R0
       str		R9, [R1]
       	
       ;rotina	para multiplicação dos valores
       mov		R1, R10
       mov		R2, R11
       mov		R3, #0
       mov		R4, #7
       mov		R8, #0 ;registrador de saída
       	
 somatorio	mov		R5, #0
       ldr		R6, [R1],R0
       ldr		R7, [R2],R0
       cmp		R7, #0
       bgt		multpos ;se 2o op >0 => mult positiva
       beq		final  ;se 2o op = 0 => não acumula
       	
       ;se		2o. op < 0 :
 multneg	sub		R5, R5, R6
       add		R7, R7, #1
       cmp		R7, #0
       bne		multneg
       b		final
       	
 multpos	add		R5, R5, R6
       sub		R7, R7, #1
       cmp		R7, #0
       bne		multpos
       	
 final
       str		R5, [R12],R0  ;linha de armazenamento 
                                     ;dos valores parciais
       add		R8, R8, R5
       add		R3, R3, #1
       cmp		R3, R4
       ble		somatorio
       	
       str		R8, [R12]