[ASM] Conversion entier en chaine decimal

Conversion entier en chaine decimal [ASM] - ASM - Programmation

Marsh Posté le 12-03-2004 à 20:36:14    

Salut,
 
J'ai un petit soucis avec le programme suivant, il sert a convertir un entier contenu dans AX, il fonctionne trés bien sauf pour les nombres supérieur à 32767. Sans utiliser div/idiv ou autre, savez vous comment le modifier pour qu'il fonctionne pour les nombres supérieur à 32767 ? Merci d'avance.
 

Code :
  1. ;;*********************************************************************
  2. ;; ITOD
  3. ;; Param entrée: SI (nombre de case du tableau) AX (valeur entiere)
  4. ;; Affiche un entier en decimal de 1 à 8 caracteres
  5. ;; *******************************************************************       
  6. itod PROC NEAR
  7.   PUSH CX
  8.   PUSH DS
  9.   PUSH DX
  10.   PUSH BX
  11.   ;;-------------------------------------------
  12. debutd: 
  13.   MOV CX,donlib
  14.   MOV DS,CX
  15.        
  16.   ;; Sauvergarde de la taille tableau voulu
  17.   MOV tailleTAB,SI       
  18.        
  19.   ;; Initialisation tableau
  20. initia:
  21.   MOV SI,0
  22. initiaDATA:   
  23.   ;; Boucle pour initialiser le tableau
  24.   CMP SI,tailleTAB
  25.   JG debut2d
  26.   MOV byte ptr[TABD+SI],'0'
  27.   INC SI
  28.   JMP initiaDATA
  29.        
  30. debut2d:
  31.   MOV SI,tailleTAB
  32.   MOV BX,AX              ;On rentre nombre dans BX
  33.   MOV CX,10                  ;On rentre 10 dans CX
  34. boucle: 
  35.   MOV DX,0                   ;Initialisation de DX à 0
  36.   CMP BX,CX                  ;On compare BX avec CX
  37.   JL suited                   ;Si BX<CX on jump à suite
  38. boucle2:
  39.   SUB BX,CX                 ;On soustrait CX à BX
  40.   INC DX                    ;Incrémentation de DX
  41.   CMP BX,CX                 ;On compare BX avec CX
  42.   JGE boucle2               ;Si BX>=CX, jump à boucle 2
  43.   MOV BYTE PTR[TABD+SI],'0' ;On indique qu'on rentre un chiffre ds le tab
  44.   ADD BYTE PTR[TABD+SI],BL  ;On rentre le nombre BL dans le tab
  45.   MOV BX,DX                 ;On copie DX dans BX
  46.   DEC SI                    ;On décrémente SI
  47.   JMP boucle                ;Jump à boucle
  48. suited: 
  49.   MOV BYTE PTR[TABD+SI],'0' ;On indique qu'on rentre u nchiffre ds le tab
  50.   ADD BYTE PTR[TABD+SI],BL  ;Et on rentre le dernier chiffre du nombre
  51.   MOV SI,0
  52. aff:   
  53.   ;; Boucle pour afficher le 1er jusqu'a SI eme du debut
  54.   CMP SI,tailleTAB
  55.   JG finitod
  56.   MOV AH,0
  57.   MOV AL,byte ptr[TABD+SI]
  58.  
  59.   MOV DX,AX
  60.   MOV AH,2             
  61.   INT 21H
  62.  
  63.   INC SI
  64.   JMP aff
  65. finitod:
  66.   POP BX
  67.   POP DX
  68.   POP DS
  69.   POP CX
  70.   ;;--------------------------------------
  71.   RET
  72. itod ENDP

Reply

Marsh Posté le 12-03-2004 à 20:36:14   

Reply

Sujets relatifs:

Leave a Replay

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