Skip to content
Snippets Groups Projects

Compare revisions

Changes are shown as if the source revision was being merged into the target revision. Learn more about comparing revisions.

Source

Select target project
No results found
Select Git revision
Loading items

Target

Select target project
  • cours-l3-info1/systeme-exploitation
1 result
Select Git revision
Loading items
Show changes

Commits on Source 2

; Name : Enregistrement
; Description: Logiciel d'enregistrement des personnes sans memoire avec 6 actions possibles (Ajouter une personne,
; supprimer une personne, lister toute les personnes, afficher la personne la plus jeunes est la plus ages,
; afficher l'age moyen de toute les personnes et quitter le programme!
; Ce logiciel est en assembleur et est realiser dans le cadre du cours d'architecture des ordinateurs de la
; licence Informatique de l'Université Clermont Auvergne
; Author : Lucas BATTAGLIA
; Contact : Lucas.BATTAGLIA@etu.uca.fr
; Version : 2.4
; Date : 2025 - 03 - 27
; Git : https://gitlab.isima.fr/cours-l3-info1/systeme-exploitation/-/tree/master/Projets
section .data
;/***************************************************************************************************************************/
......@@ -75,13 +88,23 @@ v_nom: db "1234567890...", 0
vlen_nom: equ $ - v_nom
; Variable pour enregistrer un seul age (3 caractere max -> 0 a 999 ans)
v_age: db "123", 0
v_age: dd 123
vlen_age: equ $ - v_age
; Variable pour enregistrer un second age (3 caractere max -> 0 a 999 ans)
v_age2: dd 0
vlen_age2: equ $ - v_age
; Variable pour enregistrer l'adresse d'une personne (dans la liste)
v_addr: dd 0
; Variable pour enregistrer l'adresse d'une seconde personne (dans la liste)
v_addr2: dd 0
; variable pour la liste des personnes (petite taille)
;v_personnes: db "Timeo 10", 10, "Hugo 19", 10, "Lucas 20", 10, "Eric 50", 10, "Virginie 45", 10, "Marc 45", 10, "Beatrice 40", 10, "David 50", 10, "Sandrine 50", 10, "Henri 70", 10, "Evelyne 65", 10, "Tony 70", 10, "Danielle 64", 10, "Yvone 80", 0 ; Ne mettre aucune donner deriere pour evite qu'elle soit ecrasse
v_personnes: db "Timeo 12", 10, "Hugo 19", 10, "Lucas 21", 10, "Eric 50", 10, "Virginie 45", 10, "Marc 45", 10, "Beatrice 40", 10, "David 50", 10, "Sandrine 50", 10, "Henri 70", 10, "Evelyne 65", 10, "Tony 70", 10, "Danielle 64", 10, "Yvone 80", 0 ; Ne mettre aucune donner deriere pour evite qu'elle soit ecrasse
; variable pour la liste des personnes (grande taille generer par IA)
v_personnes: db "Danielle 45", 10, "Laetitia 24", 10, "Amandine 26", 10, "Noemie 17", 10, "Christophe 58", 10, "Isabelle 50", 10, "Guillaume 74", 10, "Laetitia 67", 10, "Marc 21", 10, "Justine 20", 10, "Timeo 68", 10, "Isabelle 60", 10, "Josiane 56", 10, "Gilles 11", 10, "Tony 22", 10, "Lise 38", 10, "Chloe 41", 10, "Francois 61", 10, "Patricia 18", 10, "Régis 56", 10, "Catherine 80", 10, "Sylvie 18", 10, "Blandine 18", 10, "Emilie 47", 10, "Bertrand 56", 10, "Jocelyne 74", 10, "Julien 16", 10, "Ophelie 55", 10, "Timeo 40", 10, "Emilie 33", 10, "Mélissa 31", 10, "Justine 41", 10, "Thibault 23", 10, "Lucie 19", 10, "Bertrand 77", 10, "Mickael 39", 10, "Gerard 19", 10, "Gabriel 21", 10, "Sylvain 59", 10, "Hervé 67", 10, "Nicolas 49", 10, "Jacques 16", 10, "Corentin 38", 10, "Nathan 38", 10, "Christine 24", 10, "Lucie 80", 10, "Jacques 46", 10, "Beatrice 77", 10, "Mickael 72", 10, "Estelle 56", 10, "Jérémie 13", 10, "Géraldine 28", 10, "Jacques 14", 10, "Colette 64", 10, "Bruno 24", 10, "Ophelie 31", 10, "Camille 14", 10, "Matthieu 55", 10, "Valentin 39", 10, "Emilie 26", 10, "Jean-Philippe 47", 10, "Manon 51", 10, "Thierry 18", 10, "Raphael 49", 10, "Gabriel 55", 10, "Jacques 46", 10, "Josiane 45", 10, "Serge 60", 10, "Francois 44", 10, "Sylvain 34", 10, "Martine 26", 10, "Corentin 49", 10, "Xavier 75", 10, "Colette 31", 10, "Amandine 21", 10, "Emma 30", 10, "Bruno 77", 10, "Antoine 44", 10, "Maxime 16", 10, "Serge 15", 10, "Olivier 59", 10, "Lucie 67", 10, "Helene 66", 10, "Alice 16", 10, "Claire 42", 10, "Patricia 60", 10, "Beatrice 18", 10, "Stephanie 14", 10, "Catherine 76", 10, "Manon 54", 10, "Hugo 51", 10, "Jacques 75", 10, "Virginie 76", 10, "Yvone 36", 10, "Arthur 57", 10, "Mélissa 75", 10, "Delphine 80", 10, "Fanny 13", 10, "Lucas 20", 10, "Ludovic 72", 10, "Veronique 26", 10, "Julien 64", 10, "Chloe 46", 10, "Pascale 60", 10, "Severine 42", 10, "Laetitia 15", 10, "Matthieu 67", 10, "Estelle 47", 10, "Paul 29", 10, "Beatrice 30", 10, "Hervé 66", 10, "Stephanie 21", 10, "Estelle 22", 10, "Kevin 26", 10, "Mélissa 32", 10, "Lise 38", 10, "Emilie 23", 10, "Clement 26", 10, "Martine 58", 10, "Nathalie 48", 10, "Estelle 27", 10, "Sylvain 17", 10, "Sebastien 20", 10, "Nathalie 25", 10, "Cedric 53", 10, "Jean-Pierre 27", 10, "Géraldine 66", 10, "Damien 51", 10, "Manon 64", 10, "Mathilde 45", 10, "Raphael 26", 10, "Hervé 39", 10, "Olivier 64", 10, "Sylvie 22", 10, "Régis 50", 10, "Emilie 58", 10, "Baptiste 34", 10, "Fanny 23", 10, "Juliette 80", 10, "Marie 60", 10, "Virginie 74", 10, "Mireille 59", 10, "Dominique 72", 10, "Dominique 47", 10, "Eric 55", 10, "Eric 45", 10, "Loic 58", 10, "Nathalie 78", 10, "Virginie 67", 10, "Christophe 19", 10, "Matthieu 38", 10, "Thibault 37", 10, "Régis 63", 10, "Sandrine 36", 10, "Ludovic 18", 10, "Jean-Philippe 31", 10, "Juliette 34", 10, "Camille 60", 10, "Alice 35", 10, "Sylvie 78", 10, "Lise 78", 10, "Danielle 65", 10, "Hervé 48", 10, "Monique 48", 10, "Christophe 49", 10, "David 28", 10, "Maxime 45", 10, "Maxime 34", 10, "Juliette 10", 10, "Cedric 14", 10, "Liam 25", 10, "Henri 24", 10, "Frédéric 74", 10, "Morgane 79", 10, "Mélissa 67", 10, "Jerome 71", 10, "Hervé 13", 10, "Gilles 75", 10, "Laurent 72", 10, "Liam 80", 10, "Josiane 30", 10, "Patricia 25", 10, "Jean-Pierre 45", 10, "Bruno 24", 10, "Antoine 68", 10, "Veronique 64", 10, "Pascale 24", 10, "Lionel 46", 10, "Tony 80", 10, "Marie 62", 10, "Serge 63", 10, "Frédéric 50", 10, "Lise 25", 10, "Clement 33", 10, "Caroline 62", 10, "Lionel 45", 10, "Cedric 65", 10, "Amandine 43", 10, "Raphael 35", 10, "Baptiste 15", 10, "Henri 27", 10, "Mireille 30", 10, "Pascale 74", 10, "Juliette 66", 10, "Julien 54", 10, "Clement 24", 10, "Timeo 17", 10, "Lucie 57", 10, "Nathalie 14", 10, "Valentin 14", 10, "Sandrine 70", 10, "Adrien 80", 10, "Blandine 73", 10, "Guillaume 16", 10, "Olivier 24", 10, "Arthur 43", 10, "Jérémie 12", 10, "Severine 31", 10, "Olivier 32", 10, "Laetitia 32", 10, "Mickael 67", 10, "Timeo 30", 10, "Géraldine 35", 10, "Marc 78", 10, "Claire 26", 10, "Sophie 65", 10, "Blandine 21", 10, "Christine 38", 10, "Christine 73", 10, "Sylvain 23", 10, "Danielle 35", 10, "Arnaud 38", 10, "Eric 32", 10, "Maxime 53", 10, "Blandine 73", 10, "Camille 68", 10, "Jean 11", 10, "David 54", 10, "Pascale 39", 10, "Dominique 70", 10, "Aurélie 22", 10, "Axel 49", 10, "Gerard 55", 10, "Frédéric 45", 10, "Xavier 34", 10, "Liam 61", 10, "Manon 22", 10, "Severine 78", 10, "Jean 23", 10, "Justine 30", 10, "Dominique 31", 10, "Amandine 52", 10, "Dominique 32", 10, "Elodie 67", 10, "Valentin 25", 10, "Veronique 11", 10, "Jean-Philippe 24", 10, "Alexandre 17", 10, "Marie 73", 10, "Sylvain 50", 10, "Delphine 69", 10, "Francois 31", 10, "Jerome 72", 10, "Camille 48", 10, "Chloe 40", 10, "Catherine 34", 10, "Lucie 15", 10, "Chloe 43", 10, "Juliette 36", 10, "Jean-Pierre 34", 10, "Evelyne 29", 10, "Corentin 52", 10, "Kevin 49", 10, "Morgane 55", 10, "Mélissa 32", 10, "Sandrine 39", 10, "Jean-François 24", 10, "Chloe 41", 10, "Coralie 14", 10, "Camille 19", 10, "Sandrine 17", 10, "Jean-Luc 27", 10, "Corentin 65", 10, "Danielle 44", 10, "Francois 25", 10, "Pascal 76", 10, "Damien 51", 10, "Ophelie 31", 10, "Paul 54", 10, "Emma 42", 10, "Gabriel 14", 10, "Emma 33", 10, "Jean-François 10", 10, "Noemie 12", 10, "Frédéric 31", 10, "Gilles 49", 10, "Mickael 10", 10, "Henri 44", 10, "Virginie 64", 10, "Ludovic 18", 10, "Colette 38", 10, "Vincent 65", 10, "Bruno 69", 10, "Arnaud 53", 10, "Lise 77", 10, "Jocelyne 78", 10, "Alice 29", 10, "David 32", 10, "Jean-Pierre 57", 10, "Julien 66", 10, "Jérémie 10", 10, "Vincent 75", 10, "Elodie 25", 10, "Thomas 54", 10, "Emma 12", 10, "Edouard 33", 10, "Morgane 72", 10, "Sandrine 79", 10, "Arthur 67", 10, "Jerome 79", 10, "Beatrice 13", 10, "Damien 54", 10, "Jean-Philippe 80", 10, "Bruno 47", 10, "Estelle 63", 10, "Cedric 75", 10, "Jocelyne 50", 10, "Christine 39", 10, "Damien 51", 10, "Géraldine 40", 10, "Thomas 41", 10, "Yvone 67", 10, "Celine 74", 10, "Colette 33", 10, "Jean-François 47", 10, "Adrien 67", 10, "Severine 56", 10, "Francois 25", 10, "Mireille 65", 10, "Nathalie 55", 10, "Raphael 16", 10, "Olivier 10", 10, "Marie 70", 10, "Gabriel 30", 10, "Morgane 44", 10, "Claire 26", 10, "Tony 76", 10, "Baptiste 65", 10, "Mireille 74", 10, "Coralie 42", 10, "Timeo 21", 10, "Edouard 46", 10, "Virginie 56", 10, "Alexandre 27", 10, "Delphine 14", 10, "Yvone 46", 10, "Axel 31", 10, "Vincent 44", 10, "Mickael 48", 10, "Amandine 38", 10, "Evelyne 68", 10, "Clement 29", 10, "Bertrand 43", 10, "Jerome 43", 10, "Jean-Pierre 59", 10, "Stephanie 31", 10, "Celine 72", 10, "Sylvie 25", 10, "Gilles 11", 10, "Severine 80", 10, "Géraldine 23", 10, "Delphine 38", 10, "Hugo 54", 10, "Sophie 77", 10, "Xavier 18", 10, "Colette 33", 10, "Matthieu 27", 10, "Gerard 52", 10, "Lionel 56", 10, "Adrien 35", 10, "Beatrice 50", 10, "Sebastien 50", 10, "Baptiste 35", 10, "Jérémie 34", 10, "Evelyne 62", 10, "Henri 54", 10, "Clement 47", 10, "Laurence 77", 10, "Evelyne 24", 10, "Sabrina 31", 10, "Gilles 78", 10, "Evelyne 60", 10, "Loic 23", 10, "Sabrina 18", 10, "Gerard 16", 10, "Elodie 61", 10, "Kevin 17", 10, "Valentin 37", 10, "Danielle 60", 10, "Jean-Michel 62", 10, "Henri 74", 10, "Thomas 69", 10, "Thierry 32", 10, "Marie 36", 10, "Christine 22", 10, "Celine 23", 10, "David 29", 10, "Thierry 36", 10, "Laurence 33", 10, "Nathan 37", 10, "Maxime 75", 10, "Patricia 73", 10, "Liam 13", 10, "Caroline 71", 10, "Patricia 79", 10, "Delphine 38", 10, "Sabrina 24", 10, "Ludovic 43", 10, "Veronique 47", 10, "Lucas 21", 10, "Baptiste 45", 10, "Mathieu 36", 10, "Ophelie 17", 10, "Nathan 44", 10, "Manon 74", 10, "Hugo 75", 10, "Lionel 26", 10, "Paul 65", 10, "Philippe 60", 10, "Antoine 46", 10, "Vincent 69", 10, "Arthur 23", 10, "Philippe 23", 10, "Jean-Paul 44", 10, "Ophelie 48", 10, "Kevin 28", 10, "Caroline 13", 10, "Régis 59", 10, "Arthur 74", 10, "Bertrand 72", 10, "Martine 58", 10, "Raphael 36", 10, "Florence 41", 10, "Pascal 13", 10, "Thierry 49", 10, "Gerard 31", 10, "Veronique 58", 10, "Jocelyne 45", 10, "Jean-Michel 20", 10, "Alexandre 42", 10, "Gabriel 12", 10, "Jean-Paul 47", 10, "Monique 70", 10, "Laetitia 37", 10, "Coralie 59", 10, "Jean-François 47", 10, "Jerome 70", 10, "Mathilde 44", 10, "Justine 63", 10, "Melanie 38", 10, "Jocelyne 80", 10, "Stephanie 34", 10, "Coralie 67", 10, "Jean 25", 10, "Jean-François 41", 10, "Valentin 67", 10, "Christophe 26", 10, "Régis 14", 10, "Liam 75", 10, "Claire 38", 10, "Philippe 22", 10, "Mathieu 12", 10, "Adrien 22", 10, "Fabienne 26", 10, "Jean-Philippe 13", 10, "Lionel 23", 10, "Marc 34", 10, "Tony 55", 10, "Eric 75", 10, "Pascale 35", 10, "Claire 54", 10, "Laurent 58", 10, "Isabelle 56", 10, "Eric 57", 10, "Vincent 62", 10, "Julien 67", 10, "Tony 73", 10, "Ludovic 65", 10, "Jean-Luc 51", 10, "Laurence 65", 10, "Stephanie 67", 10, "David 30", 10, "Aurélie 20", 10, "Aurélie 24", 10, "Celine 17", 10, "Martine 20", 10, "Isabelle 70", 10, "Celine 18", 10, "Adrien 17", 10, "Jean-Michel 56", 0
;v_personnes: db "Danielle 45", 10, "Laetitia 24", 10, "Amandine 26", 10, "Noemie 17", 10, "Christophe 58", 10, "Isabelle 50", 10, "Guillaume 74", 10, "Laetitia 67", 10, "Marc 21", 10, "Justine 20", 10, "Timeo 68", 10, "Isabelle 60", 10, "Josiane 56", 10, "Gilles 11", 10, "Tony 22", 10, "Lise 38", 10, "Chloe 41", 10, "Francois 61", 10, "Patricia 18", 10, "Régis 56", 10, "Catherine 80", 10, "Sylvie 18", 10, "Blandine 18", 10, "Emilie 47", 10, "Bertrand 56", 10, "Jocelyne 74", 10, "Julien 16", 10, "Ophelie 55", 10, "Timeo 40", 10, "Emilie 33", 10, "Mélissa 31", 10, "Justine 41", 10, "Thibault 23", 10, "Lucie 19", 10, "Bertrand 77", 10, "Mickael 39", 10, "Gerard 19", 10, "Gabriel 21", 10, "Sylvain 59", 10, "Hervé 67", 10, "Nicolas 49", 10, "Jacques 16", 10, "Corentin 38", 10, "Nathan 38", 10, "Christine 24", 10, "Lucie 80", 10, "Jacques 46", 10, "Beatrice 77", 10, "Mickael 72", 10, "Estelle 56", 10, "Jérémie 13", 10, "Géraldine 28", 10, "Jacques 14", 10, "Colette 64", 10, "Bruno 24", 10, "Ophelie 31", 10, "Camille 14", 10, "Matthieu 55", 10, "Valentin 39", 10, "Emilie 26", 10, "Jean-Philippe 47", 10, "Manon 51", 10, "Thierry 18", 10, "Raphael 49", 10, "Gabriel 55", 10, "Jacques 46", 10, "Josiane 45", 10, "Serge 60", 10, "Francois 44", 10, "Sylvain 34", 10, "Martine 26", 10, "Corentin 49", 10, "Xavier 75", 10, "Colette 31", 10, "Amandine 21", 10, "Emma 30", 10, "Bruno 77", 10, "Antoine 44", 10, "Maxime 16", 10, "Serge 15", 10, "Olivier 59", 10, "Lucie 67", 10, "Helene 66", 10, "Alice 16", 10, "Claire 42", 10, "Patricia 60", 10, "Beatrice 18", 10, "Stephanie 14", 10, "Catherine 76", 10, "Manon 54", 10, "Hugo 51", 10, "Jacques 75", 10, "Virginie 76", 10, "Yvone 36", 10, "Arthur 57", 10, "Mélissa 75", 10, "Delphine 80", 10, "Fanny 13", 10, "Lucas 20", 10, "Ludovic 72", 10, "Veronique 26", 10, "Julien 64", 10, "Chloe 46", 10, "Pascale 60", 10, "Severine 42", 10, "Laetitia 15", 10, "Matthieu 67", 10, "Estelle 47", 10, "Paul 29", 10, "Beatrice 30", 10, "Hervé 66", 10, "Stephanie 21", 10, "Estelle 22", 10, "Kevin 26", 10, "Mélissa 32", 10, "Lise 38", 10, "Emilie 23", 10, "Clement 26", 10, "Martine 58", 10, "Nathalie 48", 10, "Estelle 27", 10, "Sylvain 17", 10, "Sebastien 20", 10, "Nathalie 25", 10, "Cedric 53", 10, "Jean-Pierre 27", 10, "Géraldine 66", 10, "Damien 51", 10, "Manon 64", 10, "Mathilde 45", 10, "Raphael 26", 10, "Hervé 39", 10, "Olivier 64", 10, "Sylvie 22", 10, "Régis 50", 10, "Emilie 58", 10, "Baptiste 34", 10, "Fanny 23", 10, "Juliette 80", 10, "Marie 60", 10, "Virginie 74", 10, "Mireille 59", 10, "Dominique 72", 10, "Dominique 47", 10, "Eric 55", 10, "Eric 45", 10, "Loic 58", 10, "Nathalie 78", 10, "Virginie 67", 10, "Christophe 19", 10, "Matthieu 38", 10, "Thibault 37", 10, "Régis 63", 10, "Sandrine 36", 10, "Ludovic 18", 10, "Jean-Philippe 31", 10, "Juliette 34", 10, "Camille 60", 10, "Alice 35", 10, "Sylvie 78", 10, "Lise 78", 10, "Danielle 65", 10, "Hervé 48", 10, "Monique 48", 10, "Christophe 49", 10, "David 28", 10, "Maxime 45", 10, "Maxime 34", 10, "Juliette 10", 10, "Cedric 14", 10, "Liam 25", 10, "Henri 24", 10, "Frédéric 74", 10, "Morgane 79", 10, "Mélissa 67", 10, "Jerome 71", 10, "Hervé 13", 10, "Gilles 75", 10, "Laurent 72", 10, "Liam 80", 10, "Josiane 30", 10, "Patricia 25", 10, "Jean-Pierre 45", 10, "Bruno 24", 10, "Antoine 68", 10, "Veronique 64", 10, "Pascale 24", 10, "Lionel 46", 10, "Tony 80", 10, "Marie 62", 10, "Serge 63", 10, "Frédéric 50", 10, "Lise 25", 10, "Clement 33", 10, "Caroline 62", 10, "Lionel 45", 10, "Cedric 65", 10, "Amandine 43", 10, "Raphael 35", 10, "Baptiste 15", 10, "Henri 27", 10, "Mireille 30", 10, "Pascale 74", 10, "Juliette 66", 10, "Julien 54", 10, "Clement 24", 10, "Timeo 17", 10, "Lucie 57", 10, "Nathalie 14", 10, "Valentin 14", 10, "Sandrine 70", 10, "Adrien 80", 10, "Blandine 73", 10, "Guillaume 16", 10, "Olivier 24", 10, "Arthur 43", 10, "Jérémie 12", 10, "Severine 31", 10, "Olivier 32", 10, "Laetitia 32", 10, "Mickael 67", 10, "Timeo 30", 10, "Géraldine 35", 10, "Marc 10", 10, "Claire 26", 10, "Sophie 65", 10, "Blandine 21", 10, "Christine 38", 10, "Christine 73", 10, "Sylvain 23", 10, "Danielle 35", 10, "Arnaud 38", 10, "Eric 32", 10, "Maxime 53", 10, "Blandine 73", 10, "Camille 68", 10, "Jean 11", 0
section .text
global _start
......@@ -413,8 +436,194 @@ l_recherche:
mov edx, lent_recherche ; On affiche lent_recherche caractere
int 80h ; On execute l'appel Systeme
; TODO
mov eax, v_personnes ; Charger la valeur de v_personnes dans eax
mov [v_i], eax ; Stocker la valeur de eax dans v_i (personne courante)
mov edi, v_personnes ; Curseur pour le deplassement
cmp byte [edi], 0 ; Si edi est deja a 0, il n'y a personne
je l_finRechercheErreur ; Alors j'affiche une erreur
l_nextCharactere:
inc edi ; On passe au caractere suivant
cmp byte [edi], 0 ; Si edi est a 0, alors on a parcouru toute la liste
je l_finRecherche ; On s'ocupe de l'affichage
cmp byte [edi], 10 ; Si on passe a une nouvelle personne
je l_new ; Je vais a l_new
cmp byte [edi], '0' ; Si le caractere edi est plus petit que le caractere 0
jb l_nextCharactere ; Alors je passe au caractere suivant
cmp byte [edi], '9' ; Si le caractere edi est plus grand que le caractere 9
ja l_nextCharactere ; Alors je passe au caractere suivant
mov eax, 0 ; Accumulateur d'age
mov ebx, 0
l_lireNombre:
cmp byte [edi], '0' ; Si le caractere edi est plus petit que le caractere 0
jb fin_lireNombre ; Si oui, on sort (car ce n'est pas un chiffre)
cmp byte [edi], '9' ; Si le caractere edi est plus grand que le caractere 9
ja fin_lireNombre ; Si oui, on sort (car ce n'est pas un chiffre)
mov bl, [edi] ; Mets la lettre de edi dans dl
sub ebx, '0' ; Convertit le caractère ASCII en valeur numérique
imul eax, 10 ; Multiplie par 10 pour ajouter le nouveau chiffre
jo too_big ; Vérifie un éventuel débordement (overflow)
add eax, ebx ; Ajoute la valeur du nouveau chiffre
jo too_big ; Vérifie un éventuel débordement (overflow)
inc edi ; On passe au caractere suivant
jmp l_lireNombre ; On boucle sur la lecture de l'age
;/*********** Comparer l'age **************/
fin_lireNombre:
dec edi
cmp eax, [v_age]
jb l_MAJjeune
l_suiteFLN:
cmp eax, [v_age2]
ja l_MAJvieux
jmp l_nextCharactere
l_MAJjeune:
mov [v_age], eax
mov ebx, [v_i]
mov [v_addr], ebx
jmp l_suiteFLN
l_MAJvieux:
mov [v_age2], eax
mov ebx, [v_i]
mov [v_addr2], ebx
jmp l_nextCharactere
;/************** Nouvelle personne detecter ****************/
l_new:
inc edi ; Je vais au prochain caractere
mov [v_i], edi ; Je l'enregistre comme etant la personne courante
dec edi ; Je reviens au caractere actuele
jmp l_nextCharactere ; Je continu ma boucle
l_finRechercheErreur:
mov eax, 4 ; Appel systeme write
mov ebx, 2 ; Sur la sortie standart
mov ecx, er ; On affiche le contenu a partir du pointeur er
mov edx, len_er ; On affiche len_er caractere
int 80h ; On execute l'appel Systeme
jmp l_menu ; lorsque on a terminer on raffiche le menu
l_finRecherche:
mov eax, 1
mov ebx, v_personnes
cmp [v_addr], ebx
je l_affichageJ
mov edi, v_personnes
l_rechNumJeune:
inc edi ; On traite le caractere suivant
mov ebx, [v_addr]
cmp edi, ebx ; Si edi est a 0, alors on a parcouru toute la liste
je l_affichageJ ; Je vais a l_affichageJ
cmp byte [edi], 10 ; Si on passe a une nouvelle personne
je l_inc ; Je vais a l_inc
jmp l_rechNumJeune ; On boucle
l_inc:
inc eax
jmp l_rechNumJeune
l_affichageJ:
mov [v_i], eax
call EcrireNombre ; Appel la fonction pour ecrire le numero de la personne
mov eax, 4 ; Appel systeme write
mov ebx, 2 ; Sur la sortie standart
mov ecx, t_espace ; On affiche le retour a la ligne
mov edx, 1 ; On affiche 1 caractere
int 80h ; Execute l'appel systeme
;/************ On affiche le nom et l'age de la personne **************/
mov edi, [v_addr] ; Met edi a la valeur de v_add
l_boucleJ:
mov eax, 4 ; Appel systeme write
mov ebx, 2 ; Sur la sortie standart
mov ecx, edi ; On affiche le caractere en cours
mov edx, 1 ; On affiche 1 caractere
int 80h ; Execute l'appel systeme
inc edi ; On incremente edi
cmp byte [edi], 10 ; Si edi contient le caractere de nouvelle personne
je l_suite ; On quit la boucle
cmp byte [edi], 0 ; Si edi contient le caractere de fin de chaine
je l_suite ; On quit la boucle
jmp l_boucleJ ; On boucle tant que le nom n'est pas fini
l_suite:
mov eax, 4 ; Appel systeme write
mov ebx, 2 ; Sur la sortie standart
mov ecx, t_newline ; On affiche le retour a la ligne
mov edx, 1 ; On affiche 1 caractere
int 80h ; Execute l'appel systeme
mov eax, 1
mov ebx, v_personnes
cmp [v_addr2], ebx
je l_affichageV
mov edi, v_personnes
l_rechNumVieux:
inc edi ; On traite le caractere suivant
mov ebx, [v_addr2]
cmp edi, ebx ; Si edi est a 0, alors on a parcouru toute la liste
je l_affichageV ; Je vais a l_affichageJ
cmp byte [edi], 10 ; Si on passe a une nouvelle personne
je l_incVieux ; Je vais a l_inc
jmp l_rechNumVieux ; On boucle
l_incVieux:
inc eax
jmp l_rechNumVieux
l_affichageV:
mov [v_i], eax
call EcrireNombre
mov eax, 4 ; Appel systeme write
mov ebx, 2 ; Sur la sortie standart
mov ecx, t_espace ; On affiche le retour a la ligne
mov edx, 1 ; On affiche 1 caractere
int 80h ; Execute l'appel systeme
mov edi, [v_addr2] ; Met edi a la valeur de v_addr2
;/************ On affiche le nom et l'age de la personne **************/
l_boucleV:
mov eax, 4 ; Appel systeme write
mov ebx, 2 ; Sur la sortie standart
mov ecx, edi ; On affiche le contenu a partir du pointeur er
mov edx, 1 ; On affiche 1 caractere
int 80h ; Execute l'appel systeme
inc edi ; On incremente edi
cmp byte [edi], 10 ; Si edi contient le caractere de nouvelle personne
je l_suiteFin ; On quit la boucle
cmp byte [edi], 0 ; Si edi contient le caractere de fin de chaine
je l_suiteFin ; On quit la boucle
jmp l_boucleV ; On boucle tant que le nom n'est pas fini
l_suiteFin:
mov eax, 4 ; Appel systeme write
mov ebx, 2 ; Sur la sortie standart
mov ecx, t_newline ; On affiche le contenu a partir du pointeur er
mov edx, 1 ; On affiche 1 caractere
int 80h ; Execute l'appel systeme
jmp l_menu ; lorsque on a terminer on raffiche le menu
......@@ -451,67 +660,81 @@ l_exit:
lireNombre:
push 0
push 0 ; On initialise l'accumulateur avec 0.
lire:
mov eax, 3
mov ebx, 0
mov ecx, v_i
mov edx, 1
int 80h
cmp byte [v_i], '0'
jb fin_lire
cmp byte [v_i], '9'
ja fin_lire
sub byte [v_i], '0'
pop eax
imul eax, 10
jo too_big
add eax, [v_i]
jo too_big
push eax
jmp lire
;/************ Lire un chiffre ************/
mov eax, 3 ; Appel systeme write
mov ebx, 0 ; Sur le fichier 0
mov ecx, v_i ; on enregistre dans v_i
mov edx, 1 ; On enregistre 1 caractere
int 80h ; On execute l'appel Systeme
;/************ Verification que se soit un chiffre ************/
cmp byte [v_i], '0' ; On compare le caractere lu avec le caractere 0
jb fin_lire ; Si plus petit que 0 on pars (ce n'est pas un nombre)
cmp byte [v_i], '9' ; On compare le caractere lu avec le caractere 9
ja fin_lire ; Si plus grand que 9 on pars (ce n'est pas un nombre)
sub byte [v_i], '0' ; Convertit le caractère ASCII en valeur numérique
;/************ On décale les chiffres vers la gauche (en multipliant par 10) pour ajouter la nouvelle valeur. ************/
pop eax ; Récupère le nombre déjà lu (dépilé)
imul eax, 10 ; Multiplie par 10 pour ajouter le nouveau chiffre
jo too_big ; Vérifie un éventuel débordement (overflow)
;/************* Ajoute le chiffre courant au nombre accumulé. **************/
add eax, [v_i] ; Ajoute la valeur du nouveau chiffre
jo too_big ; Vérifie encore une fois le débordement
;/************* Boucle pour le caractère suivant. **************/
push eax ; Empile le nombre mis à jour
jmp lire ; Continuer la lecture
fin_lire:
pop eax
mov [v_tampon], al
ret
pop eax ; Récupère le nombre accumulé
mov [v_tampon], al ; Stocke la valeur dans `v_tampon`
ret ; Retour (Fin de la fonction)
EcrireNombre:
mov al, [v_i]
push -1
cmp eax, 9
jbe afficher
mov al, [v_i] ; Charge le nombre à afficher depuis `v_i`
push -1 ; Marqueur de fin de pile
cmp eax, 9 ; Si le nombre plus petit que 10, il peut être affiché directement
jbe afficher ; Saut pour l'affichage
division:
mov edx, 0
mov ecx, 10
idiv ecx
push edx
cmp eax, 9
jbe afficher
jmp division
mov edx, 0 ; Remet `edx` à 0 pour le reste de la division
mov ecx, 10 ; Divise par 10
idiv ecx ; Divise eax par ecx
push edx ; Stocke le dernier chiffre pour affichage
cmp eax, 9 ; Vérifie si le quotient est encore à diviser
jbe afficher ; Si le nombre plus petit que 10, il peut être affiché directement
jmp division ; Sinon on continue a divisé
afficher:
mov [v_tampon], al
add byte [v_tampon], '0'
mov eax, 4
mov ebx, 1
mov ecx, v_tampon
mov edx, 1
int 80h
pop eax
cmp eax, -1
jne afficher
ret
mov [v_tampon], al ; Stocke le chiffre dans `v_tampon`
add byte [v_tampon], '0' ; Convertit en ASCII
;/************ Affichage du 1er chiffre dans la pile ************/
mov eax, 4 ; Appel systeme write
mov ebx, 1 ; Sur la sortie standart
mov ecx, v_tampon ; On affiche le contenu a partir du pointeur v_tampon
mov edx, 1 ; On affiche 1 caractere
int 80h ; On execute l'appel Systeme
pop eax ; Récupère le prochain chiffre
cmp eax, -1 ; Vérifie si on a atteint la fin de la pile
jne afficher ; Si non, continue l'affichage
ret ; Fin de la fonction
too_big:
mov eax, 4
mov ebx, 2
mov ecx, er
mov edx, len_er
int 80h
;/************ Affichage de l'erreur ************/
mov eax, 4 ; Appel systeme write
mov ebx, 2 ; Sur la sortie standart
mov ecx, er ; On affiche le contenu a partir du pointeur er
mov edx, len_er ; On affiche len_er caractere
int 80h ; On execute l'appel Systeme
mov eax, 1
mov ebx, 0
int 80h
mov eax, 1 ; Appel systeme exit
mov ebx, 0 ; Code de retour 0 (succes, je ne connais pas les autres)
int 80h ; On execute l'appel Systeme