Accueil > > > NASM 32 - CONVERSION HEXA / DÉCIMAL => DIVISION (32 BITS) PAR 10
NASM 32 - CONVERSION HEXA / DÉCIMAL => DIVISION (32 BITS) PAR 10
Information sur la source
Description
La conversion héxa => décimal s'effectue par divisions successives par 10. Prenons l'exemple de la conversion de 255 (0xFF) : 255 / 10 = 25 dans eax + 5 dans edx 25/10 = 2 dans eax + 5 dans edx. Il faut donc afficher dans l'ordre : - le dernier quotient (<10) : 2 - le second reste : 5 - le premier reste : 5 Il y a probablement + simple. Toute suggestion sera la bienvenue. Rappel : compilation sous NASM : nasm -f bin file.asm -o file.exe
Source
- [ORG 0x0100]
-
- [SEGMENT .data]
- decimal db '0123456789'
-
- [SEGMENT .text]
- call vga_mode
- mov eax,0xFF
- call write_eax
- call end
-
- vga_mode: ; cls sur la console
- mov al,00h
- int 10h
- ret
-
- write_eax:
- push eax ; On pousse les valeurs des registres utilisés
- push ebx ; sur la pile afin de pouvoir les restaurer
- push ecx ; après calcul.
- push edx
- push si
- mov ebx,0x0A ; Diviseur dans ebx : ici division par 10.
- xor ecx,ecx ; On met ecx à 0.
- label1:
- xor edx,edx ; On met edx à 0.
- div ebx ; Division de eax par ebx.
- ; Lors d'une division avec registres
- ; de 32 bits,le quotient est placé
- ; dans eax, le reste dans edx.
- push dx ; On pousse le reste sur la pile :
-
- inc ecx ; Incrémentation de ecx pour connaître
- ; le nombre de valeurs à récupérer sur la pile
- ; lors de l'affichage du résultat de la
- ; division en décimal
- cmp eax,ebx ; Comparaison eax avec ebx :
- jg label1 ; si > on recommence
- ; sinon, la division est terminée
- push ax ; On pousse ax contenant le premier terme du résultat.
- label2: ; boucle pour affichage
- pop si ; on récupère la valeur à afficher dans si
- add si,decimal ; on l'additionne à l'offset de la chaîne décimal
- ; pour obtenir l'offset du caractère à afficher.
- mov al,[ds:si] ; On place la valeur à afficher dans al.
- mov ah,0x0E ; fonction 0x0E interruption 10h pour affichage de al.
- int 10h
- dec ecx
- cmp ecx,0x00 ; On recommence jusqu'au second caractère.
- jne label2
- pop si ; Idem : affichage du premier caractère.
- add si,decimal
- mov al,[ds:si]
- mov ah,0x0E
- int 10h
- pop si
- pop edx ; On restaure les registres avec leur valeur initiale.
- pop ecx
- pop ebx
- pop eax
- ret
-
- end: ; Fin correcte du programme.
- mov ax,0x4C00
- int 21h
- ret
[ORG 0x0100]
[SEGMENT .data]
decimal db '0123456789'
[SEGMENT .text]
call vga_mode
mov eax,0xFF
call write_eax
call end
vga_mode: ; cls sur la console
mov al,00h
int 10h
ret
write_eax:
push eax ; On pousse les valeurs des registres utilisés
push ebx ; sur la pile afin de pouvoir les restaurer
push ecx ; après calcul.
push edx
push si
mov ebx,0x0A ; Diviseur dans ebx : ici division par 10.
xor ecx,ecx ; On met ecx à 0.
label1:
xor edx,edx ; On met edx à 0.
div ebx ; Division de eax par ebx.
; Lors d'une division avec registres
; de 32 bits,le quotient est placé
; dans eax, le reste dans edx.
push dx ; On pousse le reste sur la pile :
inc ecx ; Incrémentation de ecx pour connaître
; le nombre de valeurs à récupérer sur la pile
; lors de l'affichage du résultat de la
; division en décimal
cmp eax,ebx ; Comparaison eax avec ebx :
jg label1 ; si > on recommence
; sinon, la division est terminée
push ax ; On pousse ax contenant le premier terme du résultat.
label2: ; boucle pour affichage
pop si ; on récupère la valeur à afficher dans si
add si,decimal ; on l'additionne à l'offset de la chaîne décimal
; pour obtenir l'offset du caractère à afficher.
mov al,[ds:si] ; On place la valeur à afficher dans al.
mov ah,0x0E ; fonction 0x0E interruption 10h pour affichage de al.
int 10h
dec ecx
cmp ecx,0x00 ; On recommence jusqu'au second caractère.
jne label2
pop si ; Idem : affichage du premier caractère.
add si,decimal
mov al,[ds:si]
mov ah,0x0E
int 10h
pop si
pop edx ; On restaure les registres avec leur valeur initiale.
pop ecx
pop ebx
pop eax
ret
end: ; Fin correcte du programme.
mov ax,0x4C00
int 21h
ret
Sources de la même categorie
Commentaires et avis
|
Derniers Blogs
UNE JOLIE-HORLOGE ET PAS QU'UN PEU !UNE JOLIE-HORLOGE ET PAS QU'UN PEU ! par neodante
Pour les possesseurs d'iPhone, ça y est Bijin Tokei - qui se traduit littéralement en Français par " Jolie Horloge " - est arrivé et GRATUITEMENT s'il vous plaît ! Après la version Tokyo, Hokkaido, night club, racing, Gal, "pour les mademoiselles'", . voi...
Cliquez pour lire la suite de l'article par neodante TECHDAYS PARIS 2010 : CONNECTEZ VOS DONNéES à SHAREPOINT 2010 AVEC LES BUSINESS CONNECTIVITY SERVICESTECHDAYS PARIS 2010 : CONNECTEZ VOS DONNéES à SHAREPOINT 2010 AVEC LES BUSINESS CONNECTIVITY SERVICES par ROMELARD Fabrice
Animé par: Gaetan Bouveret et Julien Chomarat Business Connectivity Services (BCS) est dans SharePoint 2010 la version 2 de Business Data Catalog (BDC dans SharePoint 2007). Il s'agit de la solution permettant de visualiser des données provenan...
Cliquez pour lire la suite de l'article par ROMELARD Fabrice [DIVERS] SUIVRE VOS SéRIES PRéFéRéS SUR LA TOILE[DIVERS] SUIVRE VOS SéRIES PRéFéRéS SUR LA TOILE par orion
Comme de nombreux geek, je suis un grand amateur de série TV et je rate régulièrement des épisodes de mes séries préférés. Une solution s'offre à vous avec ce merveilleux site : Tv Gorge - www.tvgorge.com Moteur de recherche à l'appui, vous pouvez ...
Cliquez pour lire la suite de l'article par orion TECHDAYS PARIS 2010 : LA BI DANS SHAREPOINT 2010TECHDAYS PARIS 2010 : LA BI DANS SHAREPOINT 2010 par ROMELARD Fabrice
Animé par: Vincent Bellet et Baptiste Giraudier La BI dans SharePoint 2010, Les nouveaux services d'application dans SP2010 et SQL Server Reporting services 2008 R2. La BI dans SharePoint est généralisée pour tous afin de permettre à tous les coll...
Cliquez pour lire la suite de l'article par ROMELARD Fabrice
Forum
RE : PIC 16F84RE : PIC 16F84 par pont
Cliquez pour lire la suite par pont RE : PIC 16F84RE : PIC 16F84 par belounis
Cliquez pour lire la suite par belounis RE : PIC 16F84RE : PIC 16F84 par pont
Cliquez pour lire la suite par pont
Logiciels
DB-MAIN (9.1.0)DB-MAIN (9.1.0)DB-MAIN is a data-modeling and data-architecture tool. It is designed to help developers and anal... Cliquez pour télécharger DB-MAIN Xilisoft DPG Convertisseur (5.1.37.0120)XILISOFT DPG CONVERTISSEUR (5.1.37.0120)Xilisoft DPG Convertisseur offre aux fans de Nintendo DS une bonne solution leur permettant de dé... Cliquez pour télécharger Xilisoft DPG Convertisseur GraphicsGale (2.01.01)GRAPHICSGALE (2.01.01)GraphicsGale est un logiciel de PixelArt avec de nombreuse fonctionnalités permettant de réalisé ... Cliquez pour télécharger GraphicsGale Architecte 3D (Platinum 2010)ARCHITECTE 3D (PLATINUM 2010)Architecte 3D Platinium vous permet de concevoir facilement les plans votre future maison, de l'é... Cliquez pour télécharger Architecte 3D TeamViewer 5 (TeamViewer 5)TEAMVIEWER 5 (TEAMVIEWER 5)Dépanner un ami,expliquer une manipulation devient un jeu d'enfant.
Prise en main d'un autre ord... Cliquez pour télécharger TeamViewer 5
|