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.