Solução Problema do Produto Escalar no ARM3
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]