Vous êtes sur la page 1sur 3

***********************************************************************

* Correction TD INFO2
*************************************************************************
* TD1
*************************************************************************

*******************************************
1.1 Rappels les bases de numération

Convertir en base 2,8,10 (1994)16


(1994)16=(6548)10=16**3+9*16**2+9*16**1+4*16**0
(1994)16=(14624)8
(1994)16=(001100110010100)2

Notations hexa = En préfixe $ ou 0x ou en suffixe h


Notations binaire = En préfixe % ou 0b ou en suffixe b
Notations octal = En préfixe o ou en suffixe o

$45A + (6607)8 =
1114 + 3463 = 4577=(11e1)16=(10741)8
(2132)8 + (6607)8 = (10741)8
$45A + $d87 =(11e1)16

*******************************************
1.2 Format entier non signé

Pour n=8bits
Plage X entre 0 et 2**8-1
DX=1 ou DX=+/-0.5lsb

X=94=$5e=5*16+14=%01010100
Incertitude relative et absolue

*******************************************
1.3 Format entier signé (bit de signe)

Pour n=8bits
Plage X entre -2**7-1 et 2**7-1
DX=1 ou DX=+/-0.5lsb

X=94=$5e=5*16+14=%01010100
"X"=-94=$5e=5*16+14=%11010100=$5e | $80

*******************************************
1.4 Format entier signé (c'2)

Pour n=8bits
Plage X entre -2**7 et 2**7-1
DX=1 ou DX=+/-0.5lsb

X=94=$5e=5*16+14=%01010100
1ere méthode
X=-94=-128+x x=34 à coder dans le champ positif
Donc "X"=%10100010
X=-94
"X"=256-"-X"=256-94=162=0xa2=%10100010

Extension de signe "X" sur 32 bits c'2


"94"=0x5e
"94"=0x0005e
Extension de signe "X" sur 32 bits c'2
"-94"=0x100-0x5e=0a2
"94"=0xffa2

*******************************************
1.5 Arrondi-Troncature - extension de signe

floor calcule l'arrondi à l' entier inférieur


ceil calcul l'arrondi à l'entier supérieur
round calcule l'arrondi à l'entier le plus proche

FLOOR
X=39=0x27
X/4=9.75
floor(X/4)=floor(%00100111>>2)
floor(X/4)=%001001.11=floor(9.75)=9
Erreur absolue DX=0.75 lsb - Relative DX/X=0.75/9=08%

ROUND
X=39=0x27
X/4=9.75
round(X/4)=floor((%00100111+%00000010)>>2) - %00000010 est le poids correspondant
au 1/2 lsb du résultat final
round(X/4)=floor(%001010.01)=floor(10.25)=10
Erreur absolue DX=0.25 lsb - Relative DX/X=0.25/9=03%

FLOOR
X=-39=-0x27<->255-39=0x100-0x27=0xd8
X/4=-9.75
floor(X/4)=floor((%11010101)>>2)
floor(X/4)=floor(%"xx"110101.01)=floor(-10.25)=-10
$100-$f6=-10
Erreur absolue DX=0.25 - Relative DX/X=0.25/9=03%

xx vaut 00 pour opération non signé


xx vaut ss pour c'2 s=-2**7 bits signé

ROUND
X=-39=-0x27<->255-39=0x100-0x27=0xd8
X/4=-9.75
round(X/4)=floor((%11010100+%00000010)>>2)
round(X/4)=floor(%xx110101.10)=floor(-10.50)=-10
Erreur absolue DX=0.25 - Relative DX/X=0.25/9=03%

xx vaut 00 pour opération non signé


xx vaut ss pour c'2 s=-2**7 bits signé

*******************************************
Extension de signes

X=39=0x27 sur 8 bits en C'2

Justification à gauche
X16g=0x2700=39*256=9984
Correction : division par 2**8 signée donnant x16=x16g/256=0xss27
ss vaut 00 pour opération non signée
ss vaut 00 pour X=>0ou 11 pour X<0
Justification à droite
X16d=0xss27=$27
Correction : extension de signe (copie de format signé à signé)
x16=concatenation(ss,x16d)
ss vaut 00 pour opération non signée
ss vaut 00 pour X=>0 ou 11 pour X<0

*******************************************
1.6 Multiplication - extension de signe

X=+39=0x27
2*X=78=0x4e
X=39 -> "+39"=0b 0010 0111
2*X=78 -> "+78"=0b 0100 1110 injection d'un zero sur le lsb pour décaler à gauche

X=-39 -> "-39"=0x100-0x27=0xd9


X=-78 -> "-78"=0x100-2*0x27=0xb2
On obtient aussi le résultat en décalant les bits vers la gauche d'une case.
attention overflow si le bit 7 passe à 1 dans le décalage. Le bit de signe est
réinjecté à sa place.

X=-39 -> "-39"=0b 1101 1001


2*X=-78 -> "-78"=0b 1011 0010
On obtient aussi le résultat en décalant les bits vers la gauche d'une case. Le bit
de signe est réinjecté à sa place.

En assembleur
lsl=asl décalages logique et arithmétique vers la gauche (identiques) *2
lsr, asr décalages logique et arrithmétique vers la droite /2

Vous aimerez peut-être aussi