Brevet FR2606903A1 — publié le 19880520

La présente invention concerne des "moniteurs de logiciel" qui permettent à un utilisateur de définir des points d'arrêt dans un logiciel d'utilisateur qui est débogué ou analysé, dans le but de permettre à l'utilisateur de pro- gresser pas à pas ou d'une autre manière dans le programme d'utilisateur, et de déterminer le contenu des registres d'un processeur à des points d'arrêt sélectionnés dans le logi- ciel. On utilise couramment dans des systèmes informati- ques des programmes appelés moniteurs de logiciel, ou sim- plement "moniteurs", pour permettre à des ingénieurs de débo- guer ou d'analyser un logiciel. Un moniteur permet de façon caractéristique à un ingénieur d'introduire dans le moniteur des "ordres de moniteur", au moyen d'un terminal. Les ordres de moniteur consistent en un jeu d'ordres, chacun d'eux com- prenant habituellement de une à trois lettres. De tels ordres de moniteur permettent à un utilisateur d'examiner et de modifier certaines variables d'un microprocesseur ou des positions de mémoire dans une mémoire utilisée par le micro- processeur. A titre d'exemple, un ordre caractéristique est "afficher le contenu de la mémoire de données", et lorsque cet ordre est introduit avec une valeur d'adresse numérique, par l'intermédiaire d'un terminal, il ordonne au moniteur de logiciel d'afficher sur l'écran du terminal le contenu d'un certain nombre de positions de mémoire, à partir de l'adres- se numérique spécifiée. Un autre ordre caractéristique est un ordre "modifier un registre", qui permet d'examiner et de modifier le contenu d'un registre spécifié du microproces- seur. Le jeu d'ordres de moniteur contient également des ordres qui permettent à un utilisateur de charger un program- me d'utilisateur en mémoire, d'exécuter le programme d'utili- sateur et d'arrêter le programme d'utilisateur à un certain stade de son exécution, pour examiner l'effet du programme d'utilisateur sur les registres du microprocesseur et sur les positions de mémoire appropriées. Pour arrêter l'exécution d'un programme d'utilisa- teur, on fixe un point d'arrêt de logiciel à une position particulière en mémoire, à l'endroit auquel on désire un arrêt. Le point d'arrêt de logiciel commande au microproces- seur d'arrêter l'exécution du programme d'utilisateur, de sauvegarder toutes les valeurs courantes de ses registres dans une certaine zone de mémoire réservée exclusivement pour l'utilisation par le moniteur, et de commencer ensuite l'exécution du programme moniteur. Une séquence caractéristique d'événements pourrait se dérouler de la manière suivante. A la mise sous tension d'un système basé sur un microprocesseur, le système commen- ce automatiquement à exécuter un programme moniteur de logi- ciel qui réside en mémoire. Ceci permet l'introduction d'ordres de moniteur au moyen d'un terminal. En utilisant les ordres de moniteur, l'utilisateur introduit un program- me d'utilisateur dans la mémoire du système, en partant à une certaine adresse. L'utilisateur initialise ensuite tous les registres appropriés du microprocesseur aux valeurs exi- gées au début de l'exécution du programme d'utilisateur. En particulier, le compteur de programme d'utilisateur (qui contient l'adresse de la position de mémoire contenant l'instruction d'utilisateur suivante que devrait exécuter le microprocesseur s'il exécutait un programme d'utilisateur) est fixé à la valeur d'adresse du début du programme d'uti- lisateur. L'utilisateur établit ensuite un point d'arrêt de logiciel dans le programme d'utilisateur, en utilisant un ordre "établir un point d'arrêt". Le point d'arrêt de logi- ciel est établi à une position d'adresse de mémoire particu- lière dans le programme d'utilisateur à laquelle l'utilisa- teur désire arrêter le programme d'utilisateur pendant son exécution. Après que tous les registres et les positions de mémoire appropriés ont été initialisés (en utilisant les ordres de moniteur disponibles pendant que le microproces- seur exécute le programme moniteur), l'utilisateur introduit un ordre "exécution par le moniteur". Sous l'effet de cet ordre, le microprocesseur cesse d'exécuter le programme moniteur et il commence à exécuter le programme d'utilisa- teur en partant de la valeur du compteur de programme d'uti- lisateur initialisé. Le microprocesseur continue à exécuter le programme d'utilisateur jusqu'à ce que le point d'arrêt de logiciel soit atteint. A ce point, le microprocesseur cesse d'exécuter le programme d'utilisateur, il sauvegarde toutes ses valeurs de registres dans une zone de mémoire réservée, et il recommence à exécuter le programme moniteur. La seule manière de procéder pour pouvoir arrêter un pro- gramme d'utilisateur et faire démarrer le programme moni- teur consiste à établir un point d'arrêt dans le programme d'utilisateur. Pour réaliser ceci, l'ordre "établir un point d'arrêt" du moniteur remplace une instruction dans le pro- gramme d'utilisateur par une instruction d'interruption à l'adresse de chaque point d'arrêt de logiciel désiré, et il enregistre temporairement les instructions de programme d'utilisateur qui sont remplacées. L'ordre "exécution par le moniteur" provoque alors l'exécution du logiciel d'utilisa- teur jusqu'à la rencontre du premier point d'arrêt, c'est-à- dire la première instruction d'interruption. Cette instruc- tion dirige vers une instruction de branchement à deux mots qui appelle le sous-programme du moniteur qui gère les points d'arrêt de logiciel, et qui remplace chaque instruc- tion d'interruption par l'instruction d'utilisateur qui a été remplacée précédemment par l'instruction d'interruption. Le moniteur affiche également automatiquement sur l'écran du terminal le contenu de tous les registres du processeur, au moment o le compteur de programme du processeur a rencontré l'instruction d'interruption correspondant au point d'arrêt. Pour déboguer un programme d'utilisateur, il est nécessaire de contrôler que le programme d'utilisateur exé- cute exactement la séquence d'opérations prévue, pour laquel- le il a été conçu. On devrait théoriquement contrôler tous les registres du processeur et toute position de mémoire affectée par le programme d'utilisateur, pour vérifier la présence des valeurs attendues, après chaque instruction du programme d'utilisateur qu'exécute le processeur. En prati- que, du fait de la longueur de la plupart des programmes, - ceci n'est pas commode et on ne contrôle toutes les variables du programme qu'en certaines positions choisies avec soin dans le programme d'utilisateur, auxquelles on définit des points d'arrêt. Lorsqu'on rencontre un problème, il est souvent souhaitable de "converger" sur l'instruction ou les instruc- tions d'utilisateur qui sont la cause du problème. On peut effectuer ceci en redéfinissant de façon répétée la position des points d'arrêt de logiciel de façon qu'ils se rappro- chent dans le programme d'utilisateur. De cette manière, on diminue progressivement le nombre d'opérations qui sont effectuées entre les points d'arrêt consécutifs pendant l'exécution du programme d'utilisateur. Dans le cas limite, on définirait un ensemble de points d'arrêt de façon consé- cutive dans des positions du programme d'utilisateur dans lesquelles on suspecte la présence d'un code de programme d'utilisateur erroné. On exécuterait le programme d'utilisa- teur jusqu'à la rencontre du premier point d'arrêt. On exa- minerait ensuite les variables du programme. On exécuterait ensuite le programme d'utilisateur du premier point d'arrêt jusqu'au second; en fait, une instruction d'utilisateur supplémentaire serait exécutée, et on examinerait à nouveau les variables du programme. On répéterait ensuite ce proces- sus. Tout moniteur ne permet cependant d'établir qu'un certain nombre maximal de points d'arrêt (de façon caracté- ristique quatre à dix), ce qui fait que si l'utilisateur sou- haite poursuivre l'exécution pas à pas du programme d'utili- sateur au-delà du dernier point d'arrêt dans le programme d'utilisateur, il est nécessaire de redéfinir les points d'arrêt. La plupart des moniteurs qui sont exécutés dans un système utilisant un microprocesseur dont le jeu d'instruc- tions comprend une instruction d'interruption comportent un ordre "pas à pas" qui permet aisément d'exécuter un program- me d'utilisateur une instruction à la fois. La séquence d'événements d'un ordre pas à pas de moniteur est la suivan- te. Le moniteur examine le code opération dans la position de mémoire dont l'adresse est donnée par la valeur du compteur de programme d'utilisateur. Ce code opération est celui que le programme d'utilisateur exécutera en premier au cas o l'ordre d'exécution du moniteur est exécuté. Le moniteur décode le code opération pour déterminer la lon- gueur de l'instruction complète (par exemple un mot ou deux mots), et il place ensuite une instruction d'interruption dans la position immédiatement suivante (après avoir tout d'abord sauvegardé les instructions d'utilisateur qui s'y trouvaient). Le moniteur établit donc effectivement un point d'arrêt immédiatement après l'instruction d'utilisa- teur suivante qui est sur le point d'être exécutée. Le moni- teur exécute ensuite un ordre d'exécution (dans le cadre de l'ordre pas à pas). L'instruction de programme d'utilisateur est exécutée et le compteur de programme est incrémenté à la valeur d'adresse de la mémoire qui contient l'instruction d'interruption. L'instruction d'interruption est exécutée, ce qui provoque une halte du programme d'utilisateur, et l'exécution du programme moniteur. Le programme moniteur sauvegarde toutes les valeurs des registres du processeur et il remplace l'instruction d'interruption par l'instruction d'utilisateur d'origine qui a été sauvegardée. Le compteur de programme d'utilisateur compte ensuite la valeur d'adres- se de l'instruction suivante dans la mémoire de programme d'utilisateur, de façon que l'utilisateur puisse maintenant exécuter un autre ordre pas à pas, dans le but de progresser à nouveau. Ce processus utilise simplement un point d'arrêt qui est toujours placé soigneusement une instruction en avant dans le programme d'utilisateur. Certaines instructions d'utilisateur exigent une légère modification de la séquence d'événements ci-dessus, pendant l'exécution d'un ordre pas à pas de moniteur. On considérera par exemple le cas dans lequel l'instruction d'utilisateur qui est sur le point d'être exécutée est une instruction de branchement conditionnel, comme l'indique le topogramme mémoire de la figure 5. Lorsque le branchement conditionnel 90 est exécuté, selon la valeur d'un indica- teur qui a été instauré précédemment, le programme d'utilisa- teur se branche soit vers l'adresse 1005 soit vers l'adresse 1006, comme l'indiquent respectivement les références 91 et 92. Par conséquent, outre le fait qu'une instruction d'in- terruption doit être placée à la position 1005 (après avoir sauvegardé préalablement l'instruction d'utilisateur se trouvant dans cette position), une autre instruction d'in- terruption doit également être placée à l'adresse 1006, désignée par la référence 92. Ainsi, une instruction d'in- terruption sera toujours exécutée ensuite, indépendamment de la direction qu'emprunte l'instruction de branchement. La figure 5 montre également pourquoi seuls les microprocesseurs contenant une instruction d'interruption dans leur jeu d'instructions, permettent de façon caractéris- tique d'utiliser l'ordre de moniteur pas à pas. On considére- ra une instruction "appel de sous-programme" qui est utilisée à la place de l'instruction d'interruption. L'instruction d'appel de sous-programme est-une instruction à deux mots. De ce fait, bien qu'un point d'arrêt puisse être établi à la position 1005 de la figure 5 en plaçant le code opération de l'instruction' d'appel à la position 1005 et l'argument de ce code opération à la position 1006, l'argument serait écrasé par le code opération de l'instruction d'appel du second point d'arrêt, qui est placé en 1006 avec son argument placé à la position 1007. L'exécution du code opération de la pre- mière instruction d'appel, à la position 1005, provoquerait alors une erreur dans le moniteur. Ce problème n'apparaît pas lorsqu'on utilise l'instruction d'interruption pour mettre en oeuvre l'ordre de moniteur pas à pas, du fait qu'il s'agit d'une instruction à un seul mot. De nombreux microprocesseurs couramment utilisés comprennent dans leurs jeux d'instructions un certain nombre d'ins- tructions d'interruption, chacune d'elles dirigeant vers une position prédéterminée différente. On utilise cependant depuis peu de temps, pour certaines applications telles que celles correspondant à des dispositifs de traitement de signaux numériques rapides, des microprocesseurs rapides et à hautes performances, comportant ce qu'on appelle des "jeux d'instructions limités". Cependant, certains de ces microprocesseurs ne comportent pas d'instructions d'inter- ruption, tandis que d'autres, tels que le TMS32020 de Texas Instruments, ne comportent qu'une seule instruction d'inter- ruption dans leur jeu d'instructions. Bien qu'il soit possi- ble d'utiliser cette instruction unique pour écrire un moni- teur de logiciel pour un système de traitement de signaux numériques basé sur le microprocesseur TMS32020, ceci ne permettrait plus de disposer de cette instruction d'inter- ruption pour l'utilisation dans le logiciel à exécuter par le système. Il serait très souhaitable de pouvoir réaliser un moniteur de logiciel efficace pour un système basé sur un microprocesseur TMS32020, tout en faisant en sorte que la totalité du jeu d'instructions limité de ce microprocesseur soit disponible pour l'utilisateur du système. L'invention a donc pour but de procurer un moniteur de logiciel pour un système basé sur un microprocesseur qui n'utilise pas d'instructions d'interruption. Un autre but de l'invention est de procurer un moniteur de logiciel efficace pour un système utilisant un microprocesseur TMS32020 ou un microprocesseur ne comportant qu'une seule instruction d'interruption, qui permette de fai- re en sorte que la totalité du jeu d'instructions limité de ce microprocesseur soit disponible pour des programmes.d'uti- lisateur. Un autre but de l'invention est de procurer un moniteur de logiciel pour un système basé sur un micropro- cesseur à jeu d'instructions limité, qui n'exige qu'un mini- mum de capacité de mémoire disponible pour accomplir les fonctions de moniteur de logiciel désirées, et qui n'exige qu'un minimum de temps pour accomplir les fonctions de moni- teur de logiciel désirées. Brièvement, et conformément à un mode de réalisa- tion, l'invention procure un moniteur de Iogiciel qui fonc- tionne sans utiliser d'instructions d'interruption, tout en évitant des erreurs dues à l'écrasement en mémoire de l'ar- gument d'une instruction de point d'arrêt par le code opéra- tion d'une autre instruction de point d'arrêt, lorsque des points d'arrêt de logiciel sont définis à des adresses con- sécutives d'un programme d'utilisateur. Dans le mode de réa- lisation de l'invention qui est décrit, un moniteur de logi- ciel est incorporé dans un système de traitement de signaux numériques basé sur un microprocesseur à jeu d'instructions limité, tel qu'un microprocesseur à 16 bits TMS32020, ne comprenant qu'une seule instruction d'interruption dans son jeu d'instructions. Pour chaque adresse de point d'arrêt désirée dans le programme d'utilisateur, lorsque le moniteur reçoit initialement l'ordre d'exécution, il remplace l'ins- truction de programme d'utilisateur se trouvant à l'adresse de point d'arrêt désirée, par le code opération d'une ins- truction d'appel, et il remplace également l'instruction sui- vante par l'argument ou l'adresse à appeler par l'instruction d'appel. Le moniteur sauvegarde également temporairement les deux instructions d'utilisateur qui ont été remplacées. En utilisant le moniteur, l'utilisateur peut ensuite exécuter automatiquement le programme d'utilisateur jusqu'à la ren- contre de la première instruction d'appel, à la première adresse de point d'arrêt de logiciel, et il peut obtenir ainsi l'adresse de la partie du sous-programme du moniteur qui gère les points d'arrêt de logiciel. Le moniteur sauve- garde également dans une pile l'adresse du premier point d'arrêt, c'est-à-dire le contenu courant du compteur de pro- gramme, et le contenu des autres registres du microproces- seur, et il saute à la partie du sous-programme du moniteur qui gère les points d'arrêt. Le sous-programme de gestion de points d'arrêt du moniteur remplace ensuite la première instruction d'appel et son argument par les deux instruc- tions d'utilisateur remplacées à l'origine, et il affiche le contenu de tous les registres du microprocesseur, au moment o le compteur de programme du processeur contient l'adresse du premier point d'arrêt. Le moniteur de logiciel retourne ensuite à son début pour attendre l'ordre de moniteur sui- vant. Si un nouvel ordre "exécution par le moniteur" est introduit, le moniteur exécute le programme d'utilisateur depuis le dernier point d'arrêt de logiciel jusqu'au suivant, après quoi la séquence précédente est répétée. Pour éviter que le code opération d'une seconde instruction d'appel qui est introduite pour définir un second point d'arrêt à une seconde adresse, n'écrase l'argument d'une première instruc- tion d'appel qui a pour but de définir un premier point d'arrêt de logiciel à une adresse qui précède immédiatement l'adresse du second point d'arrêt, la partie du moniteur de logiciel qui gère les points d'arrêt se trouve à une adresse de mémoire ayant une valeur égale au code opération des instructions d'appel. Ainsi, même si l'argument d'une premiè- re instruction d'appel définissant un premier point d'arrêt est écrasé par le code opération d'une seconde instruction d'appel définissant un second point d'arrêt à la position d'adresse qui suit immédiatement le premier point d'arrêt, l'exécution du moniteur de logiciel conduit néanmoins à l'appel de la partie du moniteur qui gère les points d'arrêt. L'invention sera mieux comprise à la lecture de la description qui va suivre d'un mode de réalisation donné à titre d'exemple non limitatif. La suite de la description se refère aux dessins annexés sur lesquels: la figure 1 est un schéma synoptique d'un disposi- tif de traitement de signaux numériques qui contient'le moniteur de logiciel de l'invention; la figure 2 est un diagramme représentant une par- tie d'un topogramme mémoire du microprocesseur qui fait par- tie de la figure 1, et ce diagramme est utile à l'explica- tion du fonctionnement d'un moniteur de logiciel caractéris- tique de l'art antérieur qui utilise une instruction d'in- terruption; la figure 3 est un topogramme mémoire partiel du microprocesseur qui fait partie de la figure 1, qui est uti- le à l'explication de plusieurs problèmes qui apparaissent lorsqu'on utilise une instruction d'appel au lieu d'une instruction d'interruption pour réaliser un moniteur de logiciel; la figure 4 est un topogramme mémoire partiel du microprocesseur du système de la figure 1, utile à l'expli- cation de la réalisation du moniteur de logiciel de l'inven- tion; et la figure 5 est un topogramme mémoire qui est uti- le à la description de certains problèmes que l'invention permet de résoudre. Avant de décrire en détail le moniteur de logiciel de l'invention, il peut être utile de considérer d'abord la figure 1 et de décrire brièvement le processeur de signaux numériques 1 dans lequel est incorporé le moniteur de logi- ciel du mode de réalisation de l'invention qui est décrit. Le processeur de signaux numériques 1 comprend un bus VME standard 2, connecté par des conducteurs de bus de données 3 à un émetteur/récepteur 4, qui est lui-même connecté par un bus de données local 5 et des émetteurs/récepteurs 6 et 21 à un bus de données de microprocesseur 8 et un bus de données global 19. Le bus 2 est connecté à un bus d'adresse de microprocesseur 34 et à un bus d'adresse global 37, par l'in- termédiaire d'un circuit 30, d'un bus d'adresse local 32, d'un amplificateur/séparateur 33 et d'un amplificateur/sépa- rateur 38. Le microprocesseur 9 du type TMS32020 précité, une mémoire vive locale 10, une mémoire morte programmable 12 et une mémoire vive 13, sont connectés au bus d'adresse 34 et au bus de données 8. Une mémoire morte programmable électrique- ment (EPROM) de moniteur 11, qui enregistre le programme moniteur de logiciel de l'invention, est également connectée au bus d'adresse 34 et au bus de données 8. Une mémoire vive globale 20 est connectée à un bus d'entrée/sortie 23 par un amplificateur/séparateur 39 et un émetteur/récepteur 22, et elle est respectivement connectée à un bus d'adresse 34 et un bus de données 8 par des ampli- ficateurs/séparateurs 36 et 18. Un circuit de commande d'en- trée/sortie 26 commande la communication entre le bus d'en- trée/sortie 23, un accès de sortie 27 et un accès d'entrée 28. Le type de dispositif de traitement de signaux numériques décrit ci-dessus doit assurer des fonctions de traitement de signaux numériques rapides, à la vitesse maxi- male,en utilisant au minimum la mémoire disponible. Il est souhaitable que le moniteur de logiciel du bloc 11 occupe aussi peu d'espace de mémoire que possible dans la mémoire morte programmable électriquement 11, et occupe également aussi peu d'espace que possible dans la mémoire vive locale , pour son fonctionnement, et accomplisse les fonctions de moniteur de logiciel à une vitesse appropriée. Un circuit de décodage d'accès 35 permet au micro- processeur 9 de communiquer avec un accès pour terminal 15, qui peut être un accès RS232C classique, permettant à l'uti- lisateur d'introduire des ordres de moniteur de logiciel dans le dispositif de traitement de signaux numériques 1, et per- mettant à l'utilisateur de définir aisément des points d'arrêt, comme on l'expliquera ultérieurement. Pour comprendre le fonctionnement de l'invention, il est utile de comprendre de fagon encore plus détaillée comment un moniteur de logiciel caractéristique de l'art antérieur serait réalisé dans le système de la figure 1. En considérant la figure 2, on note que le topogramme mémoire du microprocesseur TMS32020, désigné par la référence 9, comprend une section de programme d'utilisateur 46, qui com- mence à l'adresse 2000, en hexadécimal. (On notera que tou- tes les adresses indiquées dans les exemples considérés ici sont exprimées en hexadécimal). Le programme moniteur de logiciel caractéristique est contenu dans la section 47 du topogramme mémoire 45, et il commence à l'adresse EOOO. Le moniteur de logiciel comprend une partie principale 47A, et une section de "gestion de points d'arrêt" 47B, qui commence à l'adresse E020. La section de gestion de points d'arrêt 47B s'étend jusqu'à une position 56 qui contient le code opération CE26 d'une instruction RETOUR. On décrira ensuite une procédure caractéristique pour établir des points d'arrêt de logiciel et pour exécuter un moniteur de logiciel caractéristique de l'art antérieur dans le système de la figure 1. Premièrement, à la mise sous tension, le microprocesseur émet une adresse 0000 pour pré- lever la première instruction. Du fait que l'adresse 0000 contient normalement des données aléatoires au moment de la mise sous tension du microprocesseur 9, un circuit de déco- dage est prévu pour traduire l'adresse 0000 de façon à don- ner la première adresse dans la mémoire morte, qui est dans ce cas l'adresse EOOO. La position EOOO contient une ins- truction de branchement ayant le code opération FF80, comme l'indique la référence 110 sur la figure 2. L'argument de l'instruction de branchement, ecst-à-dire l'aresse à laqoue] le programme se branchera si la condition de l'instruction de branchement est satisfaite, se trouve à l'adresse E001, et cet argument est fixé de façon à correspondre à l'adresse E002, qui est l'adresse de la première instruction du pro- gramme moniteur de logiciel. Cette technique fait passer automatiquement le système au moniteur au moment de la mise sous tension, mais elle ne s'applique pas au fonctionnement ultérieur du système ou du moniteur de logiciel. Après la mise sous tension du système, l'utilisa- teur qui désire faire fonctionner le moniteur de logiciel définit divers points d'arrêt de logiciel dans le programme d'utilisateur qui est enregistré dans la section 46 du topo- gramme mémoire 45. Comme mentionné ci-dessus, des moniteurs de logiciel caractéristiques de l'art antérieur utilisent des instructions d'interruption dans des programmes de moni- teur pour établir des points d'arrêt de logiciel. Une ins- truction d'interruption est une instruction à un seul mot qui contient un vecteur fixe. Lorsque le microprocesseur 9 ren- contre l'instruction d'interruption, il saute à l'adresse désignée par l'instruction d'interruption. Pour utiliser le moniteur de logiciel caractéris- tique qui est décrit, l'utilisateur définit tout d'abord tous les points d'arrêt désirés dans le programme d'utilisateur, au moyen d'un ordre de moniteur appelé "établir un point d'arrêt à une adresse". Des registres appropriés du micropro- cesseur sont également chargés en utilisant l'ordre de moni- teur approprié du type "modifier un registre", et en particu- lier le compteur de programme est fixé à la valeur d'adresse du début du programme d'utilisateur. Dans ce but, l'utilisa- teur donne la liste des adresses de points d'arrêt de logi- ciel auxquels il désire connaître le contenu de l'ensemble des divers registres du microprocesseur 9, en utilisant un ordre de moniteur appelé "afficher les points d'arrêt". L'utilisateur introduit ensuite dans le système un ordre "exécution par le moniteur". Sous l'effet de l'exécu- tion de l'ordre "exécution par le moniteur", l'instruction qui se trouve à l'adresse de chaque point d'arrêt est rem- placée par une instruction d'interruption, et chaque instruc- * tion d'utilisateur remplacée est en outre enregistrée tempo- rairement. Sous l'effet de l'exécution de l'ordre "exécution par le moniteur", le programme moniteur passe au programme d'utilisateur qui est enregistré dans la section 46 du topo- gramme mémoire de la figure 2 et il exécute ce programme. L'entrée dans le programme d'utilisateur se fait à l'adresse 2000, et les instructions du programme d'utilisateur sont exécutées jusqu'à la rencontre de l'adresse du premier point d'arrêt. Dans l'exemple de la figure 2, les adresses 2000 et 2001 contiennent le code opération d'instruction 5500, qui est le code opération de l'instruction "pas d'opération" du TMS32020, ceci uniquement pour la commodité de la descrip- tion. En pratique, un grand nombre d'instructions diverses pourraient en réalité être exécutées avant que l'adresse du premier point d'arrêt soit rencontrée. Dans l'exemple pré- sent, on suppose que l'adresse du premier point d'arrêt est l'adresse 2002, qui sur la figure 2 contient CElE, c'est-à- dire le code opération de l'instruction d'interruption du TMS32020. Ceci fait sauter le microprocesseur de l'adresse 2002 à l'adresse 1E, qui est le vecteur fixé à l'avance vers lequel l'instruction d'interruption dirige toujours lorsque le microprocesseur TMS32020 la rencontre. La flèche 51 sur la figure 2 indique ce saut à partir de l'instruction d'in- terruption à l'adresse 2002. La position 1E de la mémoire de programme contient le code opération FF80, qui est le code opération d'une instruction de branchement. L'instruction de branchement est une instruction à deux mots dont l'argument se trouve à l'adresse immédiatement suivante, c'est-à-dire l'adresse 1F. Dans cet exemple, l'argument de cette instruc- tion de branchement est l'adresse E020 du point d'entrée de la partie 47B du moniteur de logiciel qui gère les opéra- tions relatives aux points d'arrêt. Comme l'indique la flèche 54 sur la figure 2, le microprocesseur saute ensuite à l'adresse E020. Le programme moniteur sauvegarde ensuite le contenu de tous ses registres dans la pile. (Il y a deux formes de "pile". La première forme est la pile contenue dans la puce de microprocesseur. Pour le TMS32020, cette pile comprend quatre registres qu'on peut utiliser pour enregistrer quatre valeurs comme on le désire. Une seconde forme de pile consiste en une zone réelle de mémoire externe au microprocesseur, dont l'utili- sation est réservée au microprocesseur, pour enregistrer certaines variables. On voit clairement que cette seconde forme de pile peut être aussi grande qu'on le désire, dans la limite permise par l'espace de mémoire. Au moment de l'entrée dans le programme moniteur par l'intermédiaire d'un point d'arrêt de logiciel, le moniteur sauvegarde dans la mémoire (c'est-à-dire la seconde forme de pile) toutes les valeurs des registres du microprocesseur. Ceci signifie qu'un ordre de moniteur tel que l'ordre "afficher les regis- tres" lit réellement cette zone de mémoire et affiche son contenu. Si l'ordre "exécution par le moniteur" est mis en oeuvre pour exécuter un programme d'utilisateur, le moniteur recharge dans le processeur, à partir de la mémoire, toutes les valeurs de registres qui ont été sauvegardées, y compris la valeur du compteur de programme sauvegardée précédemment, et il relance ensuite l'exécution du programme d'utilisateur à partir de la valeur rechargée du compteur de programme. Le -moniteur SPV120 n'utilise réellement que l'un des registres de la pile interne du microprocesseur. Cet aller et retour de toutes les valeurs des registres du microprocesseur, entre le microprocesseur et la mémoire, lorsqu'un programme d'utilisa- teur ou un programme moniteur est arrêté ou lancé,constitue ce qu'on appelle dans la technique un "changement de contex- te".) Le moniteur exécute ensuite les instructions de la partie de gestion de points d'arrêt du sous-programme moni- teur commençant à l'adresse E020, et il remplace l'instruc- tion d'interruption se trouvant à la position 2002 par l'instruction d'utilisateur qui était enregistrée à l'origi- ne à cette adresse, et il affiche le contenu sauvegardé de tous les registres du microprocesseur correspondant à l'adresse de point d'arrêt 2002. Le moniteur retourne ensuite au début de sa section principale 47A et il attend l'ordre de moniteur suivant. L'Annexe A présente une liste d'ordres de moniteur pour le moniteur contenu dans la mémoi- re morte programmable électriquement 11, et cette liste est caractéristique de jeux d'ordres de moniteur. Si l'ordre de moniteur suivant est un ordre d'exécution par le moniteur (c'est-à-dire "exécuter un code de programme"), le microprocesseur saute à la position 2003 du programme d'utilisateur, et il continue à exécuter le programme d'utilisateur jusqu'à ce qu'il rencontre le point d'arrêt suivant, et à partir de ce point il répète la procé- dure décrite ci-dessus. Comme mentionné précédemment, l'utilisation d'un moniteur caractéristique du type qu'on vient de décrire pour le système décrit en relation avec la figure 1, avec un microprocesseur TMS32020, priverait l'utilisateur de la possibilité d'utiliser une instruction d'interruption dans un programme d'utilisateur quelconque, du fait que le TMS32020 ne comporte que l'instruction d'interruption qui est utilisée dans le programme moniteur. L'invention procure un moniteur de logiciel qui n'utilise pas l'instruction d'interruption, mais utilise à la place une instruction d'appel. On pense que personne n'a réalisé un moniteur de logiciel dans un système basé sur le microprocesseur à jeu d'instructions limité TMS32020, du fait qu'il n'est pas souhaitable de priver l'utilisateur de la possibilité d'exécuter des instructions d'interruption, et du fait que l'autre instruction du jeu d'instructions du TMS32020 qui aurait pu être utilisée (une instruction d'appel) exige deux mots de mémoire, ce qui double l'espace de mémoire nécessaire pour définir des points d'arrêt dans le programme d'utilisateur, et double l'espace de mémoire nécessaire pour enregistrer des instructions d'utilisateur qui doivent être remplacées dans le programme d'utilisateur afin de définir les points d'arrêt. On va maintenant considérer le topogramme mémoire 45A de la figure 3 pour décrire un moniteur de logiciel con- tenant des instructions d'appel à la place d'instructions d'interruption, pour définir des points d'arrêt de logiciel désirés dans le programme d'utilisateur à contrôler. Dans le topogramme mémoire 45A de la figure 3, le programme d'utili- sateur est contenu dans la section 46 et le programme moni- teur de logiciel est contenu dans la section 47, qui comprend une section principale 47A et une section de gestion de points d'arrêt 47B. Comme dans le moniteur de logiciel carac- téristique qu'on a décrit en relation avec la figure 2, la figure 3 montre des codes opération d'instruction du type "pas d'opération" pour désigner diverses instructions qui pourraient figurer dans le programme d'utilisateur. On sup- pose que le premier point d'arrêt désiré que le moniteur de logiciel doit introduire dans le programme d'utilisateur apparaît à l'adresse 2002. L'adresse 2002 contient FE80, qui est le code opération de l'instruction d'appel. La position suivante, 2003,contient l'adresse E020 à laquelle s'effectue l'entrée dans le sous-programme de gestion de point d'arrêt 47B. La flèche 67 indique que le microprocesseur 9 saute de l'adresse 2003 vers l'adresse E020, c'est-à-dire le point d'entrée du sous- programme de gestion de points d'arrêt du moniteur. On peut voir aisément que les instructions d'uti- lisateur d'origine se trouvant aux deux adresses 2002 et 2003 doivent être enregistrées temporairement pour que le moniteur de logiciel définisse le point d'arrêt à la posi- tion 2002 du programme d'utilisateur. A ce point de la description, on peut voir qu'un moniteur de logiciel qui définit des points d'interruption au moyen d'instructions d'appel, au lieu d'utiliser des instruc- tions d'interruption, n'entre directement dans le sous- programme de gestion de points d'arrêt 47B, sur la base de l'argument de l'instruction d'appel introduite, que si le point d'arrêt suivant n'est pas défini à la position 2003, car si un second point d'arrêt devait être défini à l'adresse 2003, son code opération FE80 écraserait l'argument E020 de la première instruction de point d'arrêt, dont le code opéra- tion se trouve à l'adresse 2002. Par conséquent, le point d'arrêt suivant le plus proche qui peut être défini se trouve à l'adresse 2004, à laquelle est indiqué le code opération FE80 désigné par la référence 69 sur la figure 3, et son argument E020 est introduit à l'adresse 2005, en remplaçant la ou les instructions d'origine se trouvant à ces positions. Pour illustrer davantage le problème ci-dessus, on supposera qu'on désire un troisième point d'arrêt à l'adresse suivante 2005. Si on définit ce point d'arrêt de la manière décrite précédemment, le code opération FE80 de la troisième instruc- tion d'appel, désigné par la référence 71, écrasera l'argu- ment E020 de la seconde instruction d'appel, désigné par la référence 70. La flèche 80 désigne cette destruction de l'adresse du moniteur que la seconde instruction d'appel doit appeler. Par conséquent, lorsque le moniteur de logiciel exécute ultérieurement le programme d'utilisateur, au moment de la rencontre du second point d'arrêt 69, le programme ne - saute pas vers l'adresse du moniteur, E020, mais il saute vers une certaine autre adresse FE80 au moment o le compteur atteint la position de programme 2005, ce qui provoque une erreur de fonctionnement. Pour résoudre ce problème, et conformément à l'in- vention, on utilise la structure indiquée dans le topogramme mémoire 45B de la figure 4, dans laquelle l'entrée dans la section de gestion de points d'arrêt 47B du moniteur s'effectue à l'adresse FE80 au lieu de l'adresse E020. L'argument de l'instruction d'appel, c'est-à-dire FE80, peut ainsi être fixé égal à son code opération. L'adresse 2002 du premier point d'arrêt contient alors le code opération d'appel FE80, et son argument FE80 se trouve à l'adresse 2003. Dans ces conditions, le programme moniteur appelle le sous-programme de gestion de point d'arrêt 47B à l'adresse FE80. Lorsqu'un second point d'arrêt à l'adresse 2004 est défini par le code opération d'instruction d'appel FE80 qui est désigné par la référence 69A, son argument FE80 dési- gné par la référence 70A est écrit à l'adresse 2005. Si un troisième point d'arrêt est défini à l'adresse 2005 par le code opération d'instruction d'appel FE80 désigné par la référence 71A, l'argument 70A est écrasé (comme l'indique la flèche 80A) par le code opération FE80, portant la référence 71A, de l'instruction d'appel qui définit le troisième point d'arrêt à l'adresse 2005, avant que le programme d'utilisa- teur et le sous-programme de gestion de point d'arrêt 47B aient pu être exécutés. Cependant, lorsque le programme d'utilisateur est exécuté, l'instruction d'appel qui se trouve à la position 2004 est exécutée, et l'entrée dans la section de gestion de points d'arrêt 47B du moniteur s'effec- tue correctement à l'adresse FE80, du fait que l'argument de la seconde instruction d'appel est égal au code opération qui l'a écrasé. Normalement, le programme moniteur insère tous les points d'arrêt ou supprime tous les points d'arrêt en une seule opération. On considérera cependant le cas d'un utili- sateur qui a établi deux points d'arrêt dans le programme d'utilisateur (par l'ordre "établir un point d'arrêt"), aux positions 2004 et 2005. La valeur courante du compteur de programme d'utilisateur qui se trouve dans la pile de mémoi- re du moniteur est 2003. Les points d'arrêt n'ont pas encore été introduits réellement de façon physique dans le programme d'utilisateur, mais les instructions d'utilisateur se trou- vant aux positions 2004, 2005 et 2006 ont été sauvegardées (par l'exécution de l'ordre "établir un point d'arrêt"). Les adresses pour l'insertion d'un point d'arrêt (2004 et 2005) ont également été sauvegardées. L'utilisateur introduit ensuite l'ordre EXECUTION pour exécuter son programme. Un "changement de contexte" est effectué, c'est-à-dire que tou- tes les valeurs des registres d'utilisateur sont chargées dans le microprocesseur, à partir de la pile de mémoire du moniteur. Ensuite, tous les points d'arrêt de logiciel sont écrits dans le programme d'utilisateur, c'est-à-dire que le code FE80 est écrit aux positions 2004, 2005 et 2006. Le programme d'utilisateur est ensuite exécuté. Le premier point d'arrêt est atteint et la commande retourne au moniteur. Le moniteur supprime alors tous les points d'arrêt, c'est-à-dire qu'il remplace par les instructions d'utilisateur d'origine le code FE80.qui se trouve aux positions 2004, 2005 et 2006. L'utilisateur peut ensuite introduire à nouveau l'ordre EXE- CUTION. Toutes les valeurs des registres d'utilisateur sont à nouveau chargées dans le microprocesseur à partir de la pile de mémoire. Le registre de compteur de programme con- tient cependant maintenant la valeur 2004. Si le moniteur écrivait maintenant tous les points d'arrêt dans le programme d'utilisateur, un premier point d'arrêt à cette adresse serait exécuté immédiatement. Le programme d'utilisateur ne serait pas capable de progresser au-delà de la position 2004. Dans ce cas, le moniteur n'écrit physiquement dans le pro- gramme d>utilisateur qu'un second point d'arrêt, à la posi- tion 2005. Une lois que le second point d'arrêt à la position 2005 est atteint et que la commande retourne au moniteur, ce dernier efface tous les points d'arrêt en réintroduisant de la manière habituelle les instructions d'utilisateur d'ori- gine. Ainsi, en général, le moniteur établit ou efface tous les points d'arrêt en une seule opération. Cependant, si une position de point d'arrêt quelconque est égale à la valeur courante du compteur de programme d'utilisateur ou du compteur de programme moins un, ce point d'arrêt particulier n'est pas établi. (Cette façon de procéder est une question de choix et non de nécessité. A certains égards, on peut valablement adopter le point de vue selon lequel si un utili- sateur tente de lancer l'exécution d'un programme d'utilisa- teur dont le début comporte un point d'arrêt, ce point d'arrêt arrêtera toujours le programme d'utilisateur à son début.) Il faut noter que seule l'instruction d'appel peut être utilisée de la manière décrite ci-dessus pour définir des points d'arrêt de logiciel. La raison en est que lorsque l'instruction d'appel est exécutée, la valeur courante du compteur de programme du microprocesseur est poussée dans la pile réalisée par matériel qui est contenue dans le micropro- cesseur TMS32020. L'argument de l'instruction d'appel est alors placé dans le compteur de programme du microprocesseur, de façon que le programme commence à exécuter le sous-pro- gramme appelé. On notera cependant que la valeur d'origine du compteur de programme a été sauvegardée. A la fin de l'exécu- tion du sous-programme, une instruction de retour est exécu- tée. Sous l'effet de cette instruction, le microprocesseur extrait de la pile le contenu sauvegardé du compteur de pro- gramme, et il le replace dans le registre de compteur de pro- gramme, de façon que l'exécution du programme puisse repren- dre immédiatement à la suite de l'emplacement auquel le sous- programme a été appelé. Ceci est important si le sous-pro- gramme qui est appelé fait partie d'un moniteur de logiciel. Ceci signifie que le moniteur de logiciel connaît maintenant l'emplacement dans le programme d'utilisateur auquel le sous- programme a été appelé, du fait qu'il peut examiner la pile pour déterminer le contenu du compteur de programme sauve- gardé. D'autres instructions, comme une instruction de bran- chement, ne provoquent pas la sauvegarde de la valeur cou- rante du compteur dans le matériel du microprocesseur. Le programme moniteur de logiciel décrit ci-dessus offre l'avantage de permettre au programme d'utilisateur d'utiliser la totalité du jeu d'instructions limité du pro- cesseur TMS32020, et il évite des erreurs dans le fonction- nement du moniteur dans le cas o on désire des points d'arrêt de logiciel à des adresses consécutives du programme d'utilisateur. A titre d'exemple, un programme d'utilisateur peut utiliser un vecteur d'interruption en effectuant une initialisation pour désigner le moniteur, de façon que l'uti- lisateur puisse l'utiliser dans son programme, s'il le dési- re, à la manière d'un point d'arrêt de logiciel qui provoque le transfert de la commande du programme d'utilisateur en cours d'exécution au moniteur. Cependant, l'utilisateur peut également utiliser l'interruption pour ses propres besoins, par exemple pour appeler un sous-programme, en changeant l'adresse du vecteur d'interruption de façon qu'il désigne son propre sous-programme. Ceci offre un intérêt particulier pour la réalisa- tion d'un ordre du moniteur commandant l'exécution pas à pas. Comme décrit précédemment, un ordre pas à pas au moniteur de logiciel permet d'exécuter chaque instruction du programme d'utilisateur, avec arrêt après chaque instruction. Cet ordre de moniteur ne peut normalement pas être réalisé par logiciel dans des moniteurs qui sont exécutés sur un microprocesseur dont le jeu d'instructions ne comporte pas une instruction d'interruption. Si le jeu d'instructions du microprocesseur compor- te effectivement une instruction d'interruption, on utilise normalement l'instruction d'interruption pour réaliser l'ordre de moniteur "pas à pas", ce qui prive l'utilisateur de l'instruction d'interruption dans le programme d'utilisa- teur. La Figure 6 est une liste d'une partie des sections appropriées du programme moniteur de logiciel qui est incor- poré dans la mémoire morte programmable électriquement 11, comprenant la partie qui gère les points d'arrêt de logiciel conformément à l'invention. Les sections 10-15, 31 et 35 du topogramme mémoire se trouvant aux deux dernières pages de la liste entrent dans le cadre de l'invention. Il va de soi que de nombreuses modifications peu- vent être apportées au procédé et au dispositif décrits et représentés, sans sortir du cadre de l'invention. TABLEAU Le tableau suivant est une liste de tous les ordres, indiquant leur forme d'exécution la plus immédiate. Ordre Description ACH Modifier la partie haute du reg. accumulateur ACL Modifier la partie basse du reg. accumulateur ARO Modifier le registre ARO AR1 Modifier le registre AR1 AR2 Modifier le registre AR2 AR3 Modifier le registre AR3 AR4 Modifier le registre AR4 BMS Modifier la partie médiane inférieure de la pile DAR Afficher les registres DBP Afficher les points d'arrêt DDM Afficher la mémoire de données DIS Désassembler le code de programme RUN Exécuter le code de programme DPM Afficher la mémoire de programme FDM Remplir la mémoire de données FPM Remplir la mémoire de programme HLP Aide LO1 Charger le code de programme par l'accès 1 L02 Charger le code de programme par l'accès 2 MDM Modifier la mémoire de données MPM Modifier la mémoire de programme PC Modifier le compteur de programme PRH Modifier la partie haute du registre de produit PRL Modifier la partie basse du registre de produit SBP Etablir des points d'arrêt CBP Effacer des points d'arrêt SS Exécuter pas à pas le code de programme STO Modifier le registre d'état O ST1 Modifier le registre d'état 1 TEST Sous-programme d'auto-test TM Ordre de mode transparent TMS Modifier la partie médiane supérieure de la pile TOS Modifier la partie supérieure de la pile TR REVENDICATIONS 1. Un procédé pour contrôler l'exécution d'un pro- gramme d'utilisateur par un processeur (9) sans utiliser des instructions d'interruption, caractérisé en ce qu'il com- prend les opérations suivantes: (a) on définit un premier point d'arrêt de logiciel à une première adresse dans le programme d'utilisateur par les actions suivantes: (i) on enregistre temporairement les instructions qui se trouvent à la première adresse et à l'adresse qui suit immédiatement la première adresse, et (ii) on écrit le code opération d'une première instruction d'appel à la première adresse et on écrit le code opération de la première instruction d'appel à l'adresse qui suit immédiatement la première adresse, l'argu- ment de la première instruction d'appel étant ainsi égal à son code opération; (b) on exécute le programme d'utilisa- teur jusqu'à la rencontre de la première adresse et on exécu- te le code opération de la première instruction d'appel; (c) on saute vers une adresse égale au code opération conte- nu dans l'argument de la première instruction d'appel, et on entre à cette adresse dans un sous-programme de moniteur de logiciel (47B); et (d) on exécute le sous-programme de moni- teur de logiciel (47B) par les actions suivantes: (i) on sauvegarde le contenu du compteur de programme et le contenu d'autres registres du processeur (9) correspondant au premier point d'arrêt de logiciel, (ii) on replace les première et seconde instructions respectivement à la première adresse et à l'adresse qui la suit immédiatement, et (iii) on affiche le contenu sauvegardé du compteur de programme et le contenu sauvegardé des autres registres, correspondant au premier point d'arrêt. 2. Procédé selon la revendication 1, caractérisé en ce qu'on définit un ensemble de points d'arrêt de logiciel supplémentaires conformément à l'opération (a), à un ensemble d'adresses supplémentaires respectives, avant d'exécuter l'opération (b). 3. Procédé selon la revendication 2, caractérisé en ce que le processeur est un microprocesseur (9) qui comprend une seule instruction d'interruption dans son jeu d'instruc- tions, et un utilisateur peut ainsi contrôler l'exécution du programme d'utilisateur par le processeur même lorsque le programme d'utilisateur contient des instructions d'inter- ruption. 4. Procédé selon la revendication 3, caractérisé en ce qu'on accomplit l'opération (a) sous l'effet de l'intro- duction dans le processeur, au moyen d'un terminal, d'un ordre de moniteur commandant l'établissement d'un point d'arrêt à une adresse. 5. Procédé selon la revendication 4, caractérisé en ce qu'il comprend l'opération supplémentaire, accomplie après l'opération (d), qui consiste à faire retourner le sous- programme de moniteur de logiciel (47B) à une position à laquelle ce dernier attend un nouvel ordre d'exécution par le moniteur, et sous l'effet d'un nouvel ordre d'exécution par le noniteur, qu'un utilisateur introduit au moyen du termi- nal, on répète les opérations (b) à (d) pour poursuivre l'exécution du programme d'utilisateur jusqu'à la rencontre d'une seconde adresse à laquelle un second point d'arrêt de logiciel est défini. 6. Système pour contrôler l'exécution d'un program- me d'utilisateur par un processeur (9), sans utiliser d'ins- tructions d'interruption, caractérisé en ce qu'il comprend: (a) des moyens destinés à définir un premier point d'arrêt de logiciel à une première adresse dans le programme d'utilisa- teur; (b) des moyens qui commandent au processeur (9) d'écrire le code opération d'une première instruction d'appel à la première adresse; (c) des moyens qui commandent au pro- cesseur (9) d'écrire le code opération de la première ins- truction d'appel à l'adresse qui suit immédiatement la pre- mière adresse, l'argument de la première instruction d'appel étant ainsi égal à son code opération; (d) des moyens qui commandent au processeur (9) d'enregistrer temporairement les instructions qui se trouvent à la première adresse et à l'adresse qui suit immédiatement la première adresse; (e) des moyens qui commandent au processeur (9) d'exécuter le programme d'utilisateur jusqu'à la rencontre de la première adresse, et des moyens qui commandent au processeur (9) d'exécuter le code opération de la première instruction d'appel; (f) des moyens destinés à enregistrer un sous- programme de moniteur de logiciel (47B) à une adresse égale au code opération de la première instruction d'appel; (g) des moyens qui commandent au processeur de sauter à une adresse égale au code opération qui se trouve dans l'argu- ment de la première instruction d'appel, pour entrer à cette adresse dans le sous-programme de moniteur de logiciel (47B); (h) des moyens qui commandent au processeur (9) d'exécuter la première instruction, de sauvegarder le conte- nu du compteur de programme et le contenu des autres regis- tres du processeur (9) correspondant au premier point d'arrêt de logiciel, et de replacer les première et seconde instructions respectivement à la première adresse et à l'adresse qui la suit immédiatement; et (i) des moyens des- tinés à afficher le contenu sauvegardé du compteur de pro- gramme et le contenu sauvegardé des autres registres, cor- respondant au premier point d'arrêt. 7. Système selon la revendication 6, caractérisé en ce que les moyens de définition définissent un ensemble de points d'arrêt de logiciel supplémentaires conformément à l'opération (a), à un ensemble d'adresses supplémentaires respectives, avant l'exécution du programme d'utilisateur. 8. Système selon la revendication 7, caractérisé en ce que le processeur est un microprocesseur (9) qui ne com- prend qu'une seule instruction d'interruption dans son jeu d'instructions, ce qui fait qu'un utilisateur peut contrôler l'exécution du programme d'utilisateur par le processeur même lorsque le programme d'utilisateur comprend des instructions d'interruption. 9. Système selon la revendication 6, caractérisé en ce qu'il comprend un terminal connecté au processeur (9) pour introduire dans le processeur un ordre de moniteur d'éta- blissement d'un point d'arrêt à une adresse, et un ordre de moniteur d'exécution pas à pas. 10. Système selon la revendication 6, caractérisé en ce qu'il comprend des moyens destinés à faire en sorte qu'après l'affichage, le sous-programme de moniteur de logi- ciel (47B) retourne à une position à laquelle il attend un nouvel ordre d'exécution par le moniteur, et des moyens qui réagissent à un nouvel ordre d'exécution par le moniteur, introduit par un utilisateur au moyen du terminal, en pour- suivant l'exécution du programme d'utilisateur jusqu'à la rencontre d'une seconde adresse à laquelle est défini un second point d'arrêt de logiciel. 11. Procédé pour contrôler l'exécution d'un pro- gramme d'utilisateur par un processeur (9) sans utiliser d'instructions d'interruption, caractérisé en ce qu'il com- prend les opérations suivantes: (a) on définit un ensemble de points d'arrêt de logiciel à un ensemble d'adresses pré- sélectionnées dans le programme d'utilisateur; (b) on sau- vegarde les instructions du programme d'utilisateur qui se trouvent à chacune des- adresses présélectionnées et aux adresses qui suivent immédiatement chacune des adresses pré- sélectionnées; (c) on sauvegarde la valeur de chaque adres- se présélectionnée; (d) on écrit le code opération d'une instruction d'appel à chacune des adresses présélectionnées et aux adresses qui suivent immédiatement ces adresses, sauf si l'adresse présélectionnée est égale à la valeur courante du contenu du compteur de programme du programme d'utilisa- teur; (e) on exécute le programme d'utilisateur jusqu'à la rencontre d'un point d'arrêt suivant, et on sauvegarde le contenu du compteur de programme et le contenu d'autres registres du programme, correspondant à ce point d'arrêt; (f) on écrit à son adresse d'origine chaque instruction sau- vegardée; et (g) on affiche les contenus sauvegardés du compteur de programme et des registres. 12. Système pour contrôler l'exécution d'un pro- gramme d'utilisateur par un processeur (9) sans utiliser d'instructions d'interruption, caractérisé en ce qu'il com- prend: (a) des moyens destinés à définir un ensemble de points d'arrêt de logiciel à un ensemble d'adresses présé- lectionnées dans le programme d'utilisateur; (b) des moyens destinés à sauvegarder les instructions du programme d'uti- lisateur qui se trouvent à chacune des adresses présélec- tionnées et à l'adresse qui suit immédiatement chaque adres- se présélectionnée; (c) des moyens destinés à sauvegarder la valeur de chaque adresse présélectionnée; (d) des moyens destinés à écrire le code opération d'une instruction d'appel à chacune des adresses présélectionnées et à l'adres- se qui la suit immédiatement, sauf si l'adresse présélec- tionnée est égale à la valeur courante du contenu du compteur de programme du programme d'utilisateur; (e) des moyens destinés à exécuter le programme d'utilisateur jusqu'à la rencontre d'un point d'arrêt suivant, et à sau- vegarder le contenu du compteur de programme et le contenu d'autres registres du programme, correspondant à ce point d'arrêt; (f) des moyens destinés à écrire à son adresse d'origine chaque instruction sauvegardée; et (g) des moyens destinés à afficher les contenus sauvegardés du compteur de programme et des registres.