PDA

View Full Version : Assembly, prodotto a 64 bit


Titti92
18-05-2016, 14:08
Ciao a tutti. Devo fare un prodotto a 64 bit in Assembly Mips e ho molti dubbi.
Devo moltiplicare 0x12345678 HEX per sé stesso e per il suo negato. Mi viene chiesto di salvare tale numero su due registri e di inviarlo ad una funzione che fa il prodotto. Il mio primo dubbio è: quella cifra non è a 32 bit?
Poi: per fare il prodotto devo lavorare sui singoli bit. Quindi fare un algoritmo che preleva i singoli bit e li moltiplica (due cicli in cui scorro i bit).
salvo in $t0 e $t7 le cifre da moltiplicare e uso $t3 e $t5 come contatori.
loop1:
slti $t4,$t3,32
beq $t4,$0,fineloop1
add $t1,$t0,$0 #copio la cifra
add $t5,$0,$0
loop2:
slti $t4,$t5,32
beq $t4,$0,fineloop2
andi $t6,$t7,0x1 #prendo l'ultimo bit della cifra
andi $t8,$t1,0x1 #prendo l'ultimo bit della cifra
srl $t1,$t1,1 #scorro di un bit a destra
and $t9,$t8,$t6 #prodotto tra i bit che ho preso
add $s0,$t9,$s0 #salvo il risultato
sll $s0,$s0,1 #scorro a sinistra di un bit
addi $t5,$t5,1
j loop2
fineloop2:
addi $t3,$t3,1
srl $t7,$t7,1#scorro a destra
j loop1
fineloop1:
potrebbe andare bene? In $s0 ho alla fine il risultato del podotto.