Homepage  Il progetto dsy.it è l'unofficial support site dei corsi di laurea del Dipartimento di Scienze dell'Informazione e del Dipartimento di Informatica e Comunicazione della Statale di Milano. E' un servizio degli studenti per gli studenti, curato in modo no-profit da un gruppo di essi. I nostri servizi comprendono aree di discussione per ogni Corso di Laurea, un'area download per lo scambio file, una raccolta di link e un motore di ricerca, il supporto agli studenti lavoratori, il forum hosting per Professori e studenti, i blog, e molto altro...
In questa sezione è indicizzato in textonly il contenuto del nostro forum


.dsy:it. .dsy:it. Archive > Didattica > Didattica in generale
 
[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.

Powered by: vbHome (lite) v4.1 and vBulletin v2.3.1 - Copyright ©2000 - 2002, Jelsoft Enterprises Limited
Mantained by dsy crew (email) | Collabora con noi | Segnalaci un bug | Archive | Regolamento |Licenze | Thanks | Syndacate