Brevet FR2788866A1 — publié le 20000728

La présente invention est relative à un procédé de décompression d'un programme d'ordinateur se présentant sous forme comprimée. Plus particulièrement, l'invention concerne un procédé de ce type par lequel la décompression est réalisée en ligne, au fur et à mesure du déroulement du programme. Dans la présente description, le terme "ordinateur" désigne tout type de processeur capable d'exécuter un programme informatique, y compris les microprocesseurs. Par ailleurs, dans l'ensemble de la description, on utilisera le mot "pointeur" pour désigner un groupe de bits "pointant" vers une instruction à exécuter. L'utilisation de pointeurs permet de ne ranger dans une mémoire que des instructions différentes, quand bien même ces instructions sont utilisées plusieurs fois par le programme. L'ensemble des instructions occupe ainsi moins de place en mémoire; c'est pourquoi on parle de programme "comprimé". La figure 1 des dessins annexés représente l'un des procédés de décompression les plus courants dans la technique. Ce procédé met en oeuvre une mémoire 1 d'une largeur de M bits qui est adressée par un compteur de programme 2 faisant partie d'un processeur 3. La mémoire 1 contient des pointeurs P d'une largeur de M bits qui servent d'adresses pour une mémoire ou table d'instructions 4 d'une largeur de N bits. Les pointeurs de M bits sont plus courts que les instructions de N bits (M processeur 3. Ce procédé permet effectivement de réduire la taille de la mémoire 4, qui ne contient que des instructions différentes, mais il a l'inconvénient de nécessiter des pointeurs de même taille M pour tous les pas de programme (ou instructions), que l'instruction soit très fréquemment ou très rarement exécutée. Or, il arrive fréquemment, que certaines instructions sont utilisées bien plus souvent que d'autres dans un programme donné. Il serait donc plus intéressant d'avoir des pointeurs courts pour les instructions très fréquentes et plus longs pour des instructions rares, afin d'améliorer les performances de la compression. Dans un autre procédé connu illustré à la figure 2, la mémoire 1 a une largeur de N+1 bits et contient à la fois des instructions "rares" Ir, d'une largeur de N bits, et des pointeurs P ayant chacun une largeur N/2 bits et disposés dans des blocs B de la mémoire. Le bit le plus significatif du mot mémoire est ici utilisé pour désigner s'il s'agit d'une instruction Ir ou d'un bloc B de pointeurs P. Les pointeurs P sont utilisés comme adresses de la table d'instructions 4 contenant les instructions "fréquentes" If dont le nombre peut être au maximum égal à la valeur maximale 2N/2 que peut prendre un pointeur P. Les sorties de la mémoire 1 et de la table 4 sont connectées à un multiplexeur 5 à travers lequel passent les instructions vers le processeur 3 en fonction de la valeur du bit le plus significatif de l'adresse appliquée à la mémoire 1. Une autre façon d'agencer les pointeurs dans la mémoire consiste à utiliser le codage de Huffman, bien connu des spécialistes. Dans ce cas, les instructions sont rangées selon la hiérarchie de leur fréquence d'apparition dans le programme à exécuter. Par exemple, comme représenté sur la figure 3, on utilise un pointeur de 5 bits codé par un code opératoire de un bit égal à 1 pour les 16 instructions les plus fréquentes, un pointeur de 7 bits avec deux bits (01) de code opératoire pour les 32 instructions moins fréquentes, un pointeur de 10 bits avec trois bits (001) de code opératoire pour 128 instructions encore moins fréquentes et enfin un pointeur de 13 bits avec quatre bits (0001) de code opératoire pour 512 instructions rares. Pour un tel cas, on peut agencer la mémoire selon l'exemple représenté sur la figure 4 qui suppose une largeur de la mémoire 1 de 22 bits plus 2 bits de codage. Selon le rang hiérarchique des pointeurs, ceux-ci sont ici disposés en blocs totalisant 22 bits codés respectivement par les codes 01, 10 et 11 pour des pointeurs de 11, 7 et 5 bits respectivement, tandis que des instructions très rares Itr peuvent être mémorisées en entier (appelées aussi "instructions natives") et codées 00. La figure 5 représente un procédé connu de décompression pouvant faire usage des exemples que l'on vient de décrire. La mémoire 1 est ici connectée à un décompresseur 6 qui peut décharger des instructions dans une mémoire cache auxiliaire 7 contenant des instructions non comprimées qui sont utilisées par le processeur 3. Le compteur de programme 2 détermine si l'instruction doit provenir de la mémoire cache 7 ou si des instructions doivent être extraites de la mémoire 1 (respectivement connexions 8 et 9). Comme un mot de mémoire (ou bloc de pointeurs) comporte un nombre variable de pointeurs, la détermination de l'adresse de ce bloc de pointeurs o se trouve un pointeur donné adressé par le compteur de programme n'est pas immédiate. Les adresses doivent, à cet effet, être converties dans une table 10 de "traduction" d'adresses pour obtenir le bloc de pointeurs qui va permettre de rechercher les instructions nécessaires au stade correspondant du déroulement du programme. Les instructions désignées par les pointeurs sont chargées dans la mémoire cache 7 pour pouvoir être exécutées par le processeur. Les systèmes de décompression de la technique antérieure que l'on vient de décrire présentent tous des inconvénients. Par exemple, si on utilise une décompression selon la figure 2, deux pointeurs désignant deux instructions consécutives du programme doivent toujours être contigus et rangés à des adresses adjacentes dans la mémoire pour que les instructions correspondantes soient correctement appliquées au processeur. Pour pouvoir effectuer des branchements (ou "jumps"), l'adresse fournie par le compteur de programme nécessite une mémoire avec des instructions natives, ce qui rend nécessaire une table de traduction d'adresses. De plus, le compteur de programme ne doit pas progresser si un mot dans la mémoire comporte plusieurs pointeurs. De la sorte, pour mettre en oeuvre un tel procédé, le processeur doit être conçu spécialement. Enfin, un dernier inconvénient réside dans le fait que la traduction d'adresse nécessite beaucoup de temps et demande une mémoire supplémentaire, ce qui fait perdre en partie le bénéfice de l'économie réalisée par la compression du programme. L'invention a pour but de fournir un procédé de - IT- décompression d'un programme comprimé, ce procédé devant être dépourvu des inconvénients de la technique antérieure. Elle a donc pour objet un procédé de décompression d'un programme comprimé destiné à être exécuté dans un processeur, le programme comprimé étant constitué d'au moins une première série d'instructions fréquemment utilisées et rangées dans une première table, une deuxième série d'instructions moins fréquemment utilisées et rangées dans une deuxième table et des pointeurs ayant une longueur de bits inférieure à celle des instructions et étant rangés en blocs successifs dans une mémoire de pointeurs, le procédé consistant à extraire sélectivement lesdits pointeurs de ladite mémoire à l'aide d'adresses engendrées par l'intermédiaire d'un compteur de programme, et à utiliser sélectivement ces pointeurs pour l'adressage desdites tables et l'extraction desdites instructions au fur et à mesure du déroulement dudit programme, caractérisé en ce que lesdits blocs de pointeurs contiennent, chacun, un même nombre S = 2 pointeurs et en ce que les U bits de plus faible poids de chaque adresse fournie par ledit compteur de programme sont utilisés pour l'extraction successive desdits pointeurs du bloc de pointeurs dans lequel ils sont rangés. Il résulte de ces caractéristiques que les U bits de plus faible poids peuvent être utilisés pour identifier dans chaque bloc le pointeur qui va appeler l'instruction utilisée par le processeur pendant le pas de programme suivant et ce, que ce pas de programme implique un branchement ou non. Selon d'autres caractéristiques avantageuses de l'invention: - le nombre de bits de plus faible poids de ladite adresse est appliqué à un multiplexeur qui est chargé successivement avec les blocs contenus dans ladite mémoire et les pointeurs d'un bloc sont sélectionnés à l'aide desdits bits de plus faible poids; - un registre à décalage est chargé successivement avec le contenu des blocs de ladite mémoire de pointeurs et on fait progresser ledit registre à décalage à l'aide dudit nombre de bits de faible poids, pour appliquer lesdits pointeurs en tant qu'adresses à au moins l'une desdites première et seconde tables; - des pointeurs de valeur prédéterminés sont utilisés en tant qu'adresses d'une table de manière à extraire de celle-ci lesdites instructions moins fréquentes et lesdites instructions sont appliquées, le cas échéant, audit processeur. - lesdits pointeurs de valeur prédéterminée sont utilisés en tant qu'adresses d'une troisième table contenant des pointeurs secondaires, utilisés pour adresser ladite seconde table, lesdites instructions moins fréquentes étant ainsi extraites de celle-ci; - lesdits pointeurs contiennent un code de Huffman et lesdites tables contenant lesdites instructions sont sélectivement adressées par lesdits pointeurs en fonction d'au moins un des bits de poids forts desdits pointeurs représentant ledit code de Huffman; - lors d'un branchement, ledit nombre de bits de plus faible poids du contenu dudit compteur de programme est utilisé pour désigner dans un bloc de ladite mémoire le pointeur sur lequel le branchement doit être effectué; - pour désigner le premier pointeur à utiliser lors d'un branchement, les pointeurs présents dans ledit registre à décalage sont amenés à progresser au fur et à mesure du déroulement dudit programme, le nombre de progressions est compté et ce nombre est comparé à la valeur représentée par lesdits bits de faible poids du contenu dudit compteur de programme; - certains pointeurs dans au moins certains desdits blocs contiennent un code NOP et une instruction NOP est appliquée audit processeur, lorsqu'un pointeur ainsi codé est extrait de ladite mémoire. D'autres caractéristiques et avantages de l'invention apparaîtront au cours de la description qui va suivre, donnée uniquement à titre d'exemple et faite en se référant aux dessins annexés sur lesquels: - les figures 1 à 5 représentent plusieurs solutions connues de la technique antérieure pour réaliser un système de décompression d'un programme comprimé; - la figure 6 est une représentation schématique d'un système de décompression d'un programme comprimé pour un processeur mettant en oeuvre le procédé suivant l'invention; - la figure 7 est une variante du système représenté sur la figure 6; et - la figure 8 montre une représentation schématique d'un second mode de mise en oeuvre de l'invention. On va maintenant se référer à la figure 6 qui représente un système de décompression d'un programme d'ordinateur permettant l'exécution d'un premier mode de mise en oeuvre de l'invention. Une mémoire 11 dont chaque mot de mémoire comporte M bits contient le programme de travail sous forme comprimée d'un processeur 12 représenté en bas de la figure. Ce processeur 12 utilise des instructions d'une largeur de N bits. Les mots de la mémoire 11 sont au nombre de X et forment chacun un bloc 13 de S pointeurs P ayant chacun T bits. La largeur d'un bloc est donc M=TxS bits. S est une puissance entière de deux, cette puissance étant désignée par U. Par conséquent, le nombre S de pointeurs par bloc est égal à 2u. Dans un exemple non limitatif de l'invention illustré sur la figure 6, ces nombres peuvent avoir les valeurs suivantes: M=96; N=22; S=16; T=6; U=4. La mémoire 11 est adressée par un compteur de programme 14 dont les U bits les moins significatifs ne sont pas utilisés pour configurer chaque adresse de cette mémoire 11. La sortie de la mémoire 11 est connectée à un multiplexeur 15 qui, pour adresser un pointeur donné de chaque bloc 13, utilise les U bits les moins significatifs qui lui sont chaque fois appliqués par le compteur de programme 14. La sortie du multiplexeur 15 est reliée à une table 16 d'instructions fréquentes If dans laquelle sont enregistrées les instructions qui sont utilisées le plus fréquemment pendant le déroulement du programme de travail. La sortie du multiplexeur 15 est également connectée à un décodeur 17 qui décode sur 3 bits par exemple, les valeurs les plus élevées que peut prendre un pointeur. En considérant l'exemple chiffré ci-dessus, le décodeur 17 peut décoder des pointeurs ayant les valeurs 56 à 63, les valeurs 0 à 55 étant réservées -T--TT comme adresses de la table 16, qui dans ce cas peut donc loger au maximum 55 instruction If les plus fréquentes. Les valeurs 56 à 63 sont décodées de la façon suivante: Code bits 56 000 57 001 58 010 59 011 60 100 61 101 62 110 63 111 Les bits correspondants décodés par le décodeur 17 servent comme une partie d'adresse d'une deuxième table 18 dans laquelle sont stockés des pointeurs Pi secondaires ayant par exemple une longueur V, V pouvant être égal à 11, par exemple. L'adresse destinée à cette table 18 de pointeurs Pi est composé de S - U bits provenant du compteur de programme 14, plus en tant que bits les moins significatifs, les trois bits décodés respectifs provenant du décodeur 17. L'adresse ainsi complétée est utilisée pour désigner les pointeurs Pl, ceux-ci étant appliqués à une troisième table 19 contenant des instructions Imf utilisées moins fréquemment que les instructions If pendant le déroulement du programme de travail. Ainsi, la table 18 est adressée par les S - U bits les plus significatifs du compteur de programme 14 et par les U-1 bits sortant du décodeur 17, soit avec S-1 bits au total. La table 18 a donc une taille de 2.S - 1 mots de 11 bits, soit moitié moins de mots que les pointeurs de six bits de la mémoire 11. --if' Les sorties des tables 16 et 19 sont appliquées en parallèle au processeur 12. On va maintenant décrire le fonctionnement du système de décompression de la figure 6 en prenant comme exemple les valeurs spécifiées ci- dessus. Le compteur de programme 14 à seize bits adresse la mémoire 11 en sélectionnant l'un des blocs 13 à l'aide de ses douze bits les plus significatifs et l'un des pointeurs de ce bloc à l'aide des quatre bits les moins significatifs. Deux cas peuvent alors se produire. Si le pointeur sélectionné a une valeur entre 0 et , il adresse directement la table 16 qui contient les cinquante-six instructions les plus utilisées par le processeur 12. Par contre, si le pointeur à une valeur entre 56 et 63, c'est qu'il s'agit d'une instruction Imf peu utilisée. Dans l'exemple, le bloc illustré dans la mémoire comporte sept de ces pointeurs, codés de 56 à 62. Un bloc de pointeurs peut contenir au maximum huit de ces pointeurs (codés de 56 à 63). On suppose maintenant que le compteur de programme 14 et le multiplexeur 15 sélectionnent le deuxième pointeur du bloc 13, qui a ici la valeur 56. Cette valeur est décodée par le décodeur 17 qui fournit les trois bits les moins significatifs (ici 000) à la table 18. La table 18 comporte, pour chaque bloc de seize pointeurs de six bits adressé par les douze bits les plus significatifs du compteur de programme 14, un bloc d'au maximum huit pointeurs, de onze bits chacun, adressé par la même adresse formée par les douze bits les plus significatifs provenant du compteur de programme 14. Le premier de ces pointeurs dans chaque bloc de huit, correspond en fait au code 56, le second au code 57 etc., le dernier correspondant au code 63. Dans l'exemple discuté ici, seulement sept pointeurs de six bits (mémoire 11) codés de 56 à 62 sont utilisés. Les pointeurs de la table 18 sont ensuite utilisés pour adresser la table 19 contenant 2048 instructions Imf avec lesquelles peut travailler le processeur 12. Un simple calcul permet de mettre en évidence la réduction de place de mémoire que l'on peut ainsi réaliser. Antérieurement (figure 1) il fallait 64k instructions de 22 bits chacun soit 1 441 792 bits. Le système de la figure 6 nécessite Mémoire 11: 64k x 6 = 393 216 bits Table 16: 56 x 22 = 1 232 bits Table 18: 32k x 11 = 360 448 bits Table 19: 2k x 22= 45 056 bits Total 799 952 bits soit un réduction d'environ 45% par rapport au système selon la figure 1. La figure 7 représente une variante du système de décompression de la figure 6. Dans ce cas, une mémoire 11A adressée par un compteur de programme 14A comprend des blocs 13A constitués chacun de seize pointeurs de huit bits. Parmi ces pointeurs, ceux avec les quatre valeurs les plus élevées 252 à 255 sont destinés à adresser la table 18A, tandis que les autres pointeurs ayant une valeur jusqu'à 251 sont utilisés pour adresser la table 16A qui contient les instructions If les plus fréquentes envoyées vers le processeur 12A. La table 18A contient alors directement des blocs de quatre instructions moins fréquentes Imf pour ce même processeur. Dans ce cas, la mémoire 11A contient: Mémoire 11A: 64k x 8 = 524 288 bits Table 16A: 250 x 22 = 5500 bits Table 18A: 16k x 22 = 360 448 bits Total 890 236 bits soit un réduction de 40%, environ. Le système de la figure 8 comprend une mémoire 11 associée à des moyens pour permettre l'adressage d'un pointeur P quelconque dans un bloc 13 quelconque au cas o le programme de travail prescrit un branchement sur un tel pointeur. Dans ce cas, l'adresse de branchement provenant du processeur 12 est appliquée au compteur de programme 14 dont, dans ce cas, les U bits vont servir à désigner le pointeur P sur lequel le branchement doit être fait. Les bits de poids supérieur du contenu du compteur de programme 14 sont utilisés dans ce cas également pour désigner le bloc 13 dans lequel se trouve le pointeur P à atteindre. La sortie de la mémoire 11 est connectée à un registre à décalage 20. Ce système comprend également un décodeur 21 de la partie U de l'adresse de branchement commandant la progression des pointeurs du bloc 13 concerné dans le registre à décalage 20. Ce décodeur 21 est donc relié à cet effet au registre 20. Il est également relié à un compteur 22 destiné à comptabiliser le nombre de décalages ayant lieu dans le registre 20. La partie U de l'adresse de branchement est également appliquée à l'une des entrées d'un comparateur 23 qui compare la position du compteur 22 à la valeur de la partie U de l'adresse. Lorsque le comparateur 23 constate l'égalité entre ses deux entrées, le décalage dans le registre 20 cesse et le pointeur P est extrait du registre à décalage 20. Chaque pointeur P contenu dans les blocs 13 de la mémoire de programme 11 comporte ici un code de Huffman permettant d'adresser sélectivement une pluralité de tables d'instructions (quatre tables 24 à 27 sont prévues dans l'exemple représenté) sous la commande d'un décodeur 28. Celui-ci décode un nombre prédéterminé de bits de poids fort de chaque pointeur P pour désigner laquelle des tables 24 à 27 va devoir fournir l'instruction suivante du programme de travail. Les instructions dans les tables 24 à 27 se présentent avec une fréquence dégressive d'apparition dans le programme et sont désignées par des pointeurs P de longueur de bits croissante. Ainsi, par exemple, les instructions fréquentes If de la table 24 peuvent être désignées par seize pointeurs de cinq bits chacun dont quatre servent d'adresse à la table 24 qui comportera alors seize instructions If fréquentes. Le cinquième bit du pointeur désigne la table 24. Dans ce cas, le décodeur 28 décale chaque fois de cinq bits le registre à décalage 20. De même, si le code détecté par le décodeur 28 est "01", c'est la table 25 qui est désignée. Celle-ci comporte 32 instructions Imf moins fréquentes, les pointeurs P ayant alors une taille de sept bits, ce dont le registre à décalage 20 est décalé à chaque pas de programme. Les tables 26 et 27 peuvent contenir respectivement des instructions Iemf encore moins fréquentes et des instructions Ir rares au nombre de 128 et de 256, respectivement. Les pointeurs correspondants ont alors une longueur de dix et de treize bits, ce dont le décodeur doit décaler le registre 20 à chaque pas de programme correspondant. Bien entendu, le code utilisé pour désigner la table à sélectionner parmi les tables 24 à 27 peut être I TV différent de celui décrit. Par exemple, selon une variante, on peut choisir de remplir certains blocs 13 de la mémoire de programme avec des instructions Ir directement utilisables par le processeur 12 en utilisant pour cela un code "1" et de remplir d'autres blocs 13 avec des pointeurs P codés comme indiqué ci-dessus afin de désigner les instructions fréquentes If, moins fréquentes Imf et encore moins fréquentes Iemf. Cette façon de coder permet par exemple avec des blocs 13 d'une largeur de 92 bits d'avoir, par bloc, quatre instructions rares Ir de 22 bits et huit instructions de 11 bits en tant qu'instructions Imf moins fréquentes. L'objectif du codage consiste ainsi à remplir au mieux l'espace disponible dans chaque bloc. On a vu précédemment, que la gestion selon l'invention du compteur de programme 14 prévoit que chaque bloc 13 de la mémoire de pointeurs 11 conduit toujours à l'exécution d'un même nombre d'instructions. Cependant, il serait intéressant du point de vue de l'obtention d'un taux de compression le meilleur possible, de pouvoir avoir une certaine liberté dans le choix du nombre d'instructions à exécuter par bloc 13. Pour remédier à ces deux exigences apparemment contradictoires, il est avantageux selon l'invention, d'utiliser parfois des pointeurs P qui ne conduisent pas à l'exécution d'une instruction dans le processeur 12 mais qui contiennent un code particulier appelé NOP (sigle signifiant "No OPeration" en anglais). Pour insérer une telle instruction, qui ne provoque pas d'opération active dans le processeur 12, le code du pointeur décelé par le décodeur 28 est, dans ce cas, un signal de commande envoyé à un multiplexeur 29 qui, en fonction de ce signal, envoie l'instruction NOP vers le I IT- processeur 12 au lieu des instructions provenant des tables 24 à 27. Il est à noter que, bien que cela ne soit pas représenté, un tel agencement peut également être prévu dans les cas des figures 6 et 7. Selon une autre variante, il est possible d'insérer entre les tables 16 et 19 de la figure 6 ou les tables 24 à 27, d'une part, et le processeur 12, d'autre part, une mémoire cache contenant un jeu d'instructions non comprimées avec lesquelles le processeur 12 travaille très fréquemment, ce qui permet, dans certains cas, d'éviter de passer par le processus de décompression. REVENDICATIONS 1. Procédé de décompression d'un programme comprimé destiné à être exécuté dans un processeur (12; 12A), le programme comprimé étant constitué d'au moins une première série d'instructions (If) fréquemment utilisées et rangées dans une première table (16; 16A; 24), une deuxième série d'instructions (Imf; Iemf; Ir) moins fréquemment utilisées et rangées dans une deuxième table et des pointeurs (P) ayant une longueur de bits inférieure à celle des instructions et étant rangés en blocs successifs (13: 13A) dans une mémoire de pointeurs (11; 11A), le procédé consistant à extraire sélectivement lesdits pointeurs (P) de ladite mémoire (11; 11A) à l'aide d'adresses engendrées par l'intermédiaire d'un compteur de programme (14; 14A), et à utiliser sélectivement ces pointeurs pour l'adressage desdites tables et l'extraction desdites instructions au fur et à mesure du déroulement dudit programme, caractérisé en ce que lesdits blocs (13; 13A) de pointeurs (P) contiennent, chacun, un même nombre S = 2u pointeurs et en ce que les U bits de plus faible poids de chaque adresse fournie par ledit compteur de programme (14; 14A) sont utilisés pour l'extraction successive desdits pointeurs (P) du bloc de pointeurs (13; 13A) dans lequel ils sont rangés. 2. Procédé suivant la revendication 1, caractérisé en ce qu'il consiste à appliquer le nombre de bits (U) de plus faible poids de ladite adresse à un multiplexeur (15; A), à charger ce multiplexeur successivement avec les blocs (13; 13A) contenus dans ladite mémoire (11; 11A) et à sélectionner les pointeurs d'un bloc à l'aide desdits bits de plus faible poids. 3. Procédé suivant la revendication 1, caractérisé en ce qu'il consiste à charger un registre à décalage (20) successivement avec le contenu des blocs (13) de ladite mémoire de pointeurs(11) et à faire progresser ledit registre à décalage (20) à l'aide dudit nombre de bits (U) de faible poids, pour appliquer lesdits pointeurs (P) en tant qu'adresses à au moins l'une desdites première et seconde tables (24 à 27). 4. Procédé suivant l'une quelconque des revendications 1 à 2, caractérisé en ce que des pointeurs (P) de valeur prédéterminée sont utilisés en tant qu'adresses d'une table (18A) de manière à extraire de celle-ci lesdites instructions moins fréquentes (Imf) et à appliquer lesdites instructions, le cas échéant, audit processeur. 5. Procédé suivant la revendication 4, caractérisé en ce que des lesdits pointeurs de valeur prédéterminée sont utilisés en tant qu'adresses d'une troisième table (18) contenant des pointeurs secondaires (Pl), utilisés pour adresser ladite seconde table (19) et extraire ainsi de celle-ci lesdites instructions moins fréquentes (Imf); 6. Procédé suivant la revendication 3, caractérisé en ce que lesdits pointeurs (P) contiennent un code de Huffman et en ce que lesdites tables (24 à 27) contenant lesdites instructions (If, Imf, Iemf; Ir) sont sélectivement adressées par lesdits pointeurs en fonction d'au moins un des bits de poids fort desdits pointeurs représentant ledit code de Huffman. 7. Procédé suivant l'une quelconque des revendications précédentes, caractérisé en ce que, lors d'un branchement, ledit nombre de bits (U) de plus faible poids du contenu dudit compteur de programme (14) est utilisé pour désigner dans un bloc (13) de ladite mémoire (11) le pointeur sur lequel le branchement doit être effectué. 8. Procédé suivant la revendication 7, lorsqu'elle dépend de la revendication 3, caractérisé en ce que, pour désigner le premier pointeur à utiliser lors d'un branchement, les pointeurs (P) présents dans ledit registre à décalage (15) sont amenés à progresser au fur et à mesure du déroulement dudit programme, en ce que le nombre de progressions est compté (22) et en ce que ce nombre est comparé (23) à la valeur représentée par lesdits bits (U) de faible poids du contenu dudit compteur de programme (14). 9. Procédé suivant l'une quelconque des revendications 1 à 8, caractérisé en ce que certains pointeurs dans au moins certains desdits blocs contiennent un code NOP et en ce qu'une instruction NOP est appliquée audit processeur (12), lorsqu'un pointeur ainsi codé est extrait de ladite mémoire (11). -r-T-