[Progetto IJVM] Aiuto Clicca QUI per vedere il messaggio nel forum |
| maxzulli |
Stavo cercando di shiftare verso destra un numero binario in modo da simulare la sua divisione per 2.
Questo in ambiente IJVM (MIC-1).
Per lo shift a sinistra, la moltiplicazione, non c'e' problema... lo sommo a se' stesso ed in pratica e' come se lo moltiplicassi per 2.
ma per la divisione per 2 come si fa? Non posso sottrarlo da se stesso...
AIUTO!!!!
Grazie
maximus70@yahoo.com |
| LjL |
Bel macello.
La prima cosa che mi viene in mente è questa: se tu hai, per dire, 32 bit, shiftare di uno a destra è equivalente a ruotare di 31 volte a sinistra.
[Ruotare è la stessa cosa di shiftare, con l'aggiunta che, quando ruoti, la cifra che "esce" dall'MSB del numero (il carry out se così vuoi chiamarlo) deve andare a finire nell'LSB del risultato; quindi, se hai 4 bit e vuoi routare il numero 1010 di uno a sinistra, il risultato è 0101, e non 0100 come nel caso dello shift.]
Ora... tu *puoi* shiftare a sinistra; se hai anche un'istruzione per chiedere al processore "c'è o non c'è carry out?", puoi sommare 1 al risultato nel caso in cui il carry out ci sia, e hai la tua rotazione a sinistra.
A questo punto ti "basta" ripetere l'operazione 31 volte. Gran metodo eh...? E tra l'altro non mi ricordo se esiste un'istruzione IJVM che permette di effettuare un salto a seconda del carry out.
Il problema a trovare un algoritmo decente è che, mentre su Internet trovi tutti gli algoritmi che vuoi per la generica divisione intera x/y, fai fatica a trovarne per la divisione per 2, dato che chiunque suppone che tu possa shiftare in quel caso... (e tra l'altro il MIC-1 ha un registro di shift, a cosa diavolo serviva?)
Pubblicità: se vuoi dài un'occhiata a http://www.sf.net/projects/micsimkit , è un simulatore MIC-1, microassembler e macroassembler IJVM adattabile che ho scritto due anni fa. Pieno di bug, ma se c'è qualcuno tipo te a cui magari interessa potrei rimettermi lì... |
| maxzulli |
Ci ragiono su...
GRAZIE INFINITE!!!
PS Ti ho mandato una email... |
| LjL |
| Edited: come non detto. |
|
|
|