You are on page 1of 5

Addition et soustraction de deux octets

Rappelons qu'un octet est un code de 8 bits. On peut avec 8 bits reprsenter 28 soit 256 combinaisons diffrentes. Ces combinaisons varient 0000 0000 1111 1111 si on les crit en binaire ou de 00 FF si on les crit en hexadcimal. La signification de ces codes ne concerne absolument pas l'ordinateur. La machine est conue pour traiter des informations ou plus exactement laspect formel de cette information et non pas linformation en tant que telle, sa signification, son contenu smantique. Contrairement nous humains et une vision simpliste que nous pourrions avoir de linformatique, la machine est incapable de saisir le sens de linformation traite. Elle traite des codes sans avoir aucune ide des valeurs que reprsentent ces codes. Le traitement automatique de linformation (de son codage) na dintrt que si les codes produits par ce traitement ont bien leur tour des significations correctes. La question essentielle est donc de savoir quelles informations peuvent valablement tre reprsentes par un codage dtermin. Prenons lexemple dun octet. Quelles sont les valeurs que peuvent reprsenter les diverses combinaisons possibles avec 8 bits ? La rponse dpend de la convention adopte par celui qui utilise ces codes : Si pour nous, ces codes reprsentent des nombres non-signs, les 256 valeurs qui peuvent tre reprsentes par un octet vont de 0 256 ( 0016 FF16) Si par contre, nous considrons ces codes comme reprsentant des nombres signs, les 256 valeurs possibles vont de -128 +127 (8016 7F16)

Les oprations arithmtiques faites partir de ces codes donnent des rsultats corrects pour autant que les codes produits ne sortent pas des limites qui dpendent du codage choisi : la taille du nombre 8, 16, 32 ou 64 bits et le fait que ces nombres soient considrs comme signs ou non. En dehors de ces limites les codes produits ne correspondent plus des valeurs correctes. Exemple : Imaginons le calcul donn ici en hexadcimal : C0 + 2C En binaire, cela scrirait 1100 0000 + 0010 1100 Le rsultat sera EC en base 16 ou ce qui revient au mme 1110 1100 en binaire Voyons maintenant si les codes produits correspondent des rponses valables. 1 Si ces codes reprsentent des nombres non signs : Leurs valeurs sont donc comprises entre 0 et 255 C016 ou 1100 00002 reprsente la valeur 192 crite ici en dcimal 2C16 ou 0010 11002 reprsente la valeur 44 en dcimal Le rsultat EC16 reprsente 236 cela correspond bien la valeur 192 + 44 Le rsultat est correct car nous sommes rests dans les limites des nombres non signs. Nous ne sommes pas passs sous la valeur zro. Il est dailleurs impossible dcrire des nombres ngatifs avec des nombres non signs ! Nous navons pas non plus dpass la valeur maximum de 255. Luc De Mey
http://www.courstechinfo.be/MathInfo/AddSubByte.html

2 Si ces codes reprsentent des nombres signs : Leurs valeurs sont donc comprises entre -128 et + 127 C016 ou 1100 00002 reprsente la valeur ngative -64 2C16 ou 0010 11002 reprsente la valeur positive +44 Le rsultat ED16 reprsente -20 cela correspond bien la valeur de (-64) + (+44) Le rsultat est correct car nous sommes rests dans les limites des nombres non signs Nous ne sommes pas passs sous la valeur de -128 Nous navons pas non plus dpass la valeur maximum de + 127 Voyons comment de tels calculs peuvent tre raliss de manire automatique par un dispositif qui pourtant ignore la signification c'est--dire la valeur des codes quil traite. Le dispositif en question sera une calculatrice hexadcimale ralise en papier. Elle est constitue de deux disques concentriques dessins dans les pages annexes. Ces disques sont gradus avec les 256 codes allant de 00 FF. Le disque intrieur sera dcoup et fix avec une punaise au centre du disque extrieur.

Lopration prcdente C0 + 2C peut maintenant tre ralise en faisant pivoter le disque intrieur de sorte placer lorigine de son origine la graduation (00) en face de linscription C0 sur le disque extrieur. Cherchons maintenant la valeur 2D additionner sur le disque intrieur. La somme EC lui fait face sur le disque externe.

C0 + 2C = EC

Luc De Mey

http://www.courstechinfo.be/MathInfo/AddSubByte.html

Ce calcul C0 + 2C = EC donne un rsultat correct quelle que soit la convention utilise (nombres non-signs ou au contraire signs) car ni dans un cas ni dans lautre nous navons franchi les valeurs limites que peuvent reprsenter ces codes de 8 bits Nombres non signs : 192 + 44 = 236 et 236 [0 ; 255] Nombres signs : - 64 + 44 = 20 et 20 [ -128 ; +127 ] Il nen sera pas de mme si lon dpasse lune des limites lies la convention utilise (nombres signs ou non signs) Ainsi si on voulait reprsenter deux nombres 120 et 40 par un code sign dun seul octet . Ces deux nombres peuvent sans problmes tre reprsents par un octet sign puisquils sont et +40 = 2816 compris entre les valeurs limites -128 et + 127. +120 = 7816 Par contre, leur somme 120 + 40 vaudra 160 ce qui est une valeur suprieure +127 La valeur 160 ne peut donc pas tre reprsente de manire valable par un code sign dun seul octet ! Ce dpassement sera signale par un flag particulier du processeur : lOverflow Le flag Overflow indique que la capacit des nombres signs a t dpasse par ce calcul. On aurait donc du utiliser des nombres dau moins 2 octets pour faire des calculs valides avec de telles valeurs. 007816 + 002816 = 00A016 = 16010 Imaginons maintenant que lon veuille additionner 250 + 16 avec des nombres non signs dun seul octet. Bien que, comme dans le cas prcdent, les deux nombres de dpart peuvent sans problme tre reprsents par un seul octet ( 250 = FA16) et (16 = 1016) ; le rsultat que donnerait notre calculatrice en papier ou nimporte quel microprocesseur sera 0A16 = 10 en dcimal. Pourtant 250 + 16 10 ! Lerreur est due au fait que le rsultat quon aurait d obtenir 266 dpasse la valeur limite (256) possible avec un nombre non sign dun seul octet. Les microprocesseurs indiqueront le dpassement de cette limite par un flag de Carry (report) Le flag de Carry indique que le calcul donne un rsultat dont la valeur dpasse la capacit des nombres non signs. Il aurait fallu au moins 2 octets pour coder ces nombres : 00FA + 0010 = 010A

Les deux dernire pages de ce document permettent de construire la calculatrice en papier qui donnent les comme les CPU de nos ordinateurs permettent de calculer la somme ou la diffrence de 2 octets.

Luc De Mey

http://www.courstechinfo.be/MathInfo/AddSubByte.html

Luc De Mey

http://www.courstechinfo.be/MathInfo/AddSubByte.html

Luc De Mey

http://www.courstechinfo.be/MathInfo/AddSubByte.html

You might also like