Bonjour, je voudrai savoir(avant de poster un sujet) si vous aidez aussi avec l?informatique ? Je suis en première et j?ai du mal un exercice de NSI
Merci d?avance
*** message dupliqué ***
Assembleur
Nous avons vu en cours le programme permettant de multiplier deux nombres en langage assembleur: On avait utilisé @x, @y, @somme, @0, et @1 pour noter les adresses des variables et constantes en mémoire.
L'adresse @0 pointe vers la valeur 0. L'adresse @1 pointe vers la valeur 1.
On utilise les labels début:, vrai: et fin: pour les numéros d'instructions.
Compléter le code assembleur:
LDA @0
MOV A R
STR @somme
début:
LDA @y
MOV A R
JPP vrai:
JMP fin:
vrai:
LDA @somme
LDB @x
ADD
STR @somme
LDA @y
LDB @1
SUB
STR @y
JMP début:
fin:
Compléter la grille suivante afin que ce programme soit réalisé par le processeur M999.
Vous choisirez les cases correspondant à @x, @y, @somme, @0, @1, début:, vrai, et fin: (Il serait très gênant que deux élèves choisissent les mêmes cases...)
IMAGE
Bonjour,
par le processeur M999.
c'est qui celui là ?
Compléter le code assembleur :
pour compléter un code il faut savoir quel est le but du programme
si c'est de multiplier le contenu de la case x par celui de la case y, il a été vu en cours !!
il me semble complet ce programme !
(en devinant la signification des instructions ressemblant à toutes celles des processeurs que je connais (mais ça fait longtemps .) et JPP voulant très certainement dire
"sauter à l'adresse indiquée si ≥ 0"
va savoir qui est "≥ 0" et on devinera que c'est la dernière donnée manipulée)
il ne manque donc que les définitions des variables pour l'assembleur
(pour le logiciel qui va traduire ce langage symbolique en langage machine binaire)
et on dit qu'il faut choisir les cases qui contiendront x, y, et somme etc
on dit même que tu dois t'entendre avec tes collègues pour ne pas choisir la même case qu'eux !
(ça va, il y a 100 cases disponibles)
la question "remplir le tableau" est très peu claire
s'agit il de traduire ce programme en langage machine dans les cases du tableau ??
le travail fait normalement par le logiciel de traduction de assembleur (symbolique) en langage machine binaire ??
seul toi connais ici le codage des instructions sur ce "processeur M999" connu de personne ...
ou juste de les écrire en symbolique dans les cases en ne traduisant que les symboles x, y etc ?
et puis un processeur qui ne peut exécuter que des programmes de 100 instructions maximum .. hum ...
bref à mon avis tu en sais énormément plus que quiconque ici sur la question.
Rasengan
le processeur M999 a son propre jeu d'instructions
regarde ce lien :
il s'agit donc de traduire l'algo de multiplication en langage M999..
Par exemple si tu places 399 dans une cellule, ça correspond à l'instruction NOP (donc ca ne fait rien..).
300 : correspond à ADD ajouter A et B, placer le résultat dans R.
J'espère que ça va t'aider..
Dis moi comment tu avances (éventuellement, je continuerai à creuser)..
Rasengan,
exemple :
LDA @0 peut devenir 070 (si tu choisis la cellule 70 pour @0 qui contient la valeur 0)
MOVE A R devient 402
STR @somme devient 275 (si tu choisis la cellule 075 pour @somme)
etc ..
Je ne comprend pas vraiment….Pourquoi il y a écrit vrai, fin, faux,...
Je sais juste qu'il faut regarder le jeu d'instructions pour savoir à quoi correspond les nombres…
les labels : vrai, fin ou début sont des adresses : si tu préfères, ce sont des n° de cellules du M999 .
JMP fin va se traduire par "aller à l'adresse fin".
toi, tu vas décider de l'endroit ou se trouve "fin" par exemple , on dit que c'est la cellule 83..
alors JMP fin devient 583.
et en cellule 83, tu mettras l'instruction qu'on doit faire en fin.
de même vrai est une adresse : tu choisis que l'adresse "vrai" c'est la cellule n° 20 par exemple.
JPP vrai équivaut à aller à l'adresse vrai si la valeur du registre R est positive.
donc aller en 20 si R > 0
ca se traduit par 620
et en 20, tu débutes les instructions à faire dans ce cas..
(LDA @somme, LDB @x, etc... ).
propose quelque chose, j'essaierai de te corriger.
allez, voilà où j'en suis :
je choisis de placer
@0 en 70 (valeur 0)
@1 en 71 (valeur 1)
@x en 73
@y en 74
@somme en 75
vrai en 10
début en 4
fin en 99
je commence :
LDA @0 070 (là, on est en case 00)
MOV A R 402
STR @somme 275
début:
LDA @y 074 ( là on est en case 04)
MOV A R 402
JPP vrai: 610
JMP fin: 599
vrai:
LDA @somme 075 (là on est en case 10)
LDB @x 173
ADD 300
STR @somme 275
LDA @y 074
LDB @1 171
SUB 301
STR @y 274
JMP début: 504
fin:
il faut peut etre placer des NOP sur les cellules vides entre les instructions... à voir..
C'est ok pour toi ?
Je peux vous envoyer mon cours ou c'est obligatoire de recopier ?
Ce que j'ai fais en cours c'est par exemple que l'on devait dire ce que provoque la mise en route d'une machine, par exemple dans la première case il y avait 399 (donc on ne fait rein), dans la deuxiee 011 donc on va a la case 11 (il y a 123), on mets donc 123 dans la case A,...ECT
Je dois choisir un nombre a mettre a coté de LDA @0,MOV A R et STR @somme ?
Pourquoi 402 ? J'ai compris le 4 (car c'est mov), mais en essayant de faire votre code assembleur sur le tableau je n'y arrive pas, il faut noter 070 dans la case 070 pour commencer ?
pourquoi 402 ? MOV A R 4 pour MOV et sur le lien que je t'ai donné on voit la correspondance entre registre et N°
le registre A : 0
le registre B : 1
le registre R : 2
d'où MOV A R ==> 402
on commence en case 00 : tu y inscris 070
puis en case 01 tu inscris 402
en case 02 : 275
en case 4 (j'ai choisis que début serait en 04) tu inscris 074
en case 5 : 402
etc...
Je dois écrire dans la case A(le registre A) dès le debut 70 ? Vous avez ecrit :"on commence en case 00 : tu y inscris 070" donc dans la case tout en haut à gauche je mets 070 ou 402 ?
oui, je pourrai t'aider demain si on n'a pas fini, mais pas le soir..
et franchement, je t'ai tout donné..
dans les cases A R et B, tu ne mets rien : c'est ton programme qui va le faire.
les cases A R et B sont des registres.
On te demande juste de programmer le M999, pas de remplir toutes les cases.
Ensuite, quand je te dis en case 00 tu écris 070, ça me semble clair..
c'est la 1ère case en haut à gauche..
tu dis "on commence en case 00 : tu y inscris 070" donc dans la case tout en haut à gauche je mets 070 ou 402 ?"
je te dis d'y placer 070...
ensuite je t'ai écrit de placer 402 dans la case suivante la n0 01..
et ainsi de suite.
dans la grille, au final, tu te retrouveras avec des nombres de 3 chiffres dans chaque cellule.
C'est ça le programme du processeur.
sur le lien suivant, tu vois un exemple de programme du M999. C'est juste un exemple. C'est pour te montrer qu'il n'y a finalement que des nombres dans les cellules, et rien dans les registres.
toi, il faudra que tu écrives en plus la valeur 0 dans la case 70 (la premiere case de la colonne 70) et la valeur 1 dans la case 71
Pourtant en cours on mettait des choses dans R A et B selon le jeu d'instruction 0 signifie copie le mot mémoire d'addresse addr dans le registre A... Le lien que vous avez envoyé renvoi sur un tableau avec les cases vides.
Je vais y aller à demain
tu dois arriver à quelque chose comme ça :
00 10 20 30 40 50 60 70 80 90
0 070 075 0
1 402 173 1
2 275 300
3 275
4 074 074
5 402 171
6 610 301
7 599 274
8 504
9
en case 73 et 74 tu mettras les valeurs de x et y et tu trouveras le resultat en case 75..
je quitte
bonne nuit.
le lien que je t'ai donné ne renvoie pas à un tableau de cases vides ; regarde mieux.
en cours tu as fait vu ce que faisais une instruction : tu as fait tourner un programme, et tu as noté ce qui venait s'inscrire dans les registres..
Ici, on te demande juste de programmer M999, pas de le faire tourner. C'est différent.
Bonne nuit.
Votre exemple(sur le lien) est exactement ce que j'ai fais en cours (sauf que moi ça va jusqu'à la case ou il y a écrit 042), et il y a une question : Que provoque la mise en route de la machine ?: Elle affiche 42, il s'agit du minimum entre les 2 nombres
Il y a aussi une 2eme exécution dans mon cours qui va jusqu'à 501 (comme dans votre exemple) et il y a écrit : I l s'agit du même programme min que le précédent à la différence près que c'est à l'utilisateur d'entrer les 2 valeurs
Il y a aussi dans mon cours un programme que l'on avait du écrire...
tu as fait en cours davantage que je n'en ai jamais fait personnellement.. (j'ai découvert le code M999 hier..).
je t'ai donné ce que je pense correct comme réponse à ton exercice (mon message d'hier à 00:39)
la question était :
Compléter la grille suivante afin que ce programme soit réalisé par le processeur M999.
Vous choisirez les cases correspondant à @x, @y, @somme, @0, @1, début:, vrai, et fin:
c'est ce que je t'ai proposé : une grille complétée par le langage du M999, qui pourrait réaliser le programme assembleur donné, et j'ai choisi les cases pour @x, @y, @somme, @0, @1, début:, vrai, et fin:
je ne vois pas ce que je pourrais t'apporter de plus.. tout est dit.
Je te laisse vérifier mon codage M999, car tu en sais plus que moi à ce sujet..
Bonne journée.
C'est ça que je voudrai, je veux vérifier en l'essayant sur le tableau, étape par étape mais je n'y arrive pas... et que donne votre programme à la fin ?
j'ai découvert le code M999 hier....
je t'ai donné une solution, le code, je n'irai pas plus loin.
Je t'ai indiqué où j'ai choisi de placer @x, @y, @somme, @0, @1, début:, vrai, et fin:
et je t'ai précisé "en case 73 et 74 tu mettras les valeurs de x et y et tu trouveras le résultat en case 75.."
encore une fois, je te laisse vérifier, corriger éventuellement : je ne peux pas aller plus loin, je ne sais même pas comment on fait démarrer le programme sur M999.
par rapport à hier, où tu n'avais rien du tout, j'ai beaucoup (trop?) avancé .
A toi de faire le reste.
Bonne journée.
D'accord merci...Mais est-ce que les vérifications sont demandes ou tout ce que j'ai à rendre c'est le tableau rempli comme vous l'avez envoyé à 00h39 et le code assembleur a 23h22 ? Ainsi je pourrai faire mes autres devoirs et vérifier ça plus tard...
Vous devez être membre accéder à ce service...
Pas encore inscrit ?
1 compte par personne, multi-compte interdit !
Ou identifiez-vous :