[LMC1] TD4 - EX4

Voir le sujet précédent Voir le sujet suivant Aller en bas

[LMC1] TD4 - EX4

Message  hepta_seven7 le Mer 30 Juil 2014, 08:32


Le but est d’écrire dans le fichier result "pair" si le nbr introduit l'est, et "impair" si celui-ci l'est aussi.
Dans mon cas quelque soit le nombre introduit il me met pair ( voir astérisque dans mon code: zone sensible)

Et j'aimerais aussi comprendre le fonctionnement de ce code, j'ai beau chercher je n'arrive pas a comprendre comment msg1 se retrouve dans le fichier result. Je me suis inspiré d'ici: http://stackoverflow.com/questions/4526424/writing-to-a-file-in-nasm-using-system-calls mais il ne donne pas plus d'information sur le pourquoi du comment Mad 
mov eax, 5
mov ebx, result
mov ecx, 1q | 2000q
int 0x80

mov ebx, eax
mov eax, 4
mov ecx, msg1
mov edx, [lgrMsg1]
int 0x80

Code:
global main

section .data
    result   DB   `result`, 0
   
section .rodata
  msg1      DB   `Pair\n`
  lgrMsg1   DD   lgrMsg1 - msg1
  msg2      DB   `Impair\n`
  lgrMsg2   DD   lgrMsg2 - msg2

section .bss
  nbr      RESB    1

section .text

main:

  mov eax, 3 ; service read
  mov ebx, 0 ; stdin (clavier)
  mov ecx, nbr
  mov edx, 256
  int 0x80
 
 * je doit trouver le moyen de mettre la nbr introduite dans le registre edx. Le code qui suit est correcte, si erreur il y a alor elle sera en haut

 
  bt edx, 0
  jc _impair
 
  mov eax, 5 ; service open
  mov ebx, result
  mov ecx, 1q | 2000q
  int 0x80
 
  mov ebx, eax ; service write
  mov eax, 4
  mov ecx, msg1
  mov edx, [lgrMsg1]
  int 0x80
  jmp _fin

_impair:

  mov eax, 5 ; service open
  mov ebx, result
  mov ecx, 1q | 2000q
  int 0x80
 
  mov ebx, eax ; service write
  mov eax, 4
  mov ecx, msg2
  mov edx, [lgrMsg2]
  int 0x80
 
_fin:
  mov eax, 1
  mov ebx, 0
  int 0x80
 
 

hepta_seven7

Nombre de messages : 12
Prénom : azddin
Date d'inscription : 15/05/2014

Revenir en haut Aller en bas

Re: [LMC1] TD4 - EX4

Message  nvs le Dim 03 Aoû 2014, 02:44

je ne réponds qu'à la question du chargement du nombre dans edx. ce que tu fais, c'est lire quelques caractères au clavier et les stocker dans la variable nbr. ce que tu ne fais pas c'est convertir cette suite de caractères en un nombre binaire puis placer celui-ci dans edx... ce qui n'est pas trivial !

je te conseille de placer une valeur en dur dans ton code dans edx, avec un bon vieux mov des campagnes.

quand tu dis que c'est toujours « pair » qui sort de ton code, c'est peut-être bon signe puisque edx y contient la valeur 256  Idea 






 drunken 

_________________

nvs

Nombre de messages : 5238
Age : 44
Prénom : Nicolas
Statut : prof
Localisation : bxl
Date d'inscription : 24/11/2005

http://nvansteenkiste.googlepages.com

Revenir en haut Aller en bas

Re: [LMC1] TD4 - EX4

Message  hepta_seven7 le Dim 03 Aoû 2014, 07:06

Merci beaucoup finallement je ne vais pas me compliquer la vie avec ça je mettrer une valeur dans edx en utilisant le fameux MOV comme vous le disiez. encore merci  cheers 

hepta_seven7

Nombre de messages : 12
Prénom : azddin
Date d'inscription : 15/05/2014

Revenir en haut Aller en bas

Re: [LMC1] TD4 - EX4

Message  hepta_seven7 le Mar 05 Aoû 2014, 17:45

Voici le résultat finale au cas où ça intéresserai quelqu'un

Code:
global main

section .data
    result   DB   `result`, 0
    
section .rodata
  msg1      DB   `Pair\n`
  lgrMsg1   DD   lgrMsg1 - msg1
  msg2      DB   `Impair\n`
  lgrMsg2   DD   lgrMsg2 - msg2

section .text

main:
  mov edx, 2 ; mettre ici un nbre pair ou impair
  bt edx, 0
  jc _impair
  
  mov eax, 5 ; service open
  mov ebx, result
  mov ecx, 1q | 2000q
  int 0x80
  
  mov ebx, eax ; service write
  mov eax, 4
  mov ecx, msg1
  mov edx, [lgrMsg1]
  int 0x80
  jmp _fin

_impair:

  mov eax, 5 ; service open
  mov ebx, result
  mov ecx, 1q | 2000q
  int 0x80
  
  mov ebx, eax ; service write
  mov eax, 4
  mov ecx, msg2
  mov edx, [lgrMsg2]
  int 0x80
  
_fin:
  mov eax, 1
  mov ebx, 0
  int 0x80
  
  

hepta_seven7

Nombre de messages : 12
Prénom : azddin
Date d'inscription : 15/05/2014

Revenir en haut Aller en bas

Re: [LMC1] TD4 - EX4

Message  nvs le Jeu 07 Aoû 2014, 14:32

il y a du code inutilement dupliqué, comme :
Code:
  mov eax, 5 ; service open
  mov ebx, result
  mov ecx, 1q | 2000q
  int 0x80

de plus, le fichier ouvert n'est pas explicitement fermé.




 pig 

_________________

nvs

Nombre de messages : 5238
Age : 44
Prénom : Nicolas
Statut : prof
Localisation : bxl
Date d'inscription : 24/11/2005

http://nvansteenkiste.googlepages.com

Revenir en haut Aller en bas

Re: [LMC1] TD4 - EX4

Message  Contenu sponsorisé Aujourd'hui à 10:50


Contenu sponsorisé


Revenir en haut Aller en bas

Voir le sujet précédent Voir le sujet suivant Revenir en haut


 
Permission de ce forum:
Vous ne pouvez pas répondre aux sujets dans ce forum