Southern Machinery provides professional SMT peripheral equipment.

manuel de référence du débogueur pour le contrôleur de mouvement radisis de la machine smt

2023-02-09 17:51:23

Guide de l'utilisateur UBUG (manuel de référence du débogueur)

pour le contrôleur de mouvement Radysis

 

 Le
moniteur UBUG est un progiciel autonome conçu pour permettre
l'évaluation et le débogage du
circuit imprimé du contrôleur de mouvement basé sur UIMC 68EC030. Il a la capacité de charger et d'exécuter du code utilisateur et comprend
un assembleur/désassembleur conçu pour un patchwork rapide de programmes. Le
moniteur fonctionne dans un mode piloté par une commande interactive de l'utilisateur signifié par
l'invite UIC>. La ligne de commande entrée après cette invite
détermine l'opération à effectuer.

 

 

 

 

 

 

 

 

 

         MONITEUR UBUG

 

TABLE DES MATIÈRES

 

1. INFORMATIONS GÉNÉRALES  

         1.1 Description de l'UBUG………………….. 3

 

2. LE JEU DE COMMANDES UBUG

         2.1 Présentation………………………… 3

         2.2 Auto Null (an)……………………… 4

         2.3 Assembleur/Désassembleur (as) ………….. 4

         2.4 Bloc de remplissage de la mémoire (bf)…………….. 6

         2.5 Bloc de mouvement de mémoire (bm) …………….. 6

         2.6 Point de rupture (br)…………………………….. 6

         2.7 Recherche de bloc (bs)……………………. 7

         2.8 Contre Test (ct)………………. 7

         2.9 Essai DAC16, ADC8 (dac16t)……………. 7

         2.10 Conversion de données (dc)…………………. 8

         2.11 Aller (aller)…………………………….. 8

         2.12 Aide (?/il/aide)…………………….. 8

         2.13 Accès E/S (io)……………….. 8

         2.14 Charger les enregistrements S (lo)………………….. 9

         2.15 Affichage de la mémoire (md)………………….. 9

         2.16 Mémoire Modifier (mm)…………………………… 10

         2.17 Test de mémoire (mt)………………….. 10

         2.18 Affichage du registre (rd)………………… 10

         2.19 Enregistrer Modifier (rm)…………………. 11

         2.20 Définition du symbole (sd)……………………… 11

         2.21 Essai – Diagnostic (essai)………………. 11

         2.22 Mode Transparent™………………… 12

         2.23 Traçage (tr)………………………….. 12

 

3 UTILISATION DU MONTEUR/DEMONTEUR UNE LIGNE

         3.1 Présentation ………………………. 12

         3.2 Saisie et modification du programme source …. 12

       
 3.3 Saisie d'une ligne source……………….. 13          
 3.4 Saisie d'un changement d'instruction de débit ……… 14

       
 3.5 Saisie des listes de registres ……………… 15          
 3.6 Saisie des données immédiates en virgule flottante … 16          
 3.7 Saisie des instructions MMU ……………. 17

 

 

 

 

1. INFORMATIONS GÉNÉRALES

 

1.1 DESCRIPTION DE L'UBUG

 Le
moniteur UBUG est un progiciel autonome conçu pour permettre
l'évaluation et le débogage du
circuit imprimé du contrôleur de mouvement basé sur UIMC 68EC030. Il a la capacité de charger et d'exécuter du code utilisateur et comprend
un assembleur/désassembleur conçu pour un patchwork rapide de programmes. Le
moniteur fonctionne dans un mode piloté par une commande interactive de l'utilisateur signifié par
l'invite UIC>. La ligne de commande entrée après cette invite
détermine l'opération à effectuer.

 

2. LE JEU DE COMMANDES UBUG

 

 2.1 PRÉSENTATION

 Cette
section explique les commandes du moniteur UBUG et leur syntaxe associée.
Le tableau 2.1 résume les commandes disponibles et montre la section où
la commande est expliquée plus en détail.

 

TABLEAU 2.1 COMMANDES DU MONITEUR UBUG

   

Commande/Mnémonique

Nom

Section

un

Nul automatique

2.2

comme

Assembleur/Désassembleur

2.3

petit ami

Bloc de remplissage de la mémoire

2.4

BM

Bloc de mouvement de mémoire

2.5

Br

Point d'arrêt

2.6

bs

Bloc de recherche de mémoire

2.7

ct

Test de compteur

2.8

dac16t

Essai DAC16, ADC8

2.9

cc

Conversion de données

2.10.

aller

Aller

2.11

?/il/aide

Aider

2.12

io

Accès IO

2.13

lo

Charger les enregistrements S

2.14

Maryland

Affichage de la mémoire

2.15

millimètre

Modifier la mémoire

2.16

mt

Test de mémoire

2.17

rd

Affichage du registre

2.18

rm

S'inscrire Modifier

2.19

Dakota du Sud

Symbole Définir

2.20.

test

Test – Diagnostique

2.21

tm

Mode transparent

2.22

tr

Trace

2.23

     

 

 

 

 

 La ligne de commande est composée de :

 <COMMAND IDENTIFIER> : spécifie quelle commande (ex. br )

 <SP> :   au moins un espace

  LISTE D'OPTIONS : une option peut utiliser un délimiteur (-) avec des options si des options autres que celles par défaut
sont autorisées et sont utilisées. (ex.
[<-r>])

  <SP> : au moins un espace

  ARGUMENTS : tous les arguments requis spécifiés par la commande séparés
    par des virgules/espaces, comme indiqué dans la
description de la commande. (ex. <ADDR,ADDR>)

 

 où "<>" inclut les symboles requis sur la ligne de commande
et "[<>]" inclut les symboles facultatifs sur la
ligne de commande. Notez que dans les exemples ci-dessus, l'option -r était un exemple de
symbole facultatif et que les champs ADDR sont des exigences sur la
ligne de commande. Les options disponibles avec une commande donnée sont
expliquées en détail dans la section qui décrit cette commande. Le moniteur n'est
pas sensible à la casse pour les entrées provenant du terminal. Toutes les entrées du
terminal sont converties en minuscules avant d'être utilisées en interne (sauf
le texte suivant un délimiteur de texte ; voir TEXTE ci-dessous). Les arguments d'une
commande donnée sont décrits à l'aide des symboles suivants :

 

 
 <EXP> : Une expression peut être n'importe quelle expression numérique qui peut
être évaluée en utilisant uniquement les opérateurs arithmétiques + et –.

 Ex. 1000

    Ex. 1+3

 

 Remarque : Les nombres peuvent être précédés d'un indicateur de base si la valeur par défaut
(hexadécimal) n'est pas souhaitée. Ces désignateurs sont présentés ci-dessous dans le tableau
2.2 :

 

TABLEAU 2.2 DÉSIGNATEURS DE BASE

Base

Désignateur

Hexadécimal

$

Décimal

&

Octale

@

Binaire

%

 

 

 <ADDR> : le champ d'adresse est une expression valide. Remarque : Ce
champ d'adresse ne doit pas être confondu avec les
adresses source et destination requises à l'aide de l'assembleur/désassembleur.

 

  <COUNT> : le champ de comptage est une expression valide précédée d'un COUNTDEL (délimiteur de comptage, c'est-à-dire " :")

 Ex. :100

 

 <RANGE> : une plage d'emplacements de mémoire désignés par ADDR,ADDR ou ADDR:COUNT.

 Ex. 0,100

    Ex. 0:50

 

  <TEXT> : une chaîne ASCII de 255 caractères maximum précédée d'un TEXTDEL (délimiteur de texte, c'est-à-dire " ; ")

 Ex. ; exemple de texte

 

  <TAILLE> : peut être :

    octet (8 bits) ====> -b

    mot (16 bits) ====> -w

    long (32 bits) ====> -l

**Remarque : ====> signifie « est représenté par » ou « renvoie »

 

 <DATA> : les données peuvent être n'importe quelle expression valide.

 

  <MASQUE> : Un masque peut être n'importe quelle expression. Après avoir évalué l'
expression, les 0 ne s'en soucient pas. Un masque est parfois
utilisé pour qualifier

 

 <DONNEES>. Voir la section 2.6 pour un exemple d'utilisation.

 

2.2 NULL AUTO

 un <AXE>

 

 La fonction auto null effectue une annulation du décalage d'origine du CNA 16 bits de l'axe spécifié.

 

 Exemples d'utilisation :

 an 1 (nuls axe un)

 

2.3   MONTAGE/DÉMONTAGE

 comme <ADDR>

 

 L'assembleur/désassembleur est appelé à l'adresse donnée et
désassemble le code objet à cet endroit. L'utilisation de l'
assembleur/désassembleur est décrite en détail au chapitre 3.

 

2.4   BLOC DE REMPLISSAGE MEMOIRE

 bf [<TAILLE>] <GAMME> <DONNEES>

 

 La commande de remplissage de bloc remplit la plage de mémoire spécifiée avec les
données répertoriées. Si l'option de taille n'est pas spécifiée, la taille par défaut utilisée
est word. Si un multiple de <SIZE> de <DATA> ne
tient pas uniformément dans <RANGE>, la commande laisse le dernier
mot partiel ou long mot inchangé.

 Exemples d'utilisation :

         bf 100, 110 et 10

  bf 100: 8 & 10

 bf -w 100:8   un

 bf -l 100,110 a000a

**Remarque : tous ces exemples effectuent le même remplissage de mémoire.

        (c'est-à-dire 00000100 $ : 000 $a 000 $a 000 $a 000 $a 000 $a 000 $a

 $0000010C : $000a $000a $0000 $0000 $0000 $0000 )

 

2.5   BLOC DE DEPLACEMENT MEMOIRE

 bm [<TAILLE>] <GAMME> <ADDR>

 

 La commande de déplacement de bloc permet à l'utilisateur de copier des segments de mémoire à
différents emplacements de la mémoire. L'exécution de cette commande ne
détruit pas la version d'origine à moins que l'emplacement déplacé vers <ADDR>
soit dans la plage <RANGE> du code en cours de copie. L'
option de taille n'est disponible que lorsque la plage est décrite comme
<ADDR>:<COUNT> . Si la plage est décrite avec le
mode <ADDR>,<ADDR>, la taille par défaut est en octets. Le
champ de taille représente le transfert de taille utilisé pour accomplir le
déplacement de mémoire.

 

         Exemples d'utilisation :

         bm 1000,2000   10000

 bm 1000:800 10000

 bm -l 1000:400 10000 **Remarque : cette variation exécute la plus rapide

**Remarque : tous ces exemples effectuent le même déplacement de mémoire.

 

2.6   POINT D'ARRÊT

  Br

  br <ADDR>

  br <ADDR> <:COUNT>

  br -r [<ADDR>]

 br-r

 

 La commande breakpoint permet à l'utilisateur de lister, insérer ou supprimer
des points d'arrêt dans le code cible. Cela permet à l'utilisateur d'arrêter l'exécution d'un
programme et de revenir à l'environnement de surveillance lorsque l'
<ADDR> spécifié est prérécupéré. Les différentes utilisations de cette commande sont
résumées ci-dessous :

 

         br liste tous les points d'arrêt connus

 br <ADDR>     insère un point d'arrêt à cette adresse

 br <ADDR> <:COUNT> insère un point d'arrêt à cette adresse, cependant,             ne revenez à l'environnement de surveillance qu'après avoir rencontré le
       point d'arrêt <COUNT> nombre de fois.

  br -r [<ADDR>] supprimer le point d'arrêt à cette adresse

  br -r supprimer tous les points d'arrêt

 

2.7   RECHERCHE DE BLOCS

  bs [<TAILLE>] <GAMME> <DONNEES>

 bs [<TAILLE>] <GAMME> <DONNEES> <MASQUE>

   

 La commande de recherche de bloc permet à l'utilisateur de trouver un motif spécifique
dans la mémoire. La zone de recherche peut s'étendre au-delà de la <RANGE>
spécifiée si un motif est démarré dans la <RANGE>. Il existe deux
principaux types de recherches :

       

 bs [<SIZE>] <RANGE> <DATA> recherche dans la plage une correspondance exacte de <DATA>.

  bs [<SIZE>] <RANGE> <DATA> <MASK> recherche
dans la plage tout motif qui correspond à <DATA>
où il y a un « 1 » dans la représentation binaire du
masque.

 

 Ex. Avec la mémoire à l'emplacement $100 comme indiqué ci-dessous, l'exécution

 "bs 100 118 $ 1234 $ ffbf" ====>  

         Adresse de départ : 00000100 $

         Adresse de fin : 00000117 $

         Trouvé à : 00000110 $ : 1 234 $

         Trouvé à : 00000114 $ : 1 274 $

 Mémoire pour l'exemple ci-dessus :

00000100 $ : 0000 $ 0000 $ 0000 $ 0000 $ 0000 $ 0000 $

 $0000010C : $0000 $0000 $1234 $0000 $1274 $0000

 

2.8 CONTRE-TEST

 ct

 

 La commande de test de compteur effectue un test de diagnostic sur les compteurs 4 axes et les informations de réussite/échec sont renvoyées.

 

 

2.9 TEST DAC16, DAC8

 dac16t <AXE #>

 

 La commande dac16t effectue un test de diagnostic du CNA 16 bits et du
CAN 8 bits pour l'axe spécifié en utilisant la fonction de bouclage de diagnostic
de l'UIMC. Les informations réussite/échec sont renvoyées.

 

2.10 CONVERSION DES DONNEES

 dc <EXP>

 

 La commande de conversion de données permet à l'utilisateur d'évaluer une
expression d'entrée et de déterminer son équivalent hexadécimal et décimal.

 

 Exemples d'utilisation :

 **REMARQUE : Les symboles suivants ont été définis précédemment afin

     à utiliser dans les exemples ci-dessous :

     Ex 1. utilise   /start= 0

     Ex 2. utilise   /start= – 18 $

     Ex 3. utilise /finish= 10000 et /start=$10000

     (voir rubrique 2.17 )

          Ex. 1 ms 17$+/début ====> 17$ = &23  

  Ex. 2 dc $17+/start ====> NON SIGNÉ : $FFFFFFFF =
&4294967295 SIGNÉ
: -$1 = -&1

 Ex. 3 ms $/finir-/début ====> 10000 $ = 65536

 

2.11   ALLER aller [<ADDR>]

 

 La commande go permet à l'utilisateur d'exécuter des programmes cibles. Si une
adresse n'est pas spécifiée sur la ligne de commande, la valeur PC actuelle
est utilisée. Cette valeur est soit :

 1.) la valeur PC initialisée si aucun code cible n'a été exécuté.

 2.) la dernière valeur du PC utilisé dans l'exécution du code cible.

 3.) la valeur placée dans le registre du PC par une commande RM (Register Modify voir section 2.16 ).

 Si une adresse est incluse sur la ligne de commande, le PC est modifié
pour être l'adresse spécifiée. et l'exécution commence à cette adresse. Dans
les deux cas, l'état du registre auquel le microprocesseur est initialisé
, avant d'exécuter le code cible à cet emplacement, peut être visualisé en
exécutant une commande rd (voir section 2.15).

 

2.12   AIDE

  ? [<symbole>]

  il [<symbole>]

 aide [<symbole>]

 

 La commande help permet à l'utilisateur d'afficher une liste de commandes autorisées
et la syntaxe qui leur est associée. Les symboles utilisés pour décrire l'
utilisation de la commande peuvent également être recherchés.

 Exemples d'utilisation :

 ?,he ou help ====> renvoie une liste complète de toutes les commandes utilisées

  ? as ====> AS <adresse> aide adresse ====> <numéro>

 le nombre ====> <hex> || <déc> || <oct> || <bin> || <symbole>

** Remarque : <nombre> peut également être une expression

 

2.13 ACCÈS IO

 io

 

 La commande d'accès IO permet à l'utilisateur d'accéder à diverses options du
contrôleur de mouvement UIMC. Lors de l'émission de la commande IO, l'utilisateur se verra
présenter la liste de choix suivante :

 Menu Interface E/S :

  i - Afficher les entrées (le débogueur affiche l'état actuel des entrées numériques)

 o - Modifier les sorties (le débogueur permet à l'utilisateur de modifier les sorties)

 c - Modifier les compteurs (le débogueur affiche l'état actuel des compteurs et permet à l'utilisateur de modifier le contenu)

 r - Modifier les relais (le débogueur permet à l'utilisateur de modifier l'état des relais)

 x - Modifier les DAC 16 bits (le débogueur permet à l'utilisateur de modifier les sorties DAC 16 bits)

 y – Modifier les DAC 8 bits (le débogueur permet à l'utilisateur de modifier les
sorties DAC 8 bits) z – Afficher les ADC 8 bits (le débogueur affiche l'état actuel des
ADC)

 

Après avoir sélectionné l'un des éléments ci-dessus, l'utilisateur sera invité de manière appropriée.

 

2.14 CHARGER ENREGISTREMENT S

 lo [<port>] [<OFFSET>] ;<TEXTE>

 

 La commande load permet à l'utilisateur de télécharger des S-Records depuis le
système hôte. Si un décalage est présent sur la ligne de commande, l'adresse cible
est le décalage ajouté à l'adresse déterminée par le S-Record.
En mode normal la commande envoie le <TEXT> au delà du ";" à l'
HÔTE. Il s'attend ensuite à ce que l'HÔTE commence à envoyer des S-Records au
terminal. Si l'option 't' est utilisée non ; est nécessaire et le débogueur
s'attend à ce que le terminal commence à envoyer un S-Record.

 Exemples d'utilisation :

          lo ;chat ubug.mx

**Remarque : La commande "cat" est une commande UNIX qui concatène
puis imprime les fichiers spécifiés à l'aide de la sortie standard.
Cela envoie effectivement le contenu du fichier au terminal. Le
moniteur charge ensuite le contenu des S-Records dans le fichier aux
adresses déterminées par les S-Records via le port Host.

.

 

          lo a0000 ;cat ubug.mx

**Remarque : Cette commande télécharge le même fichier S-Record utilisé dans
le premier exemple, sauf qu'il est téléchargé dans la mémoire à l'
adresse déterminée par le S-Record + $a0000 (c'est-à-dire que le décalage est
ajouté).

 

 parcelle

**Remarque : cette commande utilise 't' pour le terminal du port de chargement S-Record.

 

2.15   AFFICHAGE DE LA MÉMOIRE

  md [<TAILLE>] <adresse>

  md [<TAILLE>] <GAMME>

 md -di <adresse>

 

 La commande d'affichage de la mémoire permet à l'utilisateur de visualiser la mémoire. La taille
utilisée pour afficher la mémoire est déterminée par l'option de taille. Si aucune
option n'est utilisée, la valeur par défaut est word. Si la plage dépasse la
capacité de l'écran, la sortie vers l'écran est suspendue jusqu'à ce qu'une touche soit enfoncée.

       

  Exemples d'utilisation :

 md-l 100 110

  md-l 100:4

  md 100:8

 md-di 100  

**Remarque : Cette commande commence à désassembler la mémoire à

  ce lieu.

 

2.16 MODIFICATION DE LA MÉMOIRE

  mm [<TAILLE>] [<vérifier>] <ADDR>

 mm <CONTRÔLE>

 

 La commande de modification de la mémoire permet à l'utilisateur de visualiser et de modifier la mémoire.
La taille utilisée pour afficher la mémoire est déterminée par l'option de taille.
La taille par défaut est mot. L'option d'écriture seule est déterminée par l'
option de vérification. La valeur par défaut est lecture/écriture et un 'n' est utilisé pour l'écriture
uniquement. La mémoire est affichée en commençant à l'adresse spécifiée suivie
d'un '?' rapide. L'utilisateur peut taper un <exp> pour remplacer cette
valeur de mémoire ou appuyer sur Entrée pour afficher la valeur de mémoire suivante. Pour quitter la
commande, tapez ". <cr> » (point <retour chariot>). Les autres
caractères <CONTROL> disponibles sont résumés ci-dessous dans le tableau 2.3 :

TABLEAU 2.3 CARACTÈRES DE CONTRÔLE

Désignateur de caractère de contrôle  

– Emplacements de mémoire de sauvegarde <EXP> <EXP>

+ <EXP> avance ” ” “

= <NOMBRE> ne pas avancer N'avancera pas à l'emplacement de mémoire suivant

 

         Exemples d'utilisation :

 mm -l 100 ====> $00000100 $00000000 ?

 mm 100 ====>      $00000100 $0000 ?

 (c'est-à-dire utilise la taille de "mot" par défaut)

 mm n 100 ====> $00000100 ?

 (c'est-à-dire ne lit pas à partir de l'emplacement)

 

2.17 TEST DE MÉMOIRE

 mt <début> <fin>

 

 Le test de mémoire effectue un test de mémoire bit par bit sur la plage de RAM spécifiée et les informations de réussite/échec sont renvoyées.

 

2.18   AFFICHAGE DU REGISTRE

 rd

 rd -f Remarque : Les registres du coprocesseur sont affichés s'ils sont présents

 

 La commande d'affichage des registres permet à l'utilisateur de visualiser le contenu des registres du mpu/fpu.

 

2.19   S'INSCRIRE MODIFIER

 rm [<REGISTRER> [<Nouvelle valeur>]]

 

 La commande RM permet à l'utilisateur de modifier le contenu des registres de la mpu.

 Exemples d'utilisation :

 Pour modifier la valeur PC :

 rm pc 3000 ====> change la valeur du PC à 3000

ou

 rm ====> Quel registre ?

     pc ====>   PC=00004000NOUVELLE VALEUR ?

       3000 ====> change la valeur du PC à 3000

ou

 rm pc ====> PC=00004000NOUVELLE VALEUR ?

      3000 ====> change la valeur du PC à 3000

 

2.20   DÉFINITION DU SYMBOLE

  sd [<SYMBOLE> <EXP>]

 sd -r <SYMBOLE>

 

 La commande de définition de symboles permet à l'utilisateur de définir des symboles. Ces
symboles peuvent ensuite être utilisés dans des expressions. L'utilisation d'un symbole dans une
expression entraîne le remplacement du symbole par l'expression
qui a été utilisée pour le définir. Une fois défini, le symbole est disponible
jusqu'à ce que le moniteur soit réinitialisé. Si un symbole est défini plusieurs fois, le
moniteur utilise la première définition.

 

         Exemples d'utilisation :

 sd ====> liste les symboles déjà connus

  sd /reset 10000 ====> définit /reset à 10000 $ chaque fois qu'il est
utilisé dans une expression. sd /start -$18 ====> définit
/start comme étant -$18 chaque fois qu'il est utilisé dans une expression. sd -r
/start ====> supprime la première définition de /start de la
liste

**REMARQUE : les symboles qui ont été définis à l'aide de la commande sd
peuvent être utilisés dans n'importe quelle expression. Un exemple de ceci est d'utiliser un
symbole défini pour entrer le code source dans l'
assembleur (c'est-à-dire bsr /startsub après avoir défini /startsub).

 

2.21 ESSAI – DIAGNOSTIC

 tester [<LOOP #>]

 

 La commande de test lance une série de tests de diagnostic consistant en
une fonction d'annulation automatique, un test de compteur, un test de RAM et un test DAC16/ADC8 et
renvoie des informations de réussite/échec. Le nombre de fois que le test de diagnostic
est effectué est déterminé par le numéro de boucle spécifié. Si aucune boucle # n'est
spécifiée, la commande cycle indéfiniment.

 

2.22 MODE TRANSPARENT

 tm

 

 La commande de mode transparent place l'utilisateur en mode transparent en
établissant une connexion logicielle entre l'HÔTE et le TERMINAL.
Le mode transparent prévaut sur la communication normale entre le TERMINAL et
le débogueur. Dans ce mode, toutes les entrées du clavier sont transmises directement
à l'HÔTE. Les réponses HOST, à leur tour, sont renvoyées à l'écran.
La frappe d'un CTRL A renvoie l'utilisateur à l'environnement du moniteur.

 

2.23   RECHERCHE

 tr [<ADDR>][<COUNT>]

 

 La commande trace permet à l'utilisateur de suivre le code cible et
d'observer les registres après avoir exécuté la ligne de commande. Si count est
spécifié, le microprocesseur exécute le nombre <COUNT> d'
instructions avant de revenir à l'environnement de surveillance. La trace commence
à partir de l'<ADDR> répertorié sur la ligne de commande ou à partir du PC actuel
si un <ADDR> n'est pas inclus. L'instruction de trace peut être
poursuivie en appuyant sur un retour chariot. Pour sortir, un "." doit être saisi.

 

         Exemples d'utilisation :

          tr   ====> trace 1 instruction depuis le PC courant

 tr :10   ====> exécute 10 instructions après le PC actuel puis revient à
l'environnement du moniteur

 tr 1000====> trace 1 instruction à partir de 1000 $

 

 

3.0 UTILISATION DU MONTEUR/DÉSASSEMBLEUR UNE LIGNE

 

3.1 PRÉSENTATION

 Inclus dans le moniteur UBUG est une commande assembleur/désassembleur
qui peut être exécutée comme détaillé dans la section précédente. Cet
assembleur/désassembleur permet à l'utilisateur de modifier le code cible. Chaque
ligne source saisie par l'utilisateur est entrée en mémoire à l'
adresse affichée. Cette ligne est ensuite désassemblée afin que l'utilisateur puisse
vérifier le code réel entré en mémoire. Si aucun changement n'est souhaité, un
<CR> déplace l'utilisateur vers l'opcode suivant en mémoire.

 ATTENTION : Cet assembleur/désassembleur n'insère pas de code dans le
programme source ; il écrase simplement la mémoire à cet emplacement. En
conséquence, un correctif de programme qui nécessite l'insertion de code peut être accompli
en premier code de déplacement de bloc pour libérer une zone d'insertion, puis en
l'insérant dans cette zone.

 

3.2 ENTRER ET MODIFIER LE PROGRAMME SOURCE

 Afin d'entrer et de modifier le code source, la commande as doit être
exécutée comme détaillé dans la section 2.2 (c'est-à-dire as <ADDR>). Cela
place l'utilisateur dans la routine Assembleur/Désassembleur.

Le tableau 3.1 résume les commandes pouvant être exécutées dans cette routine :

TABLEAU 3.1 SOUS-COMMANDES D'ASSEMBLAGE/DÉSASSEMBLAGE

Désignateur de commande

SAUVEGARDE <EXP> – <EXP>

AVANCE <EXP> + <EXP>

FINIR .

AIDER ?

STEP PAST retour chariot

DÉFINIR LA CONSTANTE DC #<EXP>

 

**Remarque : Exécuter un '?' tandis que dans l'assembleur/désassembleur renvoie
le DEVICE pris en charge par l'assembleur/désassembleur.

 

3.3 ENTRER UNE LIGNE SOURCE

 Après avoir exécuté une commande as <ADDR>, l'assembleur/désassembleur
revient avec le désassemblage du code trouvé à cet endroit. À
ce moment, l'utilisateur peut exécuter une commande assembleur indiquée dans la section 3.2
ou saisir la ligne source qui doit remplacer le
code source affiché. Lors de la saisie de la source, les modes d'adressage efficaces standard de MOTOROLA
sont utilisés. Ces modes sont résumés ci-dessous dans le tableau 3.2 :

 

TABLEAU 3.2 MODES D'ADRESSAGE EFFECTIFS DU MONTEUR/DÉMONTEUR

 

Syntaxe du mode d'adressage effectif

Enregistrer Direct Dn

Registre d'adresse direct An

Registre d'adresse indirect (An)

Registre d'adresse indirect avec Postincrément (An)+

Registre d'adresse indirect avec Predecrement -(An)

Registre d'adresse indirect avec déplacement (d16,An)

Registre d'adresse indirect avec Index (d8) (d8,An,Xn.SIZE*SCALE)

Registre d'adresse indirect avec index (disp de base) (bd,An,Xn.SIZE*SCALE)

Mémoire indirecte Post-indexée ([bd,An],Xn.SIZE*SCALE,od)

Mémoire indirecte Pré-indexée ([bd,An,Xn.SIZE*SCALE],od)

PC indirect avec déplacement (d16,PC)

PC indirect avec indice (d8) (d8,PC,Xn.SIZE*SCALE)

PC indirect avec index (bd) (bd,PC,Xn.SIZE*SCALE)

Mémoire PC indirecte Post-indexée ([bd,PC],Xn.SIZE*SCALE,od)

Mémoire PC indirecte Pré-indexée  
 ([bd,PC,Xn.SIZE*SCALE],od) Adresse courte absolue
       (xxx).W

Adresse longue absolue (xxx).L

Adresse absolue xxx optimise (bwl)

Données immédiates #xxx

 

 Lors de l'utilisation des modes indexés POST ou PRE, les champs peuvent être ignorés à l'aide d'une virgule. Un exemple est illustré ci-dessous :

 Ex. andi #12,([,],,) ====> andi.b #$12,([$0,ZA0],ZD0.W*1,$0)

 

D'autres exemples de lignes source sont présentés ci-dessous :

        Ex. ori.l #12,(a1) ====> ori.l #$12,(a1)

 Ex. addq #1,(a1) ====> addq.b #$1,(a1)

 

 Il n'y a que des capacités de filtrage d'erreurs limitées incluses dans le moniteur. Des exemples de ceci sont montrés ci-dessous :

 Ex. jmp (123).w ====> jmp ($123).W

**Remarque : lorsqu'il est exécuté, cela entraîne une erreur de bus.

   

 Ex. bsr (123) ====>

 ERREUR 10:changement illégal de flux ===> bsr (123)

     Remarque : L'instruction bsr vérifie les

           changements de débit.

 REMARQUE : le débit ne peut pas être modifié en une adresse impaire.

 Les chiffres supérieurs des données ne sont PAS tronqués lorsqu'une incompatibilité entre la taille
et les données immédiates est trouvée si l'option de taille d'octet ou de mot a été
spécifiquement entrée. Si l'option de taille longue est spécifiée et que les données
dépassent cette plage, les chiffres supérieurs SONT tronqués.

 

 Ex. addi.b #12345678,(a1) ====>

 ERREUR 11 : erreur immédiate d'option de données/taille ===> addi.b #12345678,(a1)

 

 Ex. addi.l #123456789,(a1) ====> addi.l #$23456789,(a1)

 Ex. addi #123456789,(a1) ====> addi.l #$23456789,(a1)

   (par défaut à l'option longue)

      tronqué————–^

 

 Les chiffres supérieurs des données sont tronqués sur les commandes qui ont un
champ limité dans l'opword pour stocker les données immédiates. Des exemples de ceci sont
présentés ci-dessous.

 Ex. addq #10,(d0) =====> addq.b #$0,(d0)

 Ex. trap #10 =====> trap #$0 l'entrée est hexadécimale par défaut

 Ex. piège #&10 =====> piège #$A

 

3.4 SAISIE DES INSTRUCTIONS DE CHANGEMENT DE FLUX

 Étant donné que l'assembleur/désassembleur n'utilise pas d'étiquettes, toutes les instructions
qui utilisent <étiquette> comme mode d'adressage effectif doivent voir leur
déplacement déterminé. S'il est initialement inconnu, l'espace pour ce
déplacement doit être réservé, puis l'utilisateur doit revenir et
saisir le déplacement. Une fois le déplacement déterminé, il
peut être entré comme indiqué dans l'exemple suivant :

 

 Ex. Dans cet exemple, l'emplacement de l'instruction cible d'une branche
est connu pour être 100 000 $ et un BRA est nécessaire à l'emplacement 0. Après
avoir exécuté "AS 0" et obtenu le désassemblage trouvé à 0, l'utilisateur
peut taper :

  BRA 100000 ou BRA (100000) ou BRA.l #ffffe

 

 Le mode d'adressage absolu peut être utilisé si l'adresse cible d'une
branche est connue (comme dans les 2 premiers exemples) ou le déplacement (dernier
exemple) peut être saisi en utilisant le mode d'adressage immédiat des données.

 

   ATTENTION : Dans certains cas, des résultats inattendus peuvent se produire lors de l'utilisation

 modification des instructions de flux. Ces cas sont résumés ci-dessous

 avec des exemples.

 

Ex.
1 Si le cas dégénéré d'une instruction de branchement est utilisé (c'est-à-dire
en essayant d'utiliser un branchement court pour se brancher à l'instruction suivante),
l'assembleur assemble par erreur cette option .b. Cependant, comme le
déplacement est nul, il s'agit d'un opcode .w et le désassembleur
affiche correctement ce fait à l'utilisateur.

 

  00004000 $ non ? bra.b ====> donne un assemblage INCORRECT

 

 Ex. 2 Si l'utilisateur tente de forcer une
instruction de branche de taille particulière et que la branche réelle nécessite un déplacement supérieur à celui
réservé, l'assembleur affiche un message d'erreur : "ERR0R 16 : OUT OF
DISPLACEMENT RANGE".

 

 $00004000 non ?bra.w (100000)

 

Une
façon de s'assurer que cela ne se produise pas est de ne pas saisir d'option de taille. Cela
permet à l'assembleur de choisir la bonne taille pour le déplacement.

 

3.5 ENTRÉE DANS LES REGISTRES et LISTES DE REGISTRES

 L'instruction de déplacement de registres multiples (movem) utilise une liste de registres comme
adresse effective. Cette liste peut être saisie selon la
méthode suivante :

 

 Ex. a0 ====> registre d'adresse unique

   d3 ====> registre de données unique

   a0-a3     ====> série de registres

   a0-a3/a7 ====> combinaison des exemples précédents

   a0-a7/d0-d7 ====> tous les registres

 

 Si la prise en charge du coprocesseur est spécifiée, les registres à virgule flottante

peut être saisi comme indiqué ci-dessous :

 

 Ex.   fp0 ====> registre à virgule flottante unique

   fp0-fp2   ====> série de registres

   fp0-fp3/fp7 ====> combinaison des exemples précédents

 

 De nombreuses commandes nécessitent l'entrée de registres autres que
les registres de données ou d'adresses. Les tableaux 3.3 montrent les listes des registres
utilisés et les abréviations acceptées par l'assembleur :

  

TABLEAU 3.3 REGISTRES 68030 (registres MMU non disponibles sur 68EC030)

Syntaxe du nom  

Pointeur de pile utilisateur USP

Registre d'état SR

Registre des codes de condition CCR

Compteur de programmes PC

Pointeur de pile maître MSP

Interrupt Stack Pointer ISP

Registre de rupture de vecteur VBR

Registre de code de fonction source   SFC

Registre de code de fonction de destination   DFC

Registre de contrôle de cache CACR

Registre d'adresses de cache CAAR

Registre de pointeur racine CPU CRP

Registre de pointeur racine superviseur   SRP

Registre de contrôle des traductions TC

Registre de traduction transparent 0   TT0

Registre de traduction transparent 1   TT1

Registre d'état MMU PSR

 

TABLEAU 3.4 REGISTRES EN POINT FLOTTANT (Disponible si le coprocesseur est présent)

Syntaxe du nom

Registre de contrôle à virgule flottante FPCR

Registre d'état à virgule flottante FPSR

Inst. virgule flottante Registre d'adresses   FPIAR

Registre de données à virgule flottante FP0-FP7

 

3.6 SAISIE/ÉVALUATION DES DONNÉES IMMÉDIATES EN POINT FLOTTANT

 Les données immédiates à virgule flottante doivent être saisies à l'aide d'un point décimal
avec au moins un (1) chiffre devant la décimale (même s'il s'agit d'
un « 0 »). Ex. 0,0012. Étant donné que le compilateur C utilisé n'était pas basé sur la
version préliminaire proposée de ANSI C, le logiciel est incapable d'
effectuer «l'assemblage» de données immédiates étendues avec une
précision étendue. Le moniteur effectue la conversion correcte jusqu'à la double
précision et place ce résultat dans un format étendu. Si le
compilateur utilisé se conforme à l'autorisation d'un
type 'long double', le changement du type de la variable 'weight' dans la
routine autorisée (dans le fichier asm68.c) de double à long double devrait fournir
la précision supplémentaire. Exemples de données immédiates à virgule flottante présentées
ci-dessous :

 

 Ex. fmove.s #5.0,fp0 ====> fmove.s 1_400000_E_2,FP0

 

 Le format sur le désassemblage est le champ entier
part_fraction_E_exposant, où les bits de fraction représentent la pondération de
1/2 ,1/4,….etc. de gauche à droite. Les bits d'exposant
représentent la puissance non biaisée à laquelle 2 doit être élevé. Une conversion en
décimal peut être accomplie en évaluant :

 

 entier + fraction évaluée x 2^champ exposant

 

 Dans l'exemple ci-dessus, cela équivaut à :

    (1 + 0,25) × 2^2 = 5,0

 

REMARQUE : Le moniteur utilise le mode d'arrondi vers zéro dans l'assembleur lors de l'assemblage de données immédiates à virgule flottante.

 

3.7 SAISIE DES INSTRUCTIONS MMU ( Non disponible sur le 68EC030 )

 L'instruction MMU ne doit PAS être entrée avec un descripteur de taille. L'assembleur utilise par défaut la taille correcte.

 Ex. pmove (a0),tt1 ;assemble

       pmove.l (a0),tt1 ;ne s'assemble pas même si l'opération

         ; est une longue opération. 

Chat with us