Codage machine en 68000

Réponses à toutes vos questions après le Bac (Fac, Prépa, etc.)
Sasukedu77
Membre Naturel
Messages: 53
Enregistré le: 15 Jan 2011, 00:12

Codage machine en 68000

par Sasukedu77 » 08 Jan 2013, 14:27

Bonjour à tous,

Je viens ici car j'ai du mal à comprendre un exercice sur le codage machine (processeur 68000).

Voici l'énoncé :

Soit le programme ci-dessous :

Image

L'objectif de cet exercice est de déterminer la valeur qui sera attribuée à chaque étiquette lors de la phase
d'assemblage. Il est donc nécessaire d'assembler manuellement le programme. Afin de faciliter ce travail,
le premier mot de 16 bits du code machine de chaque instruction est indiqué en début de ligne (à droite
des quatre points d'interrogation). Il reste donc à déterminer les mots manquants du code machine. Ces
mots manquants sont représentés par le point d'interrogation à droite du premier mot de 16 bits. Il faudra
également déterminer l'adresse mémoire de chaque instruction. Cette adresse est représentée par les
quatre points d'interrogation en début de ligne.


Donc pour l'étiquette DISPLAY = $2000 parce que la directive ORG nous permet de dire à quelle adresse on doit commencer le programme mais après je ne vois pas comment obtenir les "????" et donc de retrouver petit à petit les valeurs des étiquettes...

Merci de votre aide



adrien69
Membre Irrationnel
Messages: 1899
Enregistré le: 20 Déc 2012, 13:14

par adrien69 » 08 Jan 2013, 15:29

C'est vraiment des maths ça ? :look2:

Sasukedu77
Membre Naturel
Messages: 53
Enregistré le: 15 Jan 2011, 00:12

par Sasukedu77 » 08 Jan 2013, 16:36

Il se peut qu'il y ait pas que des matheux ici..

adrien69
Membre Irrationnel
Messages: 1899
Enregistré le: 20 Déc 2012, 13:14

par adrien69 » 08 Jan 2013, 16:41

Sasukedu77 a écrit:Il se peut qu'il y ait pas que des matheux ici..

Bah dans le topic informatique y a des chances, dans le topic math un peu moins quand même... :zen:

Avatar de l’utilisateur
ampholyte
Membre Transcendant
Messages: 3940
Enregistré le: 21 Juil 2012, 08:03

par ampholyte » 08 Jan 2013, 16:54

Bonjour,

Qu'appelles-tu étiquette ? (A quoi ça correspond mise à part au dernier point d'interrogation ?)

ORG $2000 pour moi signifie que le programme commence à l'adresse 2000
donc sur ta ligne display tu aurais :
2000 2611 ?

Autres questions tu dis que 2611 correspond au mot de 16 bits du code machine de chaque instruction. Qu'est ce que tu entends pas là ? Est-ce que cela ne correspondrait pas à l'adresse de la prochaine instruction ?

Sasukedu77
Membre Naturel
Messages: 53
Enregistré le: 15 Jan 2011, 00:12

par Sasukedu77 » 08 Jan 2013, 17:28

L'étiquette c'est le premier champ d'une instruction. Par exemple Display,EndDisplay,Print et EndPrint sont des étiquettes.

Pour l'ORG je suis d'accord c'est que j'avais dit dans mon premier post.

Et je ne sais pas, c'est l'énoncé de l'exercice qui dit ça ce n'est pas moi...

Avatar de l’utilisateur
ampholyte
Membre Transcendant
Messages: 3940
Enregistré le: 21 Juil 2012, 08:03

par ampholyte » 08 Jan 2013, 17:31

Merci pour les réponses.

Connais-tu la signification de :
- ADDI.W
- ADD.W
- JSR ?

Sasukedu77
Membre Naturel
Messages: 53
Enregistré le: 15 Jan 2011, 00:12

par Sasukedu77 » 08 Jan 2013, 17:37

Donc si je me souviens bien :
ADDI.W c'est une addition immédiate (16 bits)
ADD.W Addition binaire (16 bits)
JSR c'est un saut vers un sous programme

Avatar de l’utilisateur
ampholyte
Membre Transcendant
Messages: 3940
Enregistré le: 21 Juil 2012, 08:03

par ampholyte » 08 Jan 2013, 17:44

Ok,

Je suppose donc que on va avoir quelque chose comme ça :

2000 2611 Display
2611 0641 Display
0641 D279 Display
D279 4EB9 Display
4E75 2140 Display
2140 4E75 EndDisplay

4EB9 2D68 Print
2D68 0679 Print
0679 06B9 Print
06B9 4E75 EndPrint

Est-ce que ça pourrait être quelque chose comme ceci ? Je t'avouerais que pour les étiquettes je ne sais pas s'il faut ajouter les ADDI.W ADD ect..

Sasukedu77
Membre Naturel
Messages: 53
Enregistré le: 15 Jan 2011, 00:12

par Sasukedu77 » 08 Jan 2013, 17:46

au fait j'ai la correction mais je voulais comprendre comment il a trouvé les valeurs. je regarde ça.

Avatar de l’utilisateur
ampholyte
Membre Transcendant
Messages: 3940
Enregistré le: 21 Juil 2012, 08:03

par ampholyte » 08 Jan 2013, 17:51

Il aurait fallu commencer par ça :D.
Si tu pouvais la poster pour voir. Merci =)

Sasukedu77
Membre Naturel
Messages: 53
Enregistré le: 15 Jan 2011, 00:12

par Sasukedu77 » 08 Jan 2013, 18:24

Non au fait c'est pas du tout ça ...

Image

Tu vois ça s'incrémente on passe de 2000 à 2002 et je voulais savoir si tu savais de combien en combien on devait incrémenter...

Avatar de l’utilisateur
ampholyte
Membre Transcendant
Messages: 3940
Enregistré le: 21 Juil 2012, 08:03

par ampholyte » 08 Jan 2013, 18:29

Awouais c'est vraiment pas ça du tout.

Tu dois avoir des réponses dans les commentaires dans la correction.
MOVE.L (A1), D3 à quoi ça correspond, ce genre de chose ...

Avatar de l’utilisateur
ampholyte
Membre Transcendant
Messages: 3940
Enregistré le: 21 Juil 2012, 08:03

par ampholyte » 08 Jan 2013, 18:44

Déjà ce qu'on peut en conclure.

Les étiquettes correspondent au valeur ou au adresse.
Pour ADDI.W #$5000 on obtient l'étiquette 5000
Pour ADD.W $5000, on obtient 00005000
Pour le JSR Print, on a l'adresse de la fonction print 2018

ect.. Pour la question des adresses, il y a sûrement un lien logique sur la taille des données ou autres ...

Sasukedu77
Membre Naturel
Messages: 53
Enregistré le: 15 Jan 2011, 00:12

par Sasukedu77 » 08 Jan 2013, 18:55

Mouais je vais me débrouiller je verrais bien avec ça.

Merci pour ton aide

Black Jack

par Black Jack » 08 Jan 2013, 20:20

Il faut avoir la doc du 68000, il y a bien longtemps que je n'ai plus fait cela.

L'instruction MOVE.L (A1),D3 est 2611, il ne faut rien ajouter pour que celle instruction soit comprise, pour écrire 2611 (c'est de l'hexadecimal), on a besoin de 64 bits, soit 2 mots de 32 bits.
Les adresses mémoires sont organisées en 32 bits --> on a besoin de 2 adresses mémoires pour écrire l'instruction "2611"
L'instruction suivante sera donc 2 adresses plus loin, soit donc à l'adresse 2000 + 2 = 2002 (en hexadécimal)

L'instruction ADDI.W ... sera donc à l'adresse 2002 Hexadécimal.

ADDI.W #$5000,D1 nécessite 64 bits pour le ADDI.W ....,D1, cette partie d'insctruction a le code 0641 en hexadécimal, mais il faut encore 64 bits pour completer l'instruction, donc pour indiquer la valeur à ajouter à D1. cette valeur qu'on ajoute est ici 5000H
L'instrucion complète
ADDI.W #$5000,D1 nécessite donc 128 bits, soit 4 mots de 32 bits.

L'instruction qui suit ADDI.W #$5000,D1 sera donc à l'adresse 2002 + 4 = 2006 hexadécimal

Et ainsi de suite ...

Il faut avoir la doc du 68000 pour savoir compter le nombre de mots nécessaires pour chaque instructions ... ou être capable de calculer la place nécessaire par coeur en reconnaissant les types d'adressage, direct, indirect et plein d'autres choses, mais ça c'est trop loin pour moi, je ne me rappelle plus.

:zen:

Avatar de l’utilisateur
ampholyte
Membre Transcendant
Messages: 3940
Enregistré le: 21 Juil 2012, 08:03

par ampholyte » 09 Jan 2013, 10:20

Merci pour cette réponse, Sasuke a maintenant toutes les cartes en main pour poursuivre (si il a la doc du 68000).

Personnellement je n'aurais jamais pensé que cela avait son importance. Merci pour ton éclairement =).

 

Retourner vers ✯✎ Supérieur

Qui est en ligne

Utilisateurs parcourant ce forum : Aucun utilisateur enregistré et 48 invités

Tu pars déja ?



Fais toi aider gratuitement sur Maths-forum !

Créé un compte en 1 minute et pose ta question dans le forum ;-)
Inscription gratuite

Identification

Pas encore inscrit ?

Ou identifiez-vous :

Inscription gratuite