From d2edbc38cac8da52f58c5cd3da6c0c625fa05736 Mon Sep 17 00:00:00 2001 From: Santo Cariotti Date: Sat, 6 Feb 2021 19:56:36 +0100 Subject: conf: rename --- Year_1/Computer_Architecture/vector_prod.asm | 103 +++++++++++++++++++++++++++ 1 file changed, 103 insertions(+) create mode 100644 Year_1/Computer_Architecture/vector_prod.asm (limited to 'Year_1/Computer_Architecture/vector_prod.asm') diff --git a/Year_1/Computer_Architecture/vector_prod.asm b/Year_1/Computer_Architecture/vector_prod.asm new file mode 100644 index 0000000..cf5e4ef --- /dev/null +++ b/Year_1/Computer_Architecture/vector_prod.asm @@ -0,0 +1,103 @@ +array1 dcd 1, 3, 4, 1 +array2 dcd 1, 0, 2, 0 +arrayn dcd 4 + + mov r0, #arrayn + ldr r0, [r0] ; r0 = lunghezza array + + mov r1, #array1 ; r1 = puntatore al primo array + mov r2, #array2 ; r2 = puntatore al secondo array + +loop + cmp r0, #0 + beq loop_end + + ldr r3, [r1] ; r3 = valore a cui punta r1 + ldr r4, [r2] ; r4 = valore a cui punta r2 + + cmp r3, #0 ; se r3 è 0, la moltiplicazione sarà 0 + beq r3_store + blt after_neg3 ; se r3 è negativo, cambia il filtro a 1 +jp_before4 + cmp r4, #0 ; se r4 è 0, la moltiplicazione sarà 0 + beq r4_store + blt after_neg4 ; se r4 è negativo, controlla se il filtro è già 1, in caso lo cambia +jp_after4 + cmp r3, r4 ; confronta r3 e r4 per fare la moltiplicazione con ciclo minore + bgt mul_r3 + ble mul_r4 + +loop_back + add r1, r1, #4 ; incrementa i puntatori e decrementa contatore + add r2, r2, #4 + sub r0, r0, #1 + mov r6, #0 + + b loop + +after_neg3 + mvn r3, r3 + add r3, r3, #1 + mov r6, #1 + b jp_before4 + +restart_r6 + mov r6, #0 + b jp_afte4 + +after_neg4 + mvn r4, r4 + add r4, r4, #1 + cmp r6, #1 + beq restart_r6 ; re inserisce il valore 0 perché fa prodotto di due negativi + + mov r6, #1 + b jp_after4 + +neg3 + mvn r3, r3 + add r3, r3, #1 + add r5, r5, r3 + b loop_back + +r3_store + cmp r6, #1 + beq neg3 + str r3, [r1] + add r5, r5, r3 + b loop_back + +neg4 + mvn r4, r4 + add r4, r4, #1 + str r4, [r1] + add r5, r5, r4 + b loop_back + +r4_store + cmp r6, #1 + beq neg4 + str r4, [r1] + add r5, r5, r4 + b loop_back + +mul_r3 + cmp r4, #1 + ble r3_store + + add r3, r3, r3 + + sub r4, r4, #1 + b mul_r3 + +mul_r4 + cmp r3, #1 + ble r4_store + + add r4, r4, r4 + + sub r3, r3, #1 + b mul_r4 + +loop_end + end -- cgit v1.2.3-18-g5258