[successivo] [precedente] [inizio] [fine] [indice generale] [indice ridotto] [indice analitico] [home] [volume] [parte]


Capitolo 734.   Scorrimenti, rotazioni, operazioni logiche

Le operazioni più semplici che si possono compiere con un microprocessore sono quelle che riguardano la logica booleana e lo scorrimento dei bit. Proprio per la loro semplicità è importante conoscere alcune applicazioni interessanti di questi procedimenti elaborativi.

734.1   Scorrimento logico

Lo scorrimento «logico» consiste nel fare scalare le cifre di un numero binario, verso sinistra (verso la parte più significativa) o verso destra (verso la parte meno significativa). Nell'eseguire questo scorrimento, da un lato si perde una cifra, mentre dall'altro si acquista uno zero.

Figura 734.1. Scorrimento logico a sinistra, perdendo le cifre più significative e scorrimento logico a destra, perdendo le cifre meno significative.

scorrimento

Lo scorrimento di una posizione verso sinistra corrisponde alla moltiplicazione del valore per due, mentre lo scorrimento a destra corrisponde a una divisione intera per due; scorrimenti di n posizioni rappresentano moltiplicazioni e divisioni per 2n. Le cifre che si perdono nello scorrimento a sinistra si possono considerare come il riporto della moltiplicazione, mentre le cifre che si perdono nello scorrimento a destra sono il resto della divisione.

734.1.1   Esercizio

Si esegua lo scorrimento logico a sinistra (di una sola cifra) del valore 110101012.

otto cifre

734.1.2   Esercizio

Si esegua lo scorrimento logico a destra (di una sola cifra) del valore 110101012.

otto cifre

734.2   Scorrimento aritmetico

Il tipo di scorrimento descritto nella sezione precedente, se utilizzato per eseguire moltiplicazioni e divisioni, va bene solo per valori senza segno. Se si intende fare lo scorrimento di un valore con segno, occorre distinguere due casi: lo scorrimento a sinistra è valido se il risultato non cambia di segno; lo scorrimento a destra implica il mantenimento del bit che rappresenta il segno e l'aggiunta di cifre uguali a quella che rappresenta il segno stesso.

Figura 734.4. Scorrimento aritmetico a sinistra e a destra, di un valore negativo.

scorrimento

734.2.1   Esercizio

Si esegua lo scorrimento aritmetico a sinistra (di una sola cifra) del valore con segno 010101012.

otto cifre con segno

Il risultato dello scorrimento è valido?

734.2.2   Esercizio

Si esegua lo scorrimento aritmetico a destra (di una sola cifra) del valore con segno 010101012.

otto cifre con segno

734.2.3   Esercizio

Si esegua lo scorrimento aritmetico a destra (di una sola cifra) del valore con segno 110101012.

otto cifre con segno

734.3   Moltiplicazione

La moltiplicazione si ottiene attraverso diverse fasi di scorrimento e somma di un valore, dove però il risultato richiede un numero doppio di cifre rispetto a quelle usate per il moltiplicando e il moltiplicatore. Il procedimento di moltiplicazione deve avvenire sempre con valori senza segno. Se i valori si intendono con segno, quando sono negativi occorre farne prima il complemento a due, in modo da portarli a valori positivi, quindi occorre decidere se il risultato va preso così come viene o se va invertito a sua volta con il complemento a due: se i valori moltiplicati hanno segno diverso tra loro, il risultato deve essere trasformato con il complemento a due per renderlo negativo, altrimenti il risultato è sempre positivo.

Figura 734.8. Moltiplicazione.

moltiplicazione

734.4   Divisione

La divisione si ottiene attraverso diverse fasi di scorrimento di un valore, che di volta in volta viene sottratto al dividendo, ma solo se la sottrazione è possibile effettivamente. Il procedimento di divisione deve avvenire sempre con valori senza segno. Se i valori si intendono con segno, quando sono negativi occorre farne prima il complemento a due, in modo da portarli a valori positivi, quindi occorre decidere se il risultato va preso così come viene o se va invertito a sua volta con il complemento a due: se dividendo e divisore hanno segni diversi tra loro, il risultato deve essere trasformato con il complemento a due per renderlo negativo, altrimenti il risultato è sempre positivo.

Figura 734.9. Divisione: i valori sono intesi senza segno.

Divisione

734.5   Rotazione

La rotazione è uno scorrimento dove le cifre che si perdono da una parte rientrano dall'altra. Esistono due tipi di rotazione; uno «normale» e l'altro che include nella rotazione il bit del riporto. Dal momento che la rotazione non si presta per i calcoli matematici, di solito non viene considerato il segno.

Figura 734.10. Rotazione normale.

rotazione

Figura 734.11. Rotazione con riporto.

rotazione

734.6   Operatori logici

Gli operatori logici si possono applicare anche a valori composti da più cifre binarie.

Figura 734.12. AND e OR.

and or

Figura 734.13. XOR e NOT.

xor e not

È importante osservare che l'operatore NOT esegue in pratica il complemento a uno di un valore.

Capita spesso di trovare in un sorgente scritto in un linguaggio assemblatore un'istruzione che assegna a un registro il risultato dell'operatore XOR su se stesso. Ciò si fa, evidentemente, per azzerarne il contenuto, quando, probabilmente, l'assegnamento esplicito di un valore a un registro richiede una frazione di tempo maggiore per la sua esecuzione.

Figura 734.14. XOR per azzerare i valori.

xor

734.6.1   Esercizio

Eseguire l'operazione seguente, considerando i valori privi di segno: 00100101010111112 AND 01100011110000112.

sedici cifre

734.6.2   Esercizio

Eseguire l'operazione seguente, considerando i valori privi di segno: 00100101010111112 OR 01100011110000112.

sedici cifre

734.6.3   Esercizio

Eseguire l'operazione seguente, considerando i valori privi di segno: 00100101010111112 XOR 01100011110000112.

sedici cifre

734.6.4   Esercizio

Eseguire l'operazione seguente, considerando i valori privi di segno: NOT 00100101010111112.

sedici cifre


Appunti di informatica libera 2008 --- Copyright © 2000-2008 Daniele Giacomini -- <appunti2 (ad) gmail·com>


Dovrebbe essere possibile fare riferimento a questa pagina anche con il nome scorrimenti_rotazioni_operazioni_logiche_1.htm

[successivo] [precedente] [inizio] [fine] [indice generale] [indice ridotto] [indice analitico] [home]

Valid ISO-HTML!

CSS validator!

Gjlg Metamotore e Web Directory