PDA

Visualizza la versione completa : [assebly] problema shift


el92
19-01-2015, 13:43
Ciao sto cercando di studiare la ilo linguaggio assembly e quindi la cpu con le relative istruzioni. Nello schema della cpu per le istruzioni di salto condizionato(bne e beq) e di salto incondizionato(jum) c' lo shift a sinistra di due, che rappresenta il numero di parole in cui mi devo spostare(in byte).Ho un dubbio :dh: : lo shif a sinistra di due vuol dire che aggiungo due zeri ai bit mono significativi della costante o vuol dire che elimino i due bit meno significativi? :confused:

oregon
19-01-2015, 13:46
Di quale CPU parli?

Di quale istruzione per lo shift parli?

MItaly
19-01-2015, 13:57
C' un assembly per ogni famiglia di CPU, se non specifichi di che assembly stiamo parlando difficile darti risposte precise... :stordita: In generale, comunque, per shift a sinistra logico (shl in x86) si intende l'inserimento di zeri nei bit meno significativi, "spingendo" a sinistra il contenuto attuale del registro (i bit meno significativi "cascano fuori" e spariscono dal registro, anche se su molte CPU l'ultimo bit "spinto fuori" si ritrova nel flag di carry). Un discorso analogo vale per lo shift a destra (shr in x86), con la differenza che qui gli zeri vengono inseriti nei bit pi significativi.

Nota che molte CPU implementano anche lo shift aritmetico a destra (sal su x86), che preserva il segno del numero (agisce di fatto come moltiplicazione o divisione per 2^n anche in caso di numeri negativi) conservando (=replicando) il bit di segno.

el92
19-01-2015, 14:27
si scusate mi sono dimenticata di scriverlo..parlo delle architetture mips di tipo risc...ok quindi fare lo shift a sinistra equivale a ad aggiungere due zeri nei bit meno significativi e quindi come moltiplicare il registro x 4 giusto?

oregon
19-01-2015, 14:44
si scusate mi sono dimenticata di scriverlo..parlo delle architetture mips di tipo risc...ok quindi fare lo shift a sinistra equivale a ad aggiungere due zeri nei bit meno significativi e quindi come moltiplicare il registro x 4 giusto?

Il risultato quello.

Loading