|
 |
Numeri
e Logica Binaria |
SCHEDA n° 09 [
7
di 20] |
 | Nell'aritmetica binaria i
numeri binari con
segno sono esteticamente uguali ai
numeri binari senza
segno; qualunque sia la dimensione del
dato,
Nibble
(4 Bit) o Byte
(8 Bit) o Word
(16 Bit), ..., la
differenza sta nel fatto che:
 | il bit più significativo è
riservato al segno, inteso
positivo (+)
se 0 e negativo
(-) se 1 |
 | i rimanenti bit sono da
interpretare in modo normale se
positivo o in complemento a 2,
se negativo |
|
 | Il meccanismo del
complemento a 2 (o sottrazione da zero)
è molto semplice:
 | si complementa l'operando, bit dopo bit. |
 | si somma 1 al risultato |
|
01H = 000 0001
----------------
CPL 111 1110 +
1 =
---------
7FH
= 111 1111
|
02H = 000 0010
-----------------
CPL 111 1101 +
1 =
---------
7EH
= 111 1110 |
....... |
7FH
= 111 1111
-----------------
CPL 000 0000 +
1 =
---------
01H
= 000 0001 |
 | Per inciso il processore 80x86 dispone dell'istruzione
NEG
ha il compito di calcolare il
complemento a 2 del suo operando. |
 | Osserviamo il valore dei numeri binari a 8 bit
(Byte)
e la loro equivalenza decimale senza
e con
segno: |
|
Dato a 8 Bit |
Senza Segno |
Con Segno |
|
Binario |
Esad |
Decimale |
Segno |
Valore |
Comp.a 2 |
Decim |
|
00000000 |
00H |
0 |
0 |
000 0000 |
|
+
0 |
|
00000001 |
01H |
1 |
0 |
000 0001 |
|
+
1 |
|
00000010 |
02H |
2 |
0 |
000 0010 |
|
+
2 |
|
........ |
... |
. |
........ |
........ |
........ |
. |
|
01111101 |
7DH |
125 |
0 |
111 1101 |
|
+
125 |
|
01111110 |
7EH |
126 |
0 |
111 1110 |
|
+
126 |
|
01111111 |
7FH |
127 |
0 |
111 1111 |
|
+
127 |
|
10000000 |
80H |
128 |
1 |
000 0000 |
|
-
128 |
|
10000001 |
81H |
129 |
1 |
000 0001 |
111 1111 |
-
127 |
|
10000010 |
82H |
130 |
1 |
000 0010 |
111 1110 |
-
126 |
|
........ |
... |
. |
........ |
........ |
........ |
. |
|
11111101 |
FDH |
253 |
1 |
111 1101 |
000 0011 |
-
3 |
|
11111110 |
FEH |
254 |
1 |
111 1110 |
000 0010 |
-
2 |
|
11111111 |
FFH |
255 |
1 |
111 1111 |
000 0001 |
-
1 |
 | Da notare che il numero
binario
80H
non può
essere rappresentato con un numero a 8 bit
con segno; se tentiamo di applicare la regola
del complemento a 2 la sua parte eccedente
il segno,
000 0000,
complementata diventa 111
1111 e, dopo aver aggiunto
1,
diventa di nuovo
000 0000
! |
 | Del resto,
se l'operando è il massimo valore negativo (per esempio - 128=80H
o - 32768=8000H), anche
l'istruzione
NEG non ha effetto e lascia la flag O (Overflow)
a 1. |
 | Dunque i numeri binari a 8 bit
(Byte)
con segno:
 | da
00H (00000000)
a 7FH (01111111)
sono positivi, e vanno da
0 a +
127 |
 | da
80H (10000000)
a FFH (11111111)
sono negativi e vanno da
- 128 a
- 1 |
|
 | I numeri binari a
16 bit
(Word)
con segno:
 | da
0000H (0000000000000000)
a 7FFFH (0111111111111111)
sono positivi, e vanno da
0 a +
32767 |
 | da
8000H (1000000000000000)
a FFFFH (1111111111111111)
sono negativi e vanno da
-
32768 a -
1 |
|
 | I numeri binari a
32 bit
(DoubleWord)
con segno:
 | da
00000000H
a 7FFFFFFFH sono positivi, e vanno da
0 a +
2147483647 |
 | da
80000000H
a FFFFFFFFH sono negativi e vanno da
- 2147483648
a - 1 |
|
 | Un curioso problema può
nascere quando desideriamo cambiare formato
ad un numero binario
con
segno; per raddoppiare la sua dimensione
è necessario aggiungere una quantità di bit pari alla sua attuale dimensione,
tutti uguali al bit di segno; per esempio:
 | per
convertire un
Byte con segno (8 bit) in una
Word con segno (16 bit), se il bit7 del
Byte è a 1
(negativo)
antepone un byte uguale a FFH; se invece è a
0 (positivo)
antepone un byte uguale a 00H |
 | per
convertire una
Word con segno (16 bit) in una
DoubleWord con segno (32 bit), se il bit15 del
Byte è a 1
(negativo)
antepone una word uguale a FFFFH; se
invece è a 0 (positivo)
antepone una word uguale a 0000H |
|
 | Il processore 80x86 dispone di alcune specifiche istruzioni
adatte a
convertire
il formato dei
numeri
con segno:
 |
CBW per
convertire
un
Byte (8 bit) in una
Word (16 bit) |
 |
CWD e
CWDE
per
convertire
una
Word (16 bit) in una
DoubleWord
(32 bit) |
 |
CDQ per
convertire
una
DoubleWord (32 bit) in una
QuadWord (64 bit) |
|
 | Specificatamente per operazioni
aritmetiche con
segno il processore 80x86 prevede anche le
istruzioni:
 |
IMUL,
moltiplicazione tra numeri Interi con segno |
 |
IDIV,
divisione tra numeri Interi con segno |
|
©
2001-2010 - Studio Tecnico
ing. Giorgio OBER
Tutti i diritti sono riservati
|