petit exercice
Posted:
24 Nov 2015, 19:22
by ginno vincenzo
Bonjour a vous tous,
alors voila j'ai un petit exercice dans ma spe info. et je bloque en faite , je vois pas trop
Expliquer ce que fait le programme suivant, écrit en langage machine, en supposant que le nombre x contenu dans la case mémoire d'adresse 10 est strictement positif. Que se passe-t-il si
merci pour votre aide , a l'avance
Re: PETITE EXERCICE
Posted:
24 Nov 2015, 19:27
by critor
Est-ce l'énoncé ci-dessous est complet ?
Re: petit exercice
Posted:
24 Nov 2015, 19:34
by critor
Sais-tu de quel langage machine il s'agit ?
Ou sinon ne manque-t-il pas un document annexe avec la liste des instructions ?
Re: petit exercice
Posted:
24 Nov 2015, 19:37
by ginno vincenzo
alors oui , en faite les documents annexes parlent de l'exécution d'une séquence d'instructions .
Re: petit exercice
Posted:
24 Nov 2015, 19:38
by ginno vincenzo
Le langage machine
Un ordinateur doit être capable d'exécuter un programme. Il faut donc un moyen d'indiquer au processeur la séquence des opérations qu'il doit exécuter. Par exemple, la séquence LDA 7, LDB 8, ADD A, LDB 9, ADD A, LDB 10, ADD A, STA 11. Dans les premières machines, des cartes perforées ou un ruban perforé situé à l'extérieur de la machine indiquaient les opérations à effectuer, comme les cartes d'un orgue de barbarie indiquent les notes à jouer l'une après l'autre. Puis cette idée a été abandonnée au profit d'une autre : celle d'enregistrer le programme dans la mémoire avec les données. Ainsi on peut exprimer le programme ci-dessus en binaire en décidant par exemple que l'instruction LDA s'écrit 0, l'instruction LDB s'écrit 1, l'instruction STA s'écrit 2, l'instruction STB s'écrit 3 et l'instruction ADD s'écrit 4, DEC s'écrit 5. A s'écrit 0 et B s'écrit 1. Le programme ci-dessus s'écrit alors 0, 7, 1, 8, 4, 0, 1, 9, 4, 0, 1, 10, 4, 0, 2, 11, ce qui commence à devenir assez difficile à lire, même s'il est facile de passer d'une représentation à l'autre. On peut ensuite stocker ce programme dans la mémoire, en commençant, par exemple, à la case 100
Pour que le compteur de programme fonctionne correctement, chaque instruction doit utiliser exactement deux cases mémoire : une pour son nom et une pour son argument. L'argument des instructions ADD et DEC est le nom d'un registre. En revanche comme les instructions de chargement ont déjà un argument : l'adresse mémoire où aller chercher la donnée à charger, elle ne peuvent pas en avoir un second pour indiquer le registre utilisé. C'est pour cela que l'on a deux instructions LDA et LDB et de même deux instructions STA et STB.
Enregistrer les programmes en mémoire permet de faire très simplement des boucles et des tests. On ajoute aux instructions ci-dessus une instruction JMP (jump) telle que JMP n charge simplement le nombre n, ou plutôt le nombre n – 2 qui sera augmenté de 2 immédiatement après l'exécution du JMP, dans le registre PC pour détourner le programme de sa route et le forcer à continuer son exécution à l'adresse n. De même l'instruction JMZ (jump if zero), qui effectue un saut si le contenu du registre A est 0, permet de faire des tests. On ajoute enfin l'instruction END, qui termine le programme. En langage machine, on suppose que JMP s'écrit 6. JMPZ s'écrit 7. END s'écrit 8 avec un argument puisqu'il en faut un : 0.
Pour construire une boucle ou un test avec ces nouvelles instructions, il faut tout d'abord trouver une façon de traduire la condition du test ou la condition d'arrêt de la boucle par un test d'égalité à zéro. Par exemple, pour effectuer un test comme x == 2, on peut placer la valeur de x dans le registre A, exécuter deux fois l'instruction DEC A, et enfin tester si le registre A contient 0. Ensuite, on écrit les séquences d'instructions qui correspondent aux différentes branches du test ou au corps de la boucle, et on utilise JMPZ et JMP pour diriger l'exécution du programme dans l'une ou l'autre de ces séquences. Par exemple, un programme qui lit une valeur x dans la case mémoire d'adresse 11, puis recopie la case mémoire d'adresse 12 dans la case mémoire d'adresse 20 si x vaut 2, ou la case mémoire d'adresse 13 dans la case mémoire d'adresse 30 dans le cas contraire peut s'écrire :
Les instructions précédentes ne permettent que d'accéder à un nombre limité de cases mémoire, dont les adresses sont les constantes entières qui servent d'arguments aux instructions LDA, STA, LDB et STB. Le calcul sur des structures de données plus complexes, comme des tableaux, nécessite d'autres instructions pour accéder à une case mémoire dont l'adresse est elle même une donnée, en particulier le résultat d'un calcul. Les processeurs réels ont bien d'autres instructions encore : des opérations booléennes, des opérations sur les nombres entiers, des opérations sur les nombres flottants, etc.
Re: petit exercice
Posted:
24 Nov 2015, 19:49
by critor
Merci.
Donc il faut désassembler ton programme pour comprendre ce qu'il fait.
Mais avant cela, il nous faut commencer par documenter les instructions, avec l'aide de ton document.
Les voici :
- Code: Select all
0 + <valeur> = LDA <valeur>
1 + <valeur> = LDB <valeur>
2 + <valeur> = STA <valeur>
3 + <valeur> = STB <valeur>
4 + <registre> = ADD <registre>
5 + <registre> = DEC <registre>
6 + <adresse> = JMP <adresse>
7 + <adresse> = JMPZ <adresse>
8 + 0 = END
Avec cette liste, il suffit maintenant de décoder ton programme à partir de l'adresse 100.
Re: petit exercice
Posted:
24 Nov 2015, 20:30
by ginno vincenzo
merci
mais , je comprend pas trop en faite !
en faite on doit assigner une valeur a chaque adresse ... on le fait avec votre algo ci dessus ?
Re: petit exercice
Posted:
24 Nov 2015, 20:35
by critor
Tu lis le programme de gauche à droite, et tu traduis successivement chaque instruction :
- Code: Select all
100: 0 + 10 = LDA 10
102: 1 + 10 = ...
104: 7 + 112 = ...
106: 5 + 0 = ...
108: 4 + 1 = ...
110: 6 + 104 = ...
102: 3 + 11 = ...
104: 8 + 0 = ...
Re: petit exercice
Posted:
24 Nov 2015, 20:43
by ginno vincenzo
ahh ok .... sayer je comprend un peut mieux ...
mais du coup ,quand il me demande expliquer ce que fais le programme ,,
je repond qu'il permet de calculer une valeurs de x et de y d'après une adresse donner par une instructions ..... ?
merci