|
|||||||
|
|
|
![]() |
|
|
Strumenti |
|
|
#1 |
|
Member
Iscritto dal: Aug 2013
Messaggi: 68
|
Assembly, prodotto a 64 bit
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. Codice:
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: |
|
|
|
|
| Strumenti | |
|
|
Tutti gli orari sono GMT +1. Ora sono le: 17:26.



















