Laboratorio di calcolatori elettronici
COMPITO B del 28 Giugno 2004
Proff. V.Catania - risoluzione di Ignazio Coco
esportato con SciTE


Testo del compito:

Utilizzando l'assembly del DLX scrivere un programma che:
(a)Detti f={7,2,5,-9,1,4,6,2,0,4,-3,11,44,-19} i campioni di una funzione nei punti 1,2,3,...,14, costruisca e visualizzi i valori della derivata per i primi 13 campioni.
(b)Calcoli e visualizzi la media del vettore delle derivate.
(c)Calcolare e visualizzare la somma algebrica delle differenze degli elementi di posizione simmetrica del vettore f.


SVOLGIMENTO:

  .data
mess: .asciiz "\nIl numero di multipli di 4 è %d"
  .align 2
mess_addr:
  .word mess
num:  .space 4
mess2:  .asciiz "\nLa somma è %d"
  .align 2
mess2_addr:
  .word mess2
somma:  .space 4
 
vett1:  .word 2,4,7,9,12,16
vett2:  .word 3,5,6,13,14,18
vett3:  .space 48

  .text
addi r2,r0,0
addi r3,r0,6
addi r7,r0,0

loop_mul4:
  lw r4,vett1(r2)
  andi r5,r4,3
  bnez r5,non_mul
  addi r7,r7,1
non_mul:
  addi r2,r2,4
  subi r3,r3,1
  bnez r3,loop_mul4

sw num(r0),r7
addi r14,r0,mess_addr
trap 5

addi r2,r0,0
addi r3,r0,6
addi r6,r0,0

loop_somma:
  lw r4,vett1(r2)
  andi r5,r4,1
  beqz r5,pari
  sub r6,r6,r4
  j ciclo
pari:
  add r6,r6,r4
ciclo: 
  addi r2,r2,4
  subi r3,r3,1
  bnez r3,loop_somma

sw somma(r0),r6
addi r14,r0,mess2_addr
trap 5

addi r2,r0,0
addi r3,r0,0
addi r10,r0,0
addi r4,r0,12
addi r12,r0,6
addi r13,r0,6

loop_ordina:
  beqz r12,cv2
  lw r5,vett1(r2)
        ;problema --->>> lo spiazzamento di vett1 va oltre vett1
cv2:  beqz r13,avan
  lw r6,vett2(r3)   ;toccando lo spazio allocato per vett2:: possibili soluzioni?
avan: slt r7,r5,r6    ;
  beqz r7,vett2_magg
  sw vett3(r10),r5
  subi r12,r12,1 
  addi r2,r2,4
  j ciclo2

vett2_magg:
  sw vett3(r10),r6
  subi r13,r13,1
  addi r3,r3,4
ciclo2:
  addi r10,r10,4
  subi r4,r4,1
  bnez r4,loop_ordina

 
trap 0