petit exercice
11 posts
• Page 1 of 2 • 1, 2
petit exercice
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
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
You do not have the required permissions to view the files attached to this post.
-
ginno vincenzo
Niveau 7: EP (Espèce Protégée: geek)- Posts: 38
- Joined: 13 Oct 2015, 16:34
- Gender:
- Calculator(s):→ MyCalcs profile
-
critorAdmin
Niveau 19: CU (Créateur Universel)- Posts: 42133
- Images: 16453
- Joined: 25 Oct 2008, 00:00
- Location: Montpellier
- Gender:
- Calculator(s):→ MyCalcs profile
- YouTube: critor3000
- Twitter: critor2000
- GitHub: critor
Re: petit exercice
oui tout a fait .
-
ginno vincenzo
Niveau 7: EP (Espèce Protégée: geek)- Posts: 38
- Joined: 13 Oct 2015, 16:34
- Gender:
- Calculator(s):→ MyCalcs profile
Re: petit exercice
Sais-tu de quel langage machine il s'agit ?
Ou sinon ne manque-t-il pas un document annexe avec la liste des instructions ?
Ou sinon ne manque-t-il pas un document annexe avec la liste des instructions ?
-
critorAdmin
Niveau 19: CU (Créateur Universel)- Posts: 42133
- Images: 16453
- Joined: 25 Oct 2008, 00:00
- Location: Montpellier
- Gender:
- Calculator(s):→ MyCalcs profile
- YouTube: critor3000
- Twitter: critor2000
- GitHub: critor
Re: petit exercice
alors oui , en faite les documents annexes parlent de l'exécution d'une séquence d'instructions .
-
ginno vincenzo
Niveau 7: EP (Espèce Protégée: geek)- Posts: 38
- Joined: 13 Oct 2015, 16:34
- Gender:
- Calculator(s):→ MyCalcs profile
Re: petit exercice
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.
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.
-
ginno vincenzo
Niveau 7: EP (Espèce Protégée: geek)- Posts: 38
- Joined: 13 Oct 2015, 16:34
- Gender:
- Calculator(s):→ MyCalcs profile
Re: petit exercice
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 :
Avec cette liste, il suffit maintenant de décoder ton programme à partir de l'adresse 100.
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.
-
critorAdmin
Niveau 19: CU (Créateur Universel)- Posts: 42133
- Images: 16453
- Joined: 25 Oct 2008, 00:00
- Location: Montpellier
- Gender:
- Calculator(s):→ MyCalcs profile
- YouTube: critor3000
- Twitter: critor2000
- GitHub: critor
Re: petit exercice
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 ?
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 ?
-
ginno vincenzo
Niveau 7: EP (Espèce Protégée: geek)- Posts: 38
- Joined: 13 Oct 2015, 16:34
- Gender:
- Calculator(s):→ MyCalcs profile
Re: petit exercice
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 = ...
-
critorAdmin
Niveau 19: CU (Créateur Universel)- Posts: 42133
- Images: 16453
- Joined: 25 Oct 2008, 00:00
- Location: Montpellier
- Gender:
- Calculator(s):→ MyCalcs profile
- YouTube: critor3000
- Twitter: critor2000
- GitHub: critor
Re: petit exercice
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
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
-
ginno vincenzo
Niveau 7: EP (Espèce Protégée: geek)- Posts: 38
- Joined: 13 Oct 2015, 16:34
- Gender:
- Calculator(s):→ MyCalcs profile
11 posts
• Page 1 of 2 • 1, 2
Return to Maths, physique, informatique et autre...
Who is online
Users browsing this forum: ClaudeBot [spider] and 10 guests