[Tasm]lire 2 entier d'un fichier et faire une adition

lire 2 entier d'un fichier et faire une adition [Tasm] - ASM - Programmation

Marsh Posté le 14-05-2008 à 03:46:19    

Bonjour,
j'ai un fichier txt 'addition.txt' se fichiers comporte une
chaîne de maximum 20 caractère sous forme 1234+56=
 
je doit afficher à l'écran 1234+56= 1290
 
mais j'ai un problème je sait pas comment lire les 2 nombre.
 
Gros MErci pour votre aide

Code :
  1. .model small
  2. .stack
  3. .code
  4. mov ax,@data
  5. mov ds,ax
  6. mov dx,OFFSET FileName
  7. mov al,2
  8. mov ah,3Dh
  9. int 21h
  10. mov Handle,ax
  11. jc ErrorOpening
  12. mov dx,offset Buffer
  13. mov bx,Handle
  14. mov cx,100
  15. mov ah,3Fh
  16. int 21h
  17. jc ErrorReading
  18. mov bx,Handle
  19. mov ah,3Eh
  20. int 21h
  21. mov cx,20
  22. mov si,OFFSET Buffer
  23. xor bh,bh
  24. mov ah,0Eh
  25. NextChar:
  26. lodsb
  27. cmp al,'+'
  28. ;je nombre2:
  29. cmp al,'='
  30. ;je entierToString:
  31. mov ax,nb1 // si mon premier nombre et tres grand 8568705 que doit je faire ??
  32. mov dx,10h
  33. mov nb1,ax
  34. ;int 10h
  35. loop NextChar
  36. mov ax,4C00h
  37. int 21h
  38. ;entierToString:  :pt1cable:  :pt1cable:  je suis bloce ici je sait pas comme faire pour concertire mes 2 entier pour l'adition
  39. ErrorOpening:
  40. mov dx,offset OpenError
  41. mov ah,09h
  42. int 21h
  43. mov ax,4C01h
  44. int 21h
  45. ErrorReading:
  46. mov dx,offset ReadError
  47. mov ah,09h   ;
  48. int 21h
  49. mov ax,4C02h
  50. int 21h
  51. .data
  52. NB1 dw  //
  53. nb2 dw
  54. Handle DW ?
  55. FileName DB "C:\test.txt",0
  56. OpenError DB "An error has occured(opening)!$"
  57. ReadError DB "An error has occured(reading)!$"
  58. Buffer DB 20 dup (?)
  59. END

Reply

Marsh Posté le 14-05-2008 à 03:46:19   

Reply

Marsh Posté le 23-06-2008 à 14:19:16    

Ton entier est lu comme une chaine de caractères en ASCII.
Ainsi, un 1 sera codé : 49
         un 2,                 50
etc.
Donc c'est pas trop compliqué. Tu fais un test sur les valeurs, tant que c'est compris entre 48 (le '0') et 57 (le '9'), c'est que tu lis ton premier nombre. Il ne te reste donc plus qu'à leur retrancher 48 pour obtenir la vraie VALEUR.
et en même temps, il faut que tu decodes ton nombre, tu fais donc un truc du genre :
 
# lecture du premier nombre
som=0
tant que t[i] compris entre 48 et 57  faire
   som= 10*som + (t[i]-48)
fin faire
 
# puis tu lis l'autre nombre :
som2=0
tant que t[i] compris entre 48 et 57  faire
   som2= 10*som2 + (t[i]-48)
fin faire
 
# somme finale :
resultat = som+som2
 
enjoy !

Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed