• Bases de nombres

    Ce texte a été scanné et « OCRisé » des pages 64-82 de mon volume HISTORIQUE DU HARDWARE publié  6 août 1994 (100 pages A4). Il est encore en cours de correction des erreurs d'océrisation. Certaines erreurs peuvent bien sûr échapper à notre vigilance. Les pressés peuvent déjà le consulter ou le lire dans le volume cité ci-haut. Le scannage a été effectué avec le scanner BenQ, et le OCR avec le logiciel ABBYY FineReader. Pour toute question, cliquez ici.

    Mais avant de commencer, une question saugrenue de ma part : Fait-il chaud au centre (noyau) du soleil ? Pourquoi ?


    Manipulation de nombres dans les différentes bases de numération = Handling of numbers in different numeration bases. Extrait de "la 1ère édition (6 août 1994) révue, corrigée et enrichie de L'HISTORIQUE DU HARDWARE (pp. 64-82) de la série À la Découverte de l'Assembleur, par Diasoluka Nz. Luyalu"


    Par ailleurs, aucun moteur de recherche n'est susceptible de retrouver juste le site dont on peut vraiment avoir besoin. C'est ça qui fait la force des annuaires < catégorisés >. Bien entendu, un site est un très bon moyen pour obtenir les coordonnées nécessaires à une correspondance. Le lien au LinkWare (annuaire catégorisé) en "libre Donnation" (Donationware) facilite à retrouver et/ou accéder à presque tous les sites utiles.
    <script language=JavaScript>
    diasliens()
    </script>


    CHAPITRE VII


     ANNEXE B : LES NOMBRES


     


    AVANT PROPOS SUR LES NOMBRES







    On ne saurait dater l'origine du concept de nombre. Mais on peut bien se figurer qu il ait commencé dès le début de l'humanité.


    Assemblons le code suivant dans MS-DEBUG :


    -a 100


    3408:0100 rnov ax, 0


    3408:0103 sub ax, F


    34D8:0106 not ax


    3408:0108 add ax, 1


    34D8:010B int 20








    Voyons l'état initial des registres avant de commencer l'exécution de ce code, avec la commande <r></r><cr></cr><R><CR>.


    -r


    Ax=000F BX=0000 CX=0000 DX=0000 SP=FFE8 BP=0000 SI=0000 DI=0000


    DS=34D8 ES=34D8 SS=34D8 CS=032B IP=0100    NV DP DI PL NZ NA PE NC


                          MOV    AX,0000


     







    -t 4


    AX=0000 BX=0000 CX=0000 DX=0000 SP=FFE8 BP=0000 SI=0000 DI=0000


    DS=34D8 ES=34D8 SS=34D8 CS=032F IP=0103  NV UP DI PL NZ NA PE NC


    0326:0103 2D0F00      SUB    Ax,000F


    Le registre AX contenant la valeur zéro, l'exécution de l'instruction ci-dessus doit normalement nous donner le nombre "moins 15" en hexadécimal, comme le montre l'affichage du DEBUG ci-dessous.








    Dans les nombres signés, FFF1 représente le nombre "moins 15" :


       1111 1111 1111 0001    =    FFF1



       0000 0000 0000 1110    ; inversion de tous les nombres bits.



     + 0000 0000 0000 0001    ; on ajoute 1.


       0000 0000 0000 1111    ;



                         CUMUL


          2^0   =   1      1


          2^1   =   2      3


          2^2   =   4      7


       +  2^3   =   8     15


       ==============


                   15








    Pourtant, l'inverse bitwise (bit à bit) de ce nombre ne donnera pas 15 mais 14 comme nous le montre l'exécution de l'instruction ci-dessus dont le résultat se trouve dans l'affichage ci-dessous.


    AX=FFF1 BX=0000 CX=0000 DX=0000 SP=FFE8 BP=0000 SI=0000 DI=0000


    DS=34DB ES=34D8 SS=34D8 CS=032B IP=0106  NV UP DI NG NZ AC PO CY


    032B:0106  F7D0       NOT    AX



    AX=000E BX=0000 CX=0000 DX=0000 SP=FFE8 BP=0000 SI=0000 DI=0000


    DS=34D8 ES=34D8 SS=34D8 CS=032B IP=0108  NV UP DI NG NZ AC <?XML:NAMESPACE PREFIX = ST1 /><ST1:PLACE>PO</ST1:PLACE> CY


    032B:0108  050100     ADD    AX, 0001








    Nous devons ajuster le résultat ci-dessus en ajoutant « 1 » pour obtenir le résultat escompté, comme le montre l'affichage ci-contre issu de l'instruction ci-dessus. En ajoutant « 1 » à ce nombre nous devons donc retrouver le nombre 15d ou FH.


    AX=000F BX=0000 CX=0000 DX=0000 SP=FFE8  BP=0000 SI=0000 DI=0000


    DS=34D8 ES=34D8 SS=34D8 CS=032B IP=010B   NV UP DI PL NZ NA PE NC


    032B:010B CD20        INT    20








    C'est la méthode du complément à deux d'un nombre pour obtenir l'inverse arithmétique d'un nombre. Calculons donc l'inverse de 1 :


    -a 100


    032B:0100 mov ax, 0


    032B:0103 dec ax


    032B:0104 int 20


    032B:0106


    -r


    AX=000F BX=0000 CX=0000 DX=0000 SP=FFE2 BP=0000 SI=0000 DI=0000


    DS=34D8 ES=34D8 SS=34D8 CS=032B IP=0100 NV UP DI PL NZ NA PE NC


    032B:0100 B80000    MOV AX, 0000


    -t 2


    AX=000F BX=0000 CX=0000 DX=0000 SP=FFE2 BP=0000 SI=0000 DI=0000


    DS=34D8 ES=34D8 SS=34D8 CS=032B IP=0103 NV UP DI PL NZ NA PE NC


    032B:0103 48        DEC   AX



    AX=FFFF BX=0000 CX=0000 DX=0000 SP=FFE2 BP=0000 SI=0000 DI=0000


    DS=34D8 ES=34D8 SS=34D8 CS=032B IP=0104 NV UP DI NG NZ AC PE NC


    032B:0100 B80000


     


    Nous voyons que l'inverse de 1 est FFFF H (1111 1111 1111 1111 B) pour un registre à 16-BIT, ou FFFF FFFF H (1111 1111 1111 1111 1111 1111 1111 1111 B) pour un registre à 32-BIT. Trouvez vous-même pour un registre à 64-bit.








    Pour obtenir facilement l'inverse d'un nombre on peut se servir de l'instruction NEG :


    -a 100


    032B:0100 mov ax, F


    032B:0103 neg ax


    032B:0105 int 20


    032B:0107


    -r


    AX=FFFF BX=0000 CX=0000 DX=0000 SP=FFE2 BP=0000 SI=0000 DI=0000


    DS=34D8 ES=34D8 SS=34D8 CS=032B IP=0100 NV UP DI NG NZ AC PE NC


    032B:0100 B80000      MOV AX, 000F


    -t 2


    AX=000F BX=0000 CX=0000 DX=0000 SP=FFE2 BP=0000 SI=0000 DI=0000


    DS=34D8 ES=34D8 SS=34D8 CS=032B IP=0103 NV UP DI NG NZ AC PE NC


    032B:0103 F7D8        NEG   AX



    AX=FFF1 BX=0000 CX=0000 DX=0000 SP=FFE2 BP=0000 SI=0000 DI=0000


    DS=34D8 ES=34D8 SS=34D8 CS=032B IP=0105 NV UP DI NG NZ AC PO CY


    032B:0105 CD20        INT    20


     


    Nous avons retrouvé le résultat précédent.


    Trouvez ci-dessous quelques conversions de nombres d'une base à une autre. Voyez aussi au chapitre VIII.I en page 83, un programme <DEC13.ASM) un deux autre une en base d?une nombres des convertir pour 73 MOV ie t. F. MWEfff VTFS BASESmners calculator ?- ? MEX 17un15 B[S1 B NON SIGNÉ DIFFÉRENTES TAILLES DE 8-Bit FE 376 11111110 254 16-Bit 177776 1111111111111110 65534 ! Décimal FFFE 32-Bit 81NARÏ FFFFFFFE 37777777776 111111111111111-11111111111111110 4294967294 c WS GRAND NOMBRE L£ &BTr élevé quadruptet non-signe 4-bit (quartet ?nybble?) positif éievé 8-bit (octet ?byte?) B1NARY 7 111 [BEL] BINARï 17 1111 15 (MAXINT 4-BIT) B[SI ] 7F 177 nnm 127 TOUT 65 24, 44, 57. 82PCBR-SE FAIRE ENCADREUR MACHINE AVANT-1?KOI?OS SUR I.KS NOMBRKS 2 l£ ABSOLU DANS UN REGISTRE &BTT Nombre grand 8-BIT. •;., ••? FF 377 11111111 25S (MAXiHT 8-BIT) 3 1&BTT ELEVE 4 16OT 7FFF 77777 111111111111111 DECIMAI. 32767 BINARY FFFF 177777 65535 [MAX1NT 16-B1T) s POSmF 32Bn- ÉUEVÉ LE NÉGATIF 32-BTT UE PLUS ÉLEVÉ BINARÏ 7FTFFFFF 17777777777 1111111111111111111111111111111 31i7iSS647 HEX OCTAL 3INARY DECIMAL FFFFFFFF 37777777777 4S949672Î5 (MAX NT EN 32-Blt) Voila fait entrer chapitre négatifs. » NÉGATIFS Ouvrons cette section nous posant question :??Où place ?-?dans représentation d?un te microprocesseur?. traiter aussi bien Vous devez lui spécifier utilisez. Certaines Instructions effet MUL="MULtipiy)" d?autres instructions (comme MULtiply) traitent Faites divisions suivantes, divisant lOd qui, négatif, naturellement Exécutez programme debug. IOIV EX 1NT 20 *t-100 * Met Se Onteger -PL -PO 0000 0010 Flag Positif (sup égale 0). IMPAIRE (ODD PO) valeur impaire PAIRE (EQ.UAL) paire résultat, parité PE aarJty EQUAL) flag zéro resté NZ, l?ordinateur différent zéro. • t •t AX, 10 BX, -NG -NA -NC 10h Restaure BX F001 Divise ]e signé contenu BX. considérés ( . Division) donne suit: AX quotient DX contient division; NEGATIF! PL POSITIF); positif; (Auxiliary Carry) No carry) AC auxiliaire Auxiliary Carry); littéralement n?a provoqué ?report auxiliaire?; report N0 CARRY) devient CY (Signal réport Carry Yes) ; indique résultai a bits. A LA DÉCOUVERTE DU LANGAGE C && C+ + 66 24. 44. 57, 82. 99 - TOME VII Samedi août 1994 (2h24pm) LES NOMBRES LKS NOMHRKS NKCATIl-S Quand programmez l?assembleur, multiplication division l?instruction utilisez (MUL DIV signés. IMUL="Inieger" ET IDIV signés) vous déterminez nature résultat par l?examen d?état FLAG STATUSI contenus F (ou registre signaux d?état). Comment donc est-ce rend compte 16-bits OFFB7H (65?463d) gui se trouve Registre binaire signé, PBCD (Packed compacté) UBCD (Unpacked BCD="BCD" compacté),^! négatif moins (-73)? .Le microprocesseur traite tous façon qu?ils soient non signés BCD, C?est cela qu?on ne peut grande majorité cas pas opérer directement opérandes Mémoires. Pour l?ordinateur, s?agit faire opérations arithmétiques sur signés, il considère son biî extrême gauche, hit fort poids, ?Most Significant MSB? (le 7è 8 5è 1 6 31 è opération 32 bits, etc. les bits étant numérotés droite partir 0); Ce appelé signe: dernier l?extrême l, négatif; quand ce 0, nombre est considéré comme positif. plus à gauche reste bit signe m, dans tes BCD. 1. Le rappelle autres notions, celles de Parité et du Make Break Cods, qui occupent la même position que le Bit ou Signe : \Q i>(DECI3.ASM) qui convertit des nombres d‘une base vers une autre.


    LE NOMBRE HEXA « F » DANS DIFFÉRENTES BASES


       HEXA : F


      OCTAL : 17


     BINARY : 1111


    DECIMAL : 15



    LE NOMBRE HEXA « FE » NON SIGNÉ DANS DIFFÉRENTES TAILLES DE REGISTRE


    En général, il ne faut pas confondre valeur « non signée » (qui traite le bit du signe comme digit) et valeur absolue (positivation d'une valeur signée). Un nombre positif signé a le digit zéro comme bit du signe, tandis que le bit du signe n'est pas nécessairement zéro pour un nombre pris en valeur absolue : il reste zéro dans les nombres déjà positifs, et reste zéro dans les nombres négatifs pris en valeur absolus.


    Il ne faut pas non plus confondre « plus grand nombre négatif en valeur absolue » et « plus grand nombre négatif en valeur relative », ou l'un de ses deux derniers traités en « non signé ».








    L'Hexa FE en non signé 8-bit dans différentes bases :


       HEXA : FE


      OCTAL : 376


     BINARY : 1111'1110


    DECIMAL : 254



    L'Hexa FFFE en non signé 16-bit dans différentes bases :


       HEXA : FFFE


      OCTAL : 177776


     BINARY : 1111'1111'1111'1110


    DECIMAL : 65534



    L'Hexa FFFF'FFFE en non signé 32-bit dans différentes bases :


       HEXA : FFFF'FFFE


      OCTAL : 37777777776


     BINARY : 1111'1111'1111'1111'1111'1111'1111'1110


    DECIMAL : 4'294'967'294




    LE PLUS GRAND NOMBRE ENTIER DANS UN REGISTRE


    1. LE PLUS GRAND POSITIF SIGNÉ DANS UN REGISTRE 8-BIT








    Nombre positif signé le plus élevé en 4-bit (quartet ou quadruplet ou « nybble ») :


       HEXA : 7


      OCTAL : 7


     BINARY : 111


    DECIMAL : 7   •[BEL]



    Nombre négatif 4-bit  (quartet ou quadruplet ou « nybble ») le plus grand quand considéré en non-signé :


       HEXA : F


      OCTAL : 17


     BINARY : 1111


    DECIMAL : 15 (MAXINT 4-Bit) ☼ [SI ]



    Nombre positif signé le plus élevé en 8-bit (octet ou « byte ») :


       HEXA : 7F


      OCTAL : 177


     BINARY : 111'1111


    DECIMAL : 127




    2. LE NÉGATIF LE PLUS ÉLEVÉ EN VALEUR ABSOLUE DANS UN REGISTRE








    Nombre négatif le plus grand en valeur absolue 4-bit (à ne pas confondre avec non signé) :


       HEXA : 8


      OCTAL : 10


     BINARY : 1000


    DECIMAL : -8


    Nombre négatif le plus grand en valeur absolue 8-bit (à ne pas confondre avec non signé) :


       HEXA : 80


      OCTAL : 200


     BINARY : 1000'0000


    DECIMAL : -128



    2. LE NÉGATIF SIGNÉ LE PLUS ÉLEVÉ EN VALEUR RELATIVE DANS UN REGISTRE


    En binaire et donc en informatique, l'entier signé négatif le plus grand en valeur relative et stockable dans un registre c'est toujours le nombre entier « -1 » qui représente aussi l'entier positif non signé le plus grand qu'on peut stocker dans ce même registre (MAXINT).








    Nombre entier négatif signé algébriquement (en valeur absolue) le plus grand en 4-bit (à ne pas confondre avec simplement signé) :



       HEXA : F


      OCTAL : 17


     BINARY : 1111


    DECIMAL : -1


    Nombre entier négatif signé algébriquement (en valeur absolue) le plus grand en 8-bit (à ne pas confondre avec simplement signé) :


       HEXA : FF


      OCTAL : 377


     BINARY : 1111'1111


    DECIMAL : -1




    LE POSITIF (donc signé) LE PLUS ÉLVÉ EN 16-Bits








    3. LE POSITIF (donc signé) 16-BIT LE PLUS ÉLEVÉ


       HEXA : 7FFF


      OCTAL : 77777


     BINARY : 111'1111'1111'1111


    DECIMAL : 32767


    4. Valeur en non signé du négatif  16-bit le plus grand en valeur relative


       HEXA : FFFF


      OCTAL : 177777


     BINARY : 1111'1111'1111'1111


    DECIMAL : 65535 (MAXINT 16-Bit)



    LE POSITIF (donc signé) LE PLUS ÉLVÉ EN 32-Bits








    5. LE POSITIF (donc signé) 32-BIT LE PLUS ÉLEVÉ


       HEXA : 7FFF'FFFF


      OCTAL : 17777777777


     BINARY : 111'1111'1111'1111'1111'1111'1111'1111


    DECIMAL : 2'147'483'647


    6. Valeur en non signé du négatif  32-bit le plus grand en valeur relative


       HEXA : FFFF'FFFF


      OCTAL : 37777777777


     BINARY : 1111'1111'1111'1111'1111'1111'1111'1111


    DECIMAL : 4294967295 (MAXINT 32-Bit)



    Voila ce qui nous fait entrer dans le chapitre des nombres négatifs.


    LES NOMBRES NÉGATIFS


    Ouvrons cette section avec la question : « Où se place le signe ‘-‘ dans le stockage d'un nombre négatif dans le registre du microprocesseur ou du coprocesseur ? »


    Le microprocesseur peut traiter le même nombres aussi bien comme signé que comme non signé : vous devez vous-même le lui spécifier par l'instruction que vous utilisez, en d'autres termes en utilisant l'instruction appropriée et la façon dont vous interprétez les signaux d'état (flags). Certaines instructions en effet (comme le MUL =   MULTIPLY) traitent les nombres comme non signés, d'autres comme le IMUL (= Integer MULTIPLY) les traitent comme signés.


    Faites les divisions suivantes, DIV et IDIV divisant le nombre 10 Hexa contenu dans le registre AX par un nombre signé négatif  cfr F001 qui, considéré comme signé est négatif, et comme non signé il est naturellement positif.



    Quand donc on programme en Assembleur, on détermine la nature de la multiplication ou de la division (signée ou non signée) par l'instruction utilisée (MUL et DIV pour les nombres signés) et on détermine la nature des résultats par l'examen des signaux d'état (ou FLAG STATUS) contenus dans le registre F (ou registre des signaux d'état). 


    Comment donc est-ce que le microprocesseur se rend-t-il compte que le nombre à 16-bits 0FFB7H (65'463d) qui se trouve dans son Registre est un nombre signé, un nombre binaire non signé, un PBCD (Packed BCD = BCD compacté) ou un UBCD (Unpacked BCD = BCD non compacté ou étendu), et non pas le nombre négatif -73 (moins 73) ? Le microprocesseur traite tous les nombres de la même façon qu'ils soient signés, non signés ou BCD ou autre. C'est pour cela qu'on ne peut dans la grande majorité de cas pas opérer directement sur deux opérandes Mémoires.


    Pour l'ordinateur, quand il s'agit de faire des opérations arithmétiques sur des nombres signés, il considère son bit le plus extrême à gauche, le bit du poids fort ou Most Significant Bit = MSB (le 7è pour une opération de 8 bits, le 17è pour une opération de 16 bits, le 31è pour une opération de 32 bits, le 63è pour une opération de 34 bits etc, les bits étant numérotés de la droite vers la gauche en commençant par 0) ; ce bit est appelé « bit du signe » ; quand ce dernier bit à l'extrême gauche vaut 1, le nombre est considéré comme négatif en signé, quand il vaut 0 le nombre signé est positif.


    Remarque : Le bit le plus à gauche reste le bit du signe même dans les BCD.


    Quand le processeur doit faire des opérations arithmétiques non signées, il considère automatiquement les nombres comme non signés. Les flags ou signaux d'état CArry, AUXilliary, et OVerflow fournissent l'information nécessaire au programme pour déterminer la valeur exacte dans le système utilisé :


    L Le flag d'OVerflow indique que le résultat dépasse la rangée (ou domaine) du système de numération signée.


    L Le flag des CArry indique qu'un report (carry) hors du plus haut bit a eu lieu.


    L Le flag d'AUXilliary Carry (AUX) permet au processeur de faire de l'arithmétique sur les BCD, on ne peut pas l'utiliser directement car on ne peut même pas le tester.







    Le Bit du Signe rappelle deux autres notions, celles du Bit de Parité et du Make/Break Code, qui occupent la même position que le Bit du signe : le bit le plus à gauche ou du poids [le plus] fort.


    Le Bit de Parité sert, dans les télécommunications dans certains programmes d'application, à vérifier qu'un code (caractère) est intact. Le principe est de se convenir que chaque code ou caractère doit avoir un nombre paire ou Impaire de bit de valeur 1. C'est justement ça la PARITÉ. Si le code ou caractère a, sur les 7 bits de droite, un nombre paire de bit de valeur 1, le 7ème bit (en fait le huitième) prendra la valeur 0. Si le code ou caractère a, sur les 7 bits de droite, un nombre impaire de bit de valeur 1, le 7ème bit (en fait le huitième si vous compter à partir de 1 de la droite vers la gauche) prendra la valeur 1 pour que le nombre total de bit à valeur 1 soit paire. Ainsi, si chaque fois qu'un test de parité sera effectué, si pour un code ou caractère on trouve un nombre impaire de bit de valeur 1, on sait qu'il y a eu ERREUR DE STOCKAGE ou DE TRANSMISSION. La lettre 'A' et la lettre 'B' par exemple ont le code ASCII respectivement 65 et 66, et contiennent un nombre paire de bit de valeur 1 (01000001 et 010000101, tandis que la lettre 'C' d'ASCII 67 contient un nombre impaire de bit de valeur 1 (0100 00111. Si on veut encoder A, B et C en tenant compte du bit de parité, on écrira A = 01000001b, B = 01000010b, C = 11000011b, alors qu'en faisant abstraction du bit de parité 1100 0011b (pour C en parité) signifierait 195d équivalent au caractère . Faites donc attention quand vous configurez des logiciels de traitement de texte dans lequel on vous demande de spécifier vous-même s'il faut travailler en encodage 7 ou 8 bits, ou S'il faut tenir compte du bit de parité ou pas.


    Le Make/Break Code est, dans les PCs, le BIT 7 (à partir de 0 à droite) du Scan Code. Le Make/Break Code détermine si une touche a été frappée (MAKE CODE, BIT 7 = 1) ou si elle a été relâchée (BREAK CODE, BIT 7 = 0). Voir à ce sujet le TOME V de la série À La Decouverte du Langage Assembleur : TOUT SUR LES UNITES DE SAISIE.


    Mais. .!. faites gaffe .!. : Les débogueurs (ou plutôt le processeur) ne tiennent pas compte du BIT-7 pour statuer sur la parité d'un résultat, ils comptent eux-mêmes dans le résultat le nombre de bits qui ont la valeur « 1 ».




    Suite "DésOCRisation" en cours...


    C:\COMP\OATA>debug -a 100 279D 0100 mov ah 7ï £790 0102 add ah 0 -2790 0105 add ah 1 27ÎG 0108 mov ah f3 2790 010A add ah 0 2790 0100 add ah 1 • 2790 0110 'nt 20 2790 OU? 073 H = Oonne toujours Donne 074 H = OF3H = Donne toujours Donne OF4H = 0111 0011 b. 0111 0011 b. OUI 0100 b. 1111 0011 b. 1111 0011 b. 1111 0100 b. Pour sauvegarder ce fichier, nous devons lui donner un norn avec la commande 'N'. -M pariiy.scr Nous devons aussi spécifier (stocker) sa taille licf 12H = 112H - 100H, que l'on peut obtenir avec la commande Hexamhmétique 'H' qui donne la somme et la différence des deux nombres nexadécimaux que vous lui présentez) dans le couple BX;CX, -H 112 100 0212 0012 Voici avec la coiïmande 'R' les valeurs initialas que nous avons dans les registres BX et CX: AX=0000 BX^QQOO CX=QOOO DX=0000 SP=FFEE BP=0000 S 1=0000 DI^OOOO DS-279D ES=2790 35=2790 CS=279D IP=0100 NV UP El PL N2 HA PO NC 2790:0100 B473 . MOV AH,73 Modifions maintenant avec la commande R REG les valeurs de BX et de CX, Comme BX contient dé|â 2éro, nous n'aurons qu'à ualidfif (avec un <cr>1 la valeur qu'il contient. • -r ex CX 0000 ;12 -r bx BX 0000 suivre... TOUT SUR LES NOMBRES 67 / 24, 44, 57. 82PSBR-SE FAIRE ENCADREUR EN LANGAGE MACHINE Quand le microprocesseur doit faire des opérations arithmétiques non signées, il considère automatiquement les nombres comme non signés. Les flags ou signaux d'états CARRY, AuXILfARY, et OVERFLOW apportent l'information nécessaire au programme pour déterminer la valeur exacte dans le système utilisé: * w Le flagd'OVERFLOW indique que le résultat dépasse la rangée (ou domaine} du système de numération signée. •» Le flag des CARRY indique qu'un report (carry) hors du plus haut bit a eu lieu. •» Le flag d'AUXILIARY CARRY (AUX) permet au processeur de faire de l'arithmétique sur les BCD, on ne peut pas l'utiliser directement car on ne peut même pas le tester. 1.1...suite) Wci donc les nouvelles valeurs des registres, ainsi que les valeurs initiales des registres des signaux d'état dont le Ilag des parité (le deuxième à partir de la droite, qui est Ici initialement PO, ce qui signifie Parlty Odd, donc impaire), i -!• • AX-0000 B!<=0000 CX=0012 DX=0000 SP: FFEE D1=0000 . r>S=27f[i ES=£79D SS=379D CS=279D 1P=H100 PO NE 279D;U100 B<i73 un des 73 AH, MOV programme parité resté • AX="7300" DX="0000" contient PL - l?instruction d?état (ou donc se C?est ne pas hit 1="0000" ce nombre est à 1. Le de et qui le ou Sl-0000 Nï NA Exécutons maintenant (avec Traces ?T?}, voyons commRnt signal flag) va modifier. La première sefa exécutée celle pointée rmr pointeur d?Instructions?IP, l?adresse 100H. d?assignation ?MOVAH, 73?. a^OOOO CX-0012 SP="FFEE" BP="0000" S D1="0000" DS="27W" ES=",'7ÎD" SS="279D" CS="279D" IP="0102" NV UP El HZ MA PO NC , 279D:Û102 iiOCiOO ADD 00 Cette instruction modifie l?état fiags. fia;) vins pari!;?- ?ht |PO). Et dt: toutes le?-; façons 73H (0111 0011 bl imoaire Doni. Ir fidc] pouv.lit donnur dinî ODD IPOt. ?Continuons notre exécution avec <-T><INT)POM(?, ? nombre est de loi C:\COMP\BC\B inverse d?ur IN?nbop 3pOSs ï iî tai 00001 -00001 LL L oppose opposé oooosé 00013 00169 02197 28561 -21933 ••23855 estest -00013 -0016Î -02107 -28561 21923 23855 C:\tOMP\B[;\BIN>. „„„... ,,. , „ «• Les lettres de l'alphabet J à R ont la valeur 1101b (13d) dans la ZONE, et les digits 0001b (1d pour le J) à 1001b OdpourleR). , . w Les lettres de l'alphabet S à Z ont la valeur 1110b (14dt dans la ZONE. et les digits 0010b (2d pour te S» à 1001b (9d pour le Z). Dans le système de codage EBCDIC donc, le C est représenté par 1100 0011b, le J est rep.ésenté 1101 0001b et le Z est représenté 1110 1001b. Voici quelques équivalents EBCDIC par rapport aux autres représentations: Ordre de collation entre les deux systèmes ASCII et EBCDIC: Graph ique Binaire Hcxa ESC ;OIC ASCII î 0000 0 1111 0000 48d 0001 1 1111 0001 49d 2 0010 2 nu 0010 50d 5 0011 3 1111 0011 51d 0100 4 1111 0100 52d 5 0101 5 nn 0101 53d 6 0110 6 lin 0110 54d {' 0111 7 1111 0111 55d 1000 8 1111 1000 56d 9 1001 9 lin 1001 57d A 1000 000! 61 1100 1001 65d B • 1000 0010 42 1100 0010 66d • h • • • M mo'om 58 1110" 0111 88d ï 1110 1000 5° 1110 1000 açd Z 1110 1001 60 1110 1001 90ct ASCII bLfink • . l EBCDIC blank , (point) OÏ9 ? A-Z a-z a-i *-iE o-ç Le système de codage EBCDIC est utilisé dans la plupart des machines IBM, alors que dans les PC on utilise le système de codage ASCII. v, LES CARACTÈRES DE COISTTRÔLE DANS LE SYSTÈME ASCII Les 31 premiers caractères disponibles dans le code ASCII sont des caractères non imprimables aussi appelés codes de contrôle (car on peut les obtenir en combinant la touche >< CtrI > avec une autre touche, le plus souvent une des lettres de l'alphabet) et sorit utilisés dans les communications ou pour gérer (commanderl opérer Jes .TTi-t' imprimantes ou d'autres unités. ^' Certains de ces codes (comme le Retour-Chariot), ont un rôle fixe. Pour la plupart par contre, on leur attribue une multitude d'interprétations, au plus grand détriment de compatibilité matérielle. Le caractère d ASCII 127 est aussi considéré comme caractère de contrôle, malgréqu'il ne faut pas appuyer la touche < CtrI > pour l'obtenir. S CODE ASCII GRAPHE <ctrl>MNÉMO | . ' ,,,„,; ' .^^UTIUTÉ |:DÉC1 HEXA ; 00 00 (NULL) -@ NUL Spacing Character. Caractère d'espacement. Sans signification. peut aussi servir pour des délais, comme le NOP. : 01 01 © "A SOH Stan Of Heading, Débute la transmission de blochs de données ou un nouueau fichier. :::::::;• 02- • 02. 9 72 STX Start Of Text. Marque le début du texte qui suit les données d'entêté. ; 03 '03.j, » "C ETX End Of Text. Peut marquer le début des données de détection ("check-ing") d'arreur. 04 ,04 ; • •D EOT End Of Transmission. Code "Sign-Off"; dans certains cas marque seulement la fin de fichier. 05 05 -1 * 'E ENQ ENQuiry. Sollicite informations d'état de station éloignée. 06


  • Commentaires

    Aucun commentaire pour le moment

    Suivre le flux RSS des commentaires


    Ajouter un commentaire

    Nom / Pseudo :

    E-mail (facultatif) :

    Site Web (facultatif) :

    Commentaire :