IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

x86 32-bits / 64-bits Assembleur Discussion :

Créer une calculatrice simple en asm


Sujet :

x86 32-bits / 64-bits Assembleur

  1. #1
    Membre habitué

    Profil pro
    Inscrit en
    Juin 2009
    Messages
    102
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2009
    Messages : 102
    Points : 126
    Points
    126
    Par défaut Créer une calculatrice simple en asm
    Bonjour j'esssaye actuelement de refaire une calculatrice simple en console.Et évidement j'ai quelques problèmes.

    Déjà voici le code , puis je poserais mes questions :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    104
    105
    106
    107
    108
    109
    110
    111
    112
    113
    114
    115
    116
    117
    118
    119
    120
    121
    122
    123
    124
    125
    126
    127
    128
    129
    130
    131
    132
    133
    134
    135
    136
    137
    138
    139
    140
    141
    142
    143
    144
    145
    146
    147
    148
    149
    150
    151
    152
    153
    154
    155
    156
    157
    158
    159
    160
    161
    162
    163
    164
    165
    166
    167
    168
    169
    segment .data
     
     
    accueil : db "Bonjour, bienvenue sur la calculatrice asm.",10, 0
    len_acceuil equ $ - accueil
     
    addition : db "1)Je veux faire une addition.",10, 0
    len_add equ $ - addition
     
    choix_addition : db "Vous avez choisis l'addition",10, 0
    len_choix_add equ $ - choix_addition
     
    soustraction : db "2)je veux faire une soustraction",10, 0
    len_sous equ $ - soustraction
     
    choix_soustraction : db "Vous avez choisis la soustraction", 10, 0
    len_choix_sous equ $ - choix_soustraction
     
    multiplication : db "3)je veux faire une mutliplication",10, 0
    len_mutli equ $ - multiplication
     
    choix_multiplication : db "Vous avez choisis la multiplication", 10, 0
    len_choix_multi equ $ - choix_multiplication
     
    division : db "4)je veux faire une division",10, 0
    len_div equ $ - division
     
    modulo : db "5)je veux faire un modulo",10, 0
    len_modulo equ $ - modulo
     
    choix : db "Votre choix 1-5: "
    len_choix equ $ - choix
     
     
    final : db "fin du programme.",10,0
    len_fin equ $ - final
     
    segment .bss
     
    	buffer resb 1 ;size of buffer
     
     
    segment .text
     
    global _start
     
    _start :
     
    		;affichage texte aceuil
    		mov eax, 4
    		mov ebx, 1
    		mov ecx, accueil
    		mov edx, len_acceuil
    		int 0x80
     
    		;affichage des operations
     
    		;addition
     
    		mov eax, 4
    		mov ebx, 1
    		mov ecx, addition
    		mov edx, len_add
    		int 0x80
     
    		; soustraction
    		mov eax, 4
    		mov ebx, 1
    		mov ecx, soustraction
    		mov edx, len_sous
    		int 0x80
     
    		; multiplication
    		mov eax, 4
    		mov ebx, 1
    		mov ecx, multiplication
    		mov edx, len_mutli
    		int 0x80
     
    		;division
     
    		mov eax, 4
    		mov ebx, 1
    		mov ecx, division
    		mov edx, len_div
    		int 0x80
     
    		;modulo
     
    		mov eax, 4
    		mov ebx, 1
    		mov ecx, modulo
    		mov edx, len_modulo
    		int 0x80
     
    		;choix user
     
    		mov eax, 4
    		mov ebx, 1
    		mov ecx, choix
    		mov edx, len_choix
    		int 0x80
     
    		;saisi user
    		mov eax, 3		; systeme call read
    		mov ebx, 1 		; 1 = stdin
    		mov ecx, buffer
    		mov edx, 1		; buffer size =  1 octet
    		int 0x80
     
    		;compare user input
     
    		cmp	eax, 1
    		je	op_addition
     
    		cmp	eax, 2
    		jmp	op_soustraction 	; ces deux instructions ne fonctionne pas
     
    		;mov eax, 4		;sys call write
    		;mov ebx, 0		; 0 = stdout
    		;mov ecx, buffer
    		;mov edx, 1		; buffer size
    		;int 0x80
     
    		;jmp _start
     
    op_addition : 
     
    		mov eax, 4
    		mov ebx, 1
    		mov ecx, choix_addition
    		mov edx, len_choix_add
    		int 0x80
     
    		jmp fin
     
    op_soustraction :
     
    		mov eax, 4
    		mov ebx, 1
    		mov ecx, choix_soustraction
    		mov edx, len_choix_sous
    		int 0x80
     
    		jmp fin
     
    op_multiplication :
     
    		mov eax, 4
    		mov ebx, 1
    		mov ecx, choix_multiplication
    		mov edx, len_choix_multi
    		int 0x80
     
    		jmp fin
     
     
    		;fin du programm
    fin :
    		mov eax, 4
    		mov ebx, 1
    		mov ecx, final
    		mov edx, len_fin
    		int 0x80
     
    		mov eax, 1
    		mov ebx, 0
     
    		int 0x80
    Ma premère question est , lors de la saisie le nombre entré par l'utilisateur est stockée dans buffer , c'est bien ça ?

    Ensuite je ne comprend pas si je fait :

    je vais vers la bonne opération( soustraction , addition ect)

    si je fait :
    la ça ne fonctionne plus.

    Je me dis alors qu'il faut que je comparer le buffer a eax, afin de comparer l'entrée saisie par l'utilisateur (le buffer) et un chiffre allant de 1 a 5 correspondant au type d'operation choisis (je sais pas si je suis bien clair là :/ )

    Bref j'ai besoin d'aide au niveau des sauts conditionnels pour choisir le type d'operation en fontion de la saisie de l'utilisateur.

    Merci d'avance. Salut

  2. #2
    Responsable Systèmes


    Homme Profil pro
    Gestion de parcs informatique
    Inscrit en
    Août 2011
    Messages
    17 348
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Gestion de parcs informatique
    Secteur : High Tech - Matériel informatique

    Informations forums :
    Inscription : Août 2011
    Messages : 17 348
    Points : 42 815
    Points
    42 815
    Par défaut
    Pourquoi fais tu plusieurs appels pour afficher tes messages ? Fais-en un seul qui affiche toutes tes lignes.

    Ensuite deux problèmes :

    1) la fonction eax=3 int0x80 retourne dans eax le nbre de caractères lus, pas ce qui est lu, il faut lire les docs.
    2) comme déjà vu, le retour te donnera de l'ASCII, pas un chiffre, il te faudra donc comparer le retour avec les codes ASCII des valeurs 1 à 5 et non pas les chiffres 1 à 5.
    Ma page sur developpez.com : http://chrtophe.developpez.com/ (avec mes articles)
    Mon article sur le P2V, mon article sur le cloud
    Consultez nos FAQ : Windows, Linux, Virtualisation

  3. #3
    Membre habitué

    Profil pro
    Inscrit en
    Juin 2009
    Messages
    102
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2009
    Messages : 102
    Points : 126
    Points
    126
    Par défaut
    Bon j'ai réduis le code pour l'affichage du menu en un seul appel.Pas encore fait le reste.Par contre j'ai une question simple, de quelle documentations parles tu ?

    Moi voila de quoi je m'aide, y'en a t-il d'autres a avoir ? :

    https://www.gladir.com/LEXIQUE/ASM/int.htm

    http://stanislavs.org/helppc/int_21.html

    http://unixwiz.net/techtips/x86-jumps.html

    https://www.gladir.com/LEXIQUE/ASM/DICTIONN.HTM

    https://www.felixcloutier.com/x86/

    Personnelement ce n'est pas que certaine soit en anglais qui me dérange c'est que je les trouvent pas très détaillés, en aurais-tu d'autres a me prétter stp ?

    voici quand même le code retouché un peu :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    104
    105
    106
    107
    108
    109
    110
    111
    112
    113
    114
    115
    116
    117
    118
    119
    segment .data
     
     
    accueil : db "Bonjour, bienvenue sur la calculatrice asm.",10, 0
    len_acceuil equ $ - accueil
     
    menu :	db "1)Je veux faire une addition.",10, 0
    		db "2)je veux faire une soustraction",10, 0
    		db "3)je veux faire une mutliplication",10, 0
    		db "4)je veux faire une division",10, 0
    		db "5)je veux faire un modulo",10, 0
    		db "Votre choix 1-5: "
     
    len_menu equ $ - menu
     
    choix_addition : db "Vous avez choisis l'addition",10, 0
    len_choix_add equ $ - choix_addition
     
    choix_soustraction : db "Vous avez choisis la soustraction", 10, 0
    len_choix_sous equ $ - choix_soustraction
     
    choix_multiplication : db "Vous avez choisis la multiplication", 10, 0
    len_choix_multi equ $ - choix_multiplication
     
     
    final : db "fin du programme.",10,0
    len_fin equ $ - final
     
    segment .bss
     
    	buffer resb 1 ;size of buffer
     
     
    segment .text
     
    global _start
     
    _start :
    		;affichage texte aceuil
    		mov eax, 4
    		mov ebx, 1
    		mov ecx, accueil
    		mov edx, len_acceuil
    		int 0x80
     
    		;affichage menu
     
    		mov eax, 4
    		mov ebx, 1
    		mov ecx, menu
    		mov edx, len_menu
    		int 0x80
     
    		;saisi user
    		mov eax, 3		; systeme call read
    		mov ebx, 1 		; 1 = stdin
    		mov ecx, buffer
    		mov edx, 1		; buffer size =  1 octet
    		int 0x80
     
    		;compare user input
     
    		cmp	eax, 1
    		je	op_addition
     
    		cmp	eax, 2
    		jmp	op_soustraction 		; ces deux instructions ne fonctionne pas
     
    		;mov eax, 4		;sys call write
    		;mov ebx, 0		; 0 = stdout
    		;mov ecx, buffer
    		;mov edx, 1		; buffer size
    		;int 0x80
     
    		;jmp _start
     
    op_addition : 
     
    		mov eax, 4
    		mov ebx, 1
    		mov ecx, choix_addition
    		mov edx, len_choix_add
    		int 0x80
     
    		jmp fin
     
    op_soustraction :
     
    		mov eax, 4
    		mov ebx, 1
    		mov ecx, choix_soustraction
    		mov edx, len_choix_sous
    		int 0x80
     
    		jmp fin
     
    op_multiplication :
     
    		mov eax, 4
    		mov ebx, 1
    		mov ecx, choix_multiplication
    		mov edx, len_choix_multi
    		int 0x80
     
    		jmp fin
     
     
    		;fin du programm
    fin :
    		mov eax, 4
    		mov ebx, 1
    		mov ecx, final
    		mov edx, len_fin
    		int 0x80
     
    		mov eax, 1
    		mov ebx, 0
     
    		int 0x80
    Merci !!!

  4. #4
    Responsable Systèmes


    Homme Profil pro
    Gestion de parcs informatique
    Inscrit en
    Août 2011
    Messages
    17 348
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Gestion de parcs informatique
    Secteur : High Tech - Matériel informatique

    Informations forums :
    Inscription : Août 2011
    Messages : 17 348
    Points : 42 815
    Points
    42 815
    Par défaut
    Je parlais de la documentation des appels systèmes Linux :
    http://www.lxhp.in-berlin.de/lhpsyscal.html
    Ma page sur developpez.com : http://chrtophe.developpez.com/ (avec mes articles)
    Mon article sur le P2V, mon article sur le cloud
    Consultez nos FAQ : Windows, Linux, Virtualisation

  5. #5
    Membre habitué

    Profil pro
    Inscrit en
    Juin 2009
    Messages
    102
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2009
    Messages : 102
    Points : 126
    Points
    126
    Par défaut
    Je suis désolé mais vraiment je n'y arrive pas.

    J'ai besoin de quelques conseils.

    Voici le code actuel mais qui ne veut pas dire grande chose :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    104
    105
    106
    107
    108
    109
    110
    111
    112
    113
    114
    115
    116
    117
    118
    119
    segment .data
     
     
    accueil : db "Bonjour, bienvenue sur la calculatrice asm.",10, 0
    len_acceuil equ $ - accueil
     
    menu :	db "1)Je veux faire une addition.",10, 0
    		db "2)je veux faire une soustraction",10, 0
    		db "3)je veux faire une mutliplication",10, 0
    		db "4)je veux faire une division",10, 0
    		db "5)je veux faire un modulo",10, 0
    		db "Votre choix 1-5 : "
     
    len_menu equ $ - menu
     
    choix_addition : db "Vous avez choisis l'addition",10, 0
    len_choix_add equ $ - choix_addition
     
    choix_soustraction : db "Vous avez choisis la soustraction", 10, 0
    len_choix_sous equ $ - choix_soustraction
     
    choix_multiplication : db "Vous avez choisis la multiplication", 10, 0
    len_choix_multi equ $ - choix_multiplication
     
     
    final : db "fin du programme.",10,0
    len_fin equ $ - final
     
    segment .bss
     
    	buffer resb 1 		;size of buffer
     
     
    segment .text
     
    global _start
     
    _start :
    		;affichage texte aceuil
    		mov eax, 4
    		mov ebx, 1
    		mov ecx, accueil
    		mov edx, len_acceuil
    		int 0x80
     
    		;affichage menu
     
    		mov eax, 4
    		mov ebx, 1
    		mov ecx, menu
    		mov edx, len_menu
    		int 0x80
     
    		;saisi user
    		mov eax, 3		; systeme call read
    		mov ebx, 1 		; 1 = stdin
    		mov ecx, buffer
    		mov edx, 1		; buffer size =  1 octet
    		int 0x80
     
    		;compare user input
    		mov [buffer], eax
     
    		mov ecx, [buffer]
    		cmp eax, ecx
    		je op_addition
     
     
     
     
    		;mov eax, 4		;sys call write
    		;mov ebx, 0		; 0 = stdout
    		;mov ecx, buffer
    		;mov edx, 1		; buffer size
    		;int 0x80
     
    op_addition : 
     
    		mov eax, 4
    		mov ebx, 1
    		mov ecx, choix_addition
    		mov edx, len_choix_add
    		int 0x80
     
    		jmp fin
     
    op_soustraction :
     
    		mov eax, 4
    		mov ebx, 1
    		mov ecx, choix_soustraction
    		mov edx, len_choix_sous
    		int 0x80
     
    		jmp fin
     
    op_multiplication :
     
    		mov eax, 4
    		mov ebx, 1
    		mov ecx, choix_multiplication
    		mov edx, len_choix_multi
    		int 0x80
     
    		jmp fin
     
     
    		;fin du programm
    fin :
    		mov eax, 4
    		mov ebx, 1
    		mov ecx, final
    		mov edx, len_fin
    		int 0x80
     
    		mov eax, 1
    		mov ebx, 0
     
    		int 0x80
    J'ai compris d'après la doc et tes explications les choses suivantes :

    -mov eax, 3 int 0x80 renvoie le nombre de caractère lu et les place dans eax.
    - ecx est un pointer vers buffer.
    - edx represente la taille de ce buffer.
    - le retour de la fonction mov eax, 3 int 0x80 me revoies un code ASCIII (que je dois convertir?) que je dois comparer a eax pour connaitre le choix de l'utilisateur.Donc cmp eax, 01 (le code du nombre 1 en ASCII est 01) ?

    Voila je suis un peu perdu dans la logique a adopté.

    Merci par avance.

  6. #6
    Responsable Systèmes


    Homme Profil pro
    Gestion de parcs informatique
    Inscrit en
    Août 2011
    Messages
    17 348
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Gestion de parcs informatique
    Secteur : High Tech - Matériel informatique

    Informations forums :
    Inscription : Août 2011
    Messages : 17 348
    Points : 42 815
    Points
    42 815
    Par défaut
    La fonction int 0x80 retournera toujours un résultat dans eax, en général une valeur négative=erreur. Pour l'ouverture de fichier, ça te retournera un nombre qui sera le handle (en cas de réussite). La documentation explique ce que la fonction (j'entends par fonction int 0x80 eax=qq chose) attend en entrée et dans quels registres, et ce qu'elle retourne.

    Dans le cas de la fonction eax=3 int 0x80, elle attend en entrée comme indiqué dans la doc :
    - ebx : le descripteur de fichier (le handle) par défaut 0=stdin 1=stdout, mais on ne lit par sur stdout. Pour un fichier ebx=handle obtenu par open
    - ecx : la taille du buffer ou sera stocké la lecture
    - edx= taille du buffer

    Si erreur la fonction retourne EAGAIN, EBADF, EFAULT, EINTR, EINVAL, EIO, EISDIR qui sont les codes erreurs errno du C et des nombres négatifs, sinon le nombre de caractères lus.

    La fonctionva lire sur stdin des codes ASCII et les stocker dans le buffer à l'adresse ecx edx fois. Si la chaine de caractères ( ou le caractère) doit être utilisé comme un nombre, il te faut faire une conversion.

    Il est à noter également qu'il s'agit d'une fonction bas niveau. Elle ne va pas gérer l'arrêt de lecture après un retour chariot comme les fonctions C scanf ou fgets. Ca c'est à toi de gérer si besoin.
    Ma page sur developpez.com : http://chrtophe.developpez.com/ (avec mes articles)
    Mon article sur le P2V, mon article sur le cloud
    Consultez nos FAQ : Windows, Linux, Virtualisation

  7. #7
    Membre habitué

    Profil pro
    Inscrit en
    Juin 2009
    Messages
    102
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2009
    Messages : 102
    Points : 126
    Points
    126
    Par défaut
    RE,
    bon je te remet que le code de saisie et la suite.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    		;saisi user
    		mov eax, 3		; systeme call read
    		mov ebx, 1 		; 1 = stdin
    		mov ecx, buffer
    		mov edx, 1		; buffer size =  1 octet
    		int 0x80
     
    		;compare user input
     
    		; convertion de l'entree ASCII en decimal
    		mov bl, 1
    		div bl
     
    		add al, 0x30
    		mov [buffer], al
     
    		; comparaison de la saisie avec la lecture
    		cmp eax, [buffer]
    		je op_soustraction
     
     
     
    		;mov eax, 4		;sys call write
    		;mov ebx, 0		; 0 = stdout
    		;mov ecx, buffer
    		;mov edx, 1		; buffer size
    		;int 0x80
     
    op_addition : 
     
    		mov eax, 4
    		mov ebx, 1
    		mov ecx, choix_addition
    		mov edx, len_choix_add
    		int 0x80
     
    		jmp fin
     
    op_soustraction :
     
    		mov eax, 4
    		mov ebx, 1
    		mov ecx, choix_soustraction
    		mov edx, len_choix_sous
    		int 0x80
     
    		jmp fin
     
    op_multiplication :
     
    		mov eax, 4
    		mov ebx, 1
    		mov ecx, choix_multiplication
    		mov edx, len_choix_multi
    		int 0x80
     
    		jmp fin
     
     
    		;fin du programm
    fin :
    		mov eax, 4
    		mov ebx, 1
    		mov ecx, final
    		mov edx, len_fin
    		int 0x80
     
    		mov eax, 1
    		mov ebx, 0
     
    		int 0x80
    On voit bien que la lecture de l'entrée se fait correctement, car ça saute a op_soustraction et non pas en suivant la suite du code sur op_addition.Le saut conditionnel fonctionne.
    Maintenant ce que je n'arrive pas a traduire en assembleur c'est ça :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    if(buffer == 1)
    	goto op_addition;
     
    if(buffer == 2)
    	goto op_soustraction:
     
    ect....

  8. #8
    Responsable Systèmes


    Homme Profil pro
    Gestion de parcs informatique
    Inscrit en
    Août 2011
    Messages
    17 348
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Gestion de parcs informatique
    Secteur : High Tech - Matériel informatique

    Informations forums :
    Inscription : Août 2011
    Messages : 17 348
    Points : 42 815
    Points
    42 815
    Par défaut
    Je ne comprend pas ce que tu fais à partir de la ligne 11. Tu divises le contenu de al par 1 ce qui ne sert à rien. Et ensuite ligne 15, tu écrases ce qui a été lu et stocké dans le buffer par le contenu de al.

    Le seul truc que tu as à faire avec le contenu de eax après l'int 0x80 est de vérifier que c'est égal à 1, car tu dois avoir lu 1 caractère lu.
    Tu dois ensuite récupérer le contenu lu (1 caractère dans buffer) et soit faire une conversion d'ASCII en nombre et vérifier par exemple que c'est égal à 1 pour addition, 2 pour soustraction ou tout simplement que c'est égal à "1", pour addition, "2" pour soustraction, etc. c'est à dire comparer le code ASCII lu avec le code ASCII de 1, de 2 etc pour sauter dans les parties de codes suivantes.

    En plus ligne 18, tu fais une comparaison sur 32 bits avec le contenu de buffer qui n'est sensé contenir que 1 caractère soit 8 bits. Mauvaise pratique

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
     
    mov al,[buffer]
    cmp al,1 # if(buffer == 1)
    je op_addition  # goto op_addition
    cmp al,2 # if(buffer == 2)
    je op_soustraction  # goto op_soustraction
     
    op_addition:
    ...
    op_soustraction:
    ...
    Et on utilises pas goto en C sauf cas très rare.
    Ma page sur developpez.com : http://chrtophe.developpez.com/ (avec mes articles)
    Mon article sur le P2V, mon article sur le cloud
    Consultez nos FAQ : Windows, Linux, Virtualisation

  9. #9
    Membre habitué

    Profil pro
    Inscrit en
    Juin 2009
    Messages
    102
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2009
    Messages : 102
    Points : 126
    Points
    126
    Par défaut
    Merci ton bout de code fonctionne parfaitement, j'ai ajouté "des bornes limites" en dessous de 1 on reppart sur la saisie et au dessus de 5 pareil.

    Voici la code actuel :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    104
    105
    106
    107
    108
    109
    110
    111
    112
    113
    114
    115
    116
    117
    118
    119
    120
    121
    122
    123
    124
    125
    126
    127
    128
    129
    130
    131
    132
    133
    134
    135
    136
    137
    138
    139
    140
    141
    142
    143
    144
    145
    146
    147
    148
    149
    150
    151
    152
    153
    154
    155
    156
    157
    158
    segment .data
     
     
    accueil : db "Bonjour, bienvenue sur la calculatrice asm.",10, 0
    len_acceuil equ $ - accueil
     
    menu :	db "1)Je veux faire une addition.",10, 0
    		db "2)je veux faire une soustraction",10, 0
    		db "3)je veux faire une mutliplication",10, 0
    		db "4)je veux faire une division",10, 0
    		db "5)je veux faire un modulo",10, 0
    		db "Votre choix 1-5 : "
     
    len_menu equ $ - menu
     
    choix_addition : db "Vous avez choisis l'addition",10, 0
    len_choix_add equ $ - choix_addition
     
    choix_soustraction : db "Vous avez choisis la soustraction", 10, 0
    len_choix_sous equ $ - choix_soustraction
     
    choix_multiplication : db "Vous avez choisis la multiplication", 10, 0
    len_choix_multi equ $ - choix_multiplication
     
    choix_division : db "Vous avez choisis la division", 10, 0
    len_choix_div equ $ - choix_division
     
    choix_modulo : db "Vous avez choisi le modulo", 10, 0
    len_choix_mod equ $ - choix_modulo
     
     
    final : db "fin du programme.",10,0
    len_fin equ $ - final
     
    segment .bss
     
    	buffer resb 1 		;size of buffer
     
     
    segment .text
     
    global _start
     
    _start :
    		;affichage texte aceuil
    		mov eax, 4
    		mov ebx, 1
    		mov ecx, accueil
    		mov edx, len_acceuil
    		int 0x80
     
    		;affichage menu
     
    		mov eax, 4
    		mov ebx, 1
    		mov ecx, menu
    		mov edx, len_menu
    		int 0x80
     
    		;saisi user
    		mov eax, 3		; systeme call read
    		mov ebx, 1 		; 1 = stdin
    		mov ecx, buffer
    		mov edx, 1		; buffer size =  1 octet
    		int 0x80
     
    		;compare user input
     
    		; convertion de l'entree ASCII en decimal
    		cmp eax, 1
     
    		mov al,[buffer]
     
    		cmp al,"1" 
    		je op_addition
    		jl _start 
     
    		cmp al,"2"
    		je op_soustraction
     
    		cmp al, "3"
    		je op_multiplication
     
    		cmp al, "4"
    		je op_division
     
    		cmp al, "5"
    		je op_modulo
    		jg _start
     
    		;mov eax, 4		;sys call write
    		;mov ebx, 0		; 0 = stdout
    		;mov ecx, buffer
    		;mov edx, 1		; buffer size
    		;int 0x80
     
    op_addition : 
     
    		mov eax, 4
    		mov ebx, 1
    		mov ecx, choix_addition
    		mov edx, len_choix_add
    		int 0x80
     
    		jmp fin
     
    op_soustraction :
     
    		mov eax, 4
    		mov ebx, 1
    		mov ecx, choix_soustraction
    		mov edx, len_choix_sous
    		int 0x80
     
    		jmp fin
     
    op_multiplication :
     
    		mov eax, 4
    		mov ebx, 1
    		mov ecx, choix_multiplication
    		mov edx, len_choix_multi
    		int 0x80
     
    		jmp fin
     
    op_division :
     
    		mov eax, 4
    		mov ebx, 1
    		mov ecx, choix_division
    		mov edx, len_choix_div
    		int 0x80
     
    		jmp fin
     
    op_modulo : 
     
    		mov eax, 4
    		mov ebx, 1
    		mov ecx, choix_modulo
    		mov edx, len_choix_mod
    		int 0x80
     
    		jmp fin
     
    		;fin du programm
    fin :
    		mov eax, 4
    		mov ebx, 1
    		mov ecx, final
    		mov edx, len_fin
    		int 0x80
     
    		mov eax, 1
    		mov ebx, 0
     
    		int 0x80
    Encore merci pour ton aide et tes explications.

  10. #10
    Membre habitué

    Profil pro
    Inscrit en
    Juin 2009
    Messages
    102
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2009
    Messages : 102
    Points : 126
    Points
    126
    Par défaut
    Re bonjour je suis toujours sur ce projet de calculatrice simple en assembleur x86, et.... j'ai encore et toujours des difficultées.

    Voila la sortie de mon programme :
    Bonjour, bienvenue sur la calculatrice asm.
    1)Je veux faire une addition.
    2)je veux faire une soustraction
    3)je veux faire une mutliplication
    4)je veux faire une division
    5)je veux faire un modulo
    Votre choix 1-5 : 1
    Vous avez choisis l'addition
    Entrez un premier nombre :
    Entrez un second nombre :
    Vous avez choisis l'addition
    Entrez un premier nombre :
    Le programme répète deux fois la procédure de saisie de nombre, je suppose que c'est du, comme en C, au fait que lors du choix de l'opération il ya dans le buffer le retour a la ligne (\n) donc deux caractère au lieux d'un et c'est pr cela que la procédure ce répète.SI j'ai bon sur ce point il faut que je vide le buffer et là je ne sais comment faire.J'ai chercher a droite a gauche je tombe sur des code qui me sortent des erreurs incomprehensible ou sur de l'asm 16 bit ou ms-dos (je m'y perd un peu là dedans encore) , bref pas du x86.

    Voila la portion de code incriminé :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    choix_operation:
    		mov al,[buffer]
     
    		cmp al,"1" 
    		je op_addition
    		jl _start 
     
    		cmp al,"2"
    		je op_soustraction
     
    		cmp al, "3"
    		je op_multiplication
     
    		cmp al, "4"
    		je op_division
     
    		cmp al, "5"
    		je op_modulo
    		jg _start
     
    		;mov eax, 4		;sys call write
    		;mov ebx, 0		; 0 = stdout
    		;mov ecx, buffer
    		;mov edx, 1		; buffer size
    		;int 0x80
     
    vider_buffer :
     
    		; ici le code pour vider le buffer
     
    		jmp saisie_nombre1
     
    saisie_nombre1 : 
     
    		;affichage phrase de saisi nombre 1:
    		mov eax, 4
    		mov ebx, 1
    		mov ecx, nbre1
    		mov edx, len_nbre1
    		int 0x80
     
    		;saisie nombre 1
    		mov eax, 3
    		mov ebx, 1
    		mov ecx, buf_nbre1
    		mov edx, 1
    	 	int 0x80
     
    saisie_nombre2 :			
     
    		;affichage phrase de saisi nombre 2:
    		mov eax, 4
    		mov ebx, 1
    		mov ecx, nbre2
    		mov edx, len_nbre2
    		int 0x80
     
    op_addition : 
     
    		;affichage phrase d'acceuil
    		mov eax, 4
    		mov ebx, 1
    		mov ecx, choix_addition
    		mov edx, len_choix_add
    		int 0x80
     
    		jmp vider_buffer
    Merci, a++++

  11. #11
    Responsable Systèmes


    Homme Profil pro
    Gestion de parcs informatique
    Inscrit en
    Août 2011
    Messages
    17 348
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Gestion de parcs informatique
    Secteur : High Tech - Matériel informatique

    Informations forums :
    Inscription : Août 2011
    Messages : 17 348
    Points : 42 815
    Points
    42 815
    Par défaut
    Essayes de virer la ligne 6 (jl start).
    Ma page sur developpez.com : http://chrtophe.developpez.com/ (avec mes articles)
    Mon article sur le P2V, mon article sur le cloud
    Consultez nos FAQ : Windows, Linux, Virtualisation

  12. #12
    Membre habitué

    Profil pro
    Inscrit en
    Juin 2009
    Messages
    102
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2009
    Messages : 102
    Points : 126
    Points
    126
    Par défaut
    Non en virant cette ligne ça ne change rien.

    Je te donne le code complet :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    104
    105
    106
    107
    108
    109
    110
    111
    112
    113
    114
    115
    116
    117
    118
    119
    120
    121
    122
    123
    124
    125
    126
    127
    128
    129
    130
    131
    132
    133
    134
    135
    136
    137
    138
    139
    140
    141
    142
    143
    144
    145
    146
    147
    148
    149
    150
    151
    152
    153
    154
    155
    156
    157
    158
    159
    160
    161
    162
    163
    164
    165
    166
    167
    168
    169
    170
    171
    172
    173
    174
    175
    176
    177
    178
    179
    180
    181
    182
    183
    184
    185
    186
    187
    188
    189
    190
    191
    segment .data
     
     
    accueil : db "Bonjour, bienvenue sur la calculatrice asm.",10, 0
    len_acceuil equ $ - accueil
     
    menu :	db "1)Je veux faire une addition.",10, 0
    		db "2)je veux faire une soustraction",10, 0
    		db "3)je veux faire une mutliplication",10, 0
    		db "4)je veux faire une division",10, 0
    		db "5)je veux faire un modulo",10, 0
    		db "Votre choix 1-5 : "
     
    len_menu equ $ - menu
     
    choix_addition : db "Vous avez choisis l'addition",10, 0
    len_choix_add equ $ - choix_addition
     
    choix_soustraction : db "Vous avez choisis la soustraction", 10, 0
    len_choix_sous equ $ - choix_soustraction
     
    choix_multiplication : db "Vous avez choisis la multiplication", 10, 0
    len_choix_multi equ $ - choix_multiplication
     
    choix_division : db "Vous avez choisis la division", 10, 0
    len_choix_div equ $ - choix_division
     
    choix_modulo : db "Vous avez choisi le modulo", 10, 0
    len_choix_mod equ $ - choix_modulo
     
    nbre1 : db "Entrez un premier nombre : ", 10, 0
    len_nbre1 equ $ - nbre1
     
    nbre2 : db "Entrez un second nombre : ", 10, 0
    len_nbre2 equ $ - nbre2
     
    final : db "fin du programme.",10,0
    len_fin equ $ - final
     
    segment .bss
     
    	buffer		resb 	1 		;size of buffer
    	buf_nbre1	resb	10	
     
     
    segment .text
     
    global _start
     
    _start :
    		;affichage texte aceuil
    		mov eax, 4
    		mov ebx, 1
    		mov ecx, accueil
    		mov edx, len_acceuil
    		int 0x80
     
    		;affichage menu
     
    		mov eax, 4
    		mov ebx, 1
    		mov ecx, menu
    		mov edx, len_menu
    		int 0x80
     
    		;saisi user
    		mov eax, 3		; systeme call read
    		mov ebx, 1 		; 1 = stdin
    		mov ecx, buffer
    		mov edx, 1		; buffer size =  1 octet
    		int 0x80
     
    		;compare user input
    		cmp eax, 1
    		je choix_operation 		;saut conditionelle au cas ou eax ne vaudrait pas 1, donc on aurait lu plus d'un caractère.
    		jmp _start 				;si c'est les cas on reviens au début du programme sinon on saute vers le choix des operations en fonction de la saisie.
     
    choix_operation:
    		mov al,[buffer]
     
    		cmp al,"1" 
    		je op_addition
    		;jl _start 
     
    		cmp al,"2"
    		je op_soustraction
     
    		cmp al, "3"
    		je op_multiplication
     
    		cmp al, "4"
    		je op_division
     
    		cmp al, "5"
    		je op_modulo
    		;jg _start
     
    		;mov eax, 4		;sys call write
    		;mov ebx, 0		; 0 = stdout
    		;mov ecx, buffer
    		;mov edx, 1		; buffer size
    		;int 0x80
     
    saisie_nombre1 : 
     
    		;affichage phrase de saisi nombre 1:
    		mov eax, 4
    		mov ebx, 1
    		mov ecx, nbre1
    		mov edx, len_nbre1
    		int 0x80
     
    		;saisie nombre 1
    		mov eax, 3
    		mov ebx, 1
    		mov ecx, buf_nbre1
    		mov edx, 1
    	 	int 0x80
     
    saisie_nombre2 :			
     
    		;affichage phrase de saisi nombre 2:
    		mov eax, 4
    		mov ebx, 1
    		mov ecx, nbre2
    		mov edx, len_nbre2
    		int 0x80
     
    op_addition : 
     
    		;affichage phrase d'acceuil
    		mov eax, 4
    		mov ebx, 1
    		mov ecx, choix_addition
    		mov edx, len_choix_add
    		int 0x80
     
    		jmp saisie_nombre1
     
    op_soustraction :
     
    		mov eax, 4
    		mov ebx, 1
    		mov ecx, choix_soustraction
    		mov edx, len_choix_sous
    		int 0x80
     
    		jmp fin
     
    op_multiplication :
     
    		mov eax, 4
    		mov ebx, 1
    		mov ecx, choix_multiplication
    		mov edx, len_choix_multi
    		int 0x80
     
    		jmp fin
     
    op_division :
     
    		mov eax, 4
    		mov ebx, 1
    		mov ecx, choix_division
    		mov edx, len_choix_div
    		int 0x80
     
    		jmp fin
     
    op_modulo : 
     
    		mov eax, 4
    		mov ebx, 1
    		mov ecx, choix_modulo
    		mov edx, len_choix_mod
    		int 0x80
     
    		jmp fin
     
    		;fin du programm
    fin :
    		mov eax, 4
    		mov ebx, 1
    		mov ecx, final
    		mov edx, len_fin
    		int 0x80
     
    		mov eax, 1
    		mov ebx, 0
     
    		int 0x80

  13. #13
    Responsable Systèmes


    Homme Profil pro
    Gestion de parcs informatique
    Inscrit en
    Août 2011
    Messages
    17 348
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Gestion de parcs informatique
    Secteur : High Tech - Matériel informatique

    Informations forums :
    Inscription : Août 2011
    Messages : 17 348
    Points : 42 815
    Points
    42 815
    Par défaut
    Ligne 127, après l'int 0x80, ton code continue dans op_addition, et donc fait ce qu'il y a dans op_addtion : afficher le msg.
    Ma page sur developpez.com : http://chrtophe.developpez.com/ (avec mes articles)
    Mon article sur le P2V, mon article sur le cloud
    Consultez nos FAQ : Windows, Linux, Virtualisation

  14. #14
    Membre habitué

    Profil pro
    Inscrit en
    Juin 2009
    Messages
    102
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2009
    Messages : 102
    Points : 126
    Points
    126
    Par défaut
    Re bonjour , et ben je t'avais laissé comme ça chrtophe sur ce sujet sans plus d'explication, c'est pas très polis de ma part je m'en excuse.

    Sinon j'ai continué évidement l'assembleur entre deux projets C et j'ai finalement codé une mini calculette qui semble fonctionner.

    voici le code :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    104
    105
    106
    107
    108
    109
    110
    111
    112
    113
    114
    115
    116
    117
    118
    119
    120
    121
    122
    123
    124
    125
    126
    127
    128
    129
    130
    131
    132
    133
    134
    135
    136
    137
    138
    139
    140
    141
    142
    143
    144
    145
    146
    147
    148
    149
    150
    151
    152
    153
    154
    155
    156
    157
    158
    159
    160
    161
    162
    163
    164
    165
    166
    167
    168
    169
    170
    171
    172
    173
    174
    175
    176
    177
    178
    179
    180
    181
    182
    183
    184
    185
    186
    187
    188
    189
    190
    191
    192
    193
    194
    195
    196
    197
    198
    199
    200
    201
    202
    203
    204
    205
    206
    207
    208
    209
    210
    211
    212
    213
    214
    215
    216
    217
    218
    219
    220
    221
    222
    223
    224
    225
    226
    227
    228
    229
    230
    231
    232
    233
    234
    235
    236
    237
    238
    239
    240
    241
    242
    243
    244
    245
    246
    247
    248
    249
    250
    251
    252
    253
    254
    255
    256
    257
    258
    259
    260
    261
    segment	.data
     
    values db "Nombre1 et Nombre2 seront fixé en dur a chaque début d opération.",10, 0, 10
    len_values equ $ - values
     
    selection db "Entrez votre choix d'operation : ", 10, 0, 10
    len_select equ $ - selection
     
    addition db "1 Addition.", 10, 0
    len_add equ $ - addition
     
    soustraction db "2 Soustraction.", 10, 0
    len_sous equ $ - soustraction
     
    division db "3 Division.", 10, 0
    len_div equ $ - division
     
    multiplier db "4 Multiplication.", 10, 0, 10
    len_multi equ $ - multiplier
     
    choix db "Votre choix : ", 0
    len_choix equ $ - choix
     
    choix_add db "Vous avez choissis l addition de 10 + 15", 10, 0
    len_choix_add equ $ - choix_add
     
    choix_sous db "Vous avez choissis la soustraction de 5 - 2", 10, 0
    len_choix_sous equ $ - choix_sous
     
    choix_div db "Vous avez choissis la division de 27 / 9 ", 10, 0
    len_choix_div equ $ - choix_div
     
    choix_multi db "Vous avez choissis la multiplication !", 10, 0
    len_choix_multi equ $ - choix_multi
     
     
    result db "Le resultat de l'operation est : ", 0
    len_result equ $ - result
     
     
    segment	.bss
     
    nbre1	resb	1
    nbre2	resb	1
    operation	resb	2
     
     
    segment	.text
     
    global _start
     
    _start :
     
    affichage:
    	mov eax, 4
    	mov ebx, 1
    	mov ecx, values
    	mov edx, len_values
    	int 0x80
     
    	mov eax, 4
    	mov ebx, 1
    	mov ecx, selection
    	mov edx, len_select
    	int 0x80
     
    	mov eax, 4
    	mov ebx, 1
    	mov ecx, addition
    	mov edx, len_add
    	int 0x80
     
    	mov eax, 4
    	mov ebx, 1
    	mov ecx, soustraction
    	mov edx, len_sous
    	int 0x80
     
    	mov eax, 4
    	mov ebx, 1
    	mov ecx, division
    	mov edx, len_div
    	int 0x80
     
    	mov eax, 4
    	mov ebx, 1
    	mov ecx, multiplier
    	mov edx, len_multi
    	int 0x80
     
    	mov eax, 4
    	mov ebx, 1
    	mov ecx, choix
    	mov edx, len_choix
    	int 0x80
     
    saisie:
    	mov eax, 3
    	mov ebx, 1
    	mov ecx, operation
    	mov edx, 2
    	int 0x80
     
    comparaison:
    	mov al, [operation]
    	cmp al, "1"
    	je op_add
     
    	mov al, [operation]
    	cmp al, "2"
    	je op_sous
     
    	mov al, [operation]
    	cmp al, "3"
    	je op_div
     
    	mov al, [operation]
    	cmp al, "4"
    	je op_multi
    	jmp fin
     
    op_add:
    	mov eax, 4
    	mov ebx, 1
    	mov ecx, choix_add
    	mov edx, len_choix_add
    	int 0x80
     
    	mov eax, 10
    	add eax, 15
     
    	mov bl, 10
    	div bl
     
    	add al, 0x30
    	mov [nbre1], al
     
    	mov al, ah
    	add al, 0x30
     
    	mov [nbre2], al
     
    	mov eax, 4
    	mov ebx, 1
    	mov ecx, result
    	mov edx, len_result
    	int 0x80
     
    	mov eax, 4
    	mov ebx, 1
    	mov ecx, nbre1
    	mov edx, 1
    	int 0x80
     
    	mov eax, 4
    	mov ebx, 1
    	mov ecx, nbre2
    	mov edx, 1
    	int 0x80
     
    	jmp fin
     
     
     
    op_sous:
    	mov eax, 4
    	mov ebx, 1
    	mov ecx, choix_sous
    	mov edx, len_choix_sous
    	int 0x80
     
    	mov eax, 5
    	sub eax, 2
     
    	mov bl, 1
    	div bl
     
    	add al, 0x30
    	mov [nbre1], al
     
    	mov eax, 4
    	mov ebx, 1
    	mov ecx, result
    	mov edx, len_result
    	int 0x80
     
    	mov eax, 4
    	mov ebx, 1
    	mov ecx, nbre1
    	mov edx, 2
    	int 0x80
     
     
    	jmp fin
     
    op_div :
    	mov eax, 4
    	mov ebx, 1
    	mov ecx, choix_div
    	mov rdx, len_choix_div
    	int 0x80
     
    	mov eax, 27
    	mov bl, 9
    	div bl
     
    	mov bl, 1
    	div bl
     
    	add al, 0x30
    	mov [nbre1], al
     
    	mov eax, 4
    	mov ebx, 1
    	mov ecx, result
    	mov edx, len_result
    	int 0x80
     
    	mov eax, 4
    	mov ebx, 1
    	mov ecx, nbre1
    	mov edx, 2
    	int 0x80
     
    	jmp fin
     
    op_multi:
    	mov eax, 4
    	mov ebx, 1
    	mov ecx, choix_multi
    	mov edx, len_choix_multi
    	int 0x80
     
    	mov eax, 3
    	mov bl, 2
    	mul bl 
     
    	mov bl, 1
    	div bl
     
    	add al, 0x30
    	mov [nbre1], al
     
    	mov eax, 4
    	mov ebx, 1
    	mov ecx, result
    	mov edx, len_result
    	int 0x80
     
    	mov eax, 4
    	mov ebx, 1
    	mov ecx, nbre1
    	mov edx, 2
    	int 0x80
     
    	jmp fin
     
    fin:
    	mov eax, 1
    	mov ebx, 0
    	int 0x80
    Je met le sujet en résolu.

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Réponses: 0
    Dernier message: 21/11/2010, 21h06
  2. Approche pour créer une interface simple en JavaScript ?
    Par beninsky dans le forum Général JavaScript
    Réponses: 2
    Dernier message: 24/10/2010, 20h27
  3. Créer une application simple
    Par Sofianosss dans le forum Développement Mobile en Java
    Réponses: 1
    Dernier message: 03/09/2010, 04h54
  4. [XL-2003] Créer une listbox simple
    Par coklin dans le forum Excel
    Réponses: 4
    Dernier message: 06/08/2009, 12h26
  5. Réponses: 7
    Dernier message: 29/05/2007, 11h37

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo