players | 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 :
- ;;*********************************************************************
- ;; ITOD
- ;; Param entrée: SI (nombre de case du tableau) AX (valeur entiere)
- ;; Affiche un entier en decimal de 1 à 8 caracteres
- ;; *******************************************************************
- itod PROC NEAR
- PUSH CX
- PUSH DS
- PUSH DX
- PUSH BX
- ;;-------------------------------------------
- debutd:
- MOV CX,donlib
- MOV DS,CX
-
- ;; Sauvergarde de la taille tableau voulu
- MOV tailleTAB,SI
-
- ;; Initialisation tableau
- initia:
- MOV SI,0
- initiaDATA:
- ;; Boucle pour initialiser le tableau
- CMP SI,tailleTAB
- JG debut2d
- MOV byte ptr[TABD+SI],'0'
- INC SI
- JMP initiaDATA
-
- debut2d:
- MOV SI,tailleTAB
- MOV BX,AX ;On rentre nombre dans BX
- MOV CX,10 ;On rentre 10 dans CX
- boucle:
- MOV DX,0 ;Initialisation de DX à 0
- CMP BX,CX ;On compare BX avec CX
- JL suited ;Si BX<CX on jump à suite
- boucle2:
- SUB BX,CX ;On soustrait CX à BX
- INC DX ;Incrémentation de DX
- CMP BX,CX ;On compare BX avec CX
- JGE boucle2 ;Si BX>=CX, jump à boucle 2
- MOV BYTE PTR[TABD+SI],'0' ;On indique qu'on rentre un chiffre ds le tab
- ADD BYTE PTR[TABD+SI],BL ;On rentre le nombre BL dans le tab
- MOV BX,DX ;On copie DX dans BX
- DEC SI ;On décrémente SI
- JMP boucle ;Jump à boucle
- suited:
- MOV BYTE PTR[TABD+SI],'0' ;On indique qu'on rentre u nchiffre ds le tab
- ADD BYTE PTR[TABD+SI],BL ;Et on rentre le dernier chiffre du nombre
- MOV SI,0
- aff:
- ;; Boucle pour afficher le 1er jusqu'a SI eme du debut
- CMP SI,tailleTAB
- JG finitod
- MOV AH,0
- MOV AL,byte ptr[TABD+SI]
-
- MOV DX,AX
- MOV AH,2
- INT 21H
-
- INC SI
- JMP aff
- finitod:
- POP BX
- POP DX
- POP DS
- POP CX
- ;;--------------------------------------
- RET
- itod ENDP
|
|