Soyez le premier à donner votre avis sur cette source.
Snippet vu 10 053 fois - Téléchargée 40 fois
[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
Je te send mon utilitaire qui te calculera tout cela.
mov ecx, 3435973837
mul ecx
shr edx, 3
J'ai pas du tout compris ca!
C'est ma première routine en assembleur, excepté le Hello World de prise en main.
J'essaie en fait de programmer un convertisseur multi-base pour me familiariser avec l'assembleur.
Visiblement ça prendra du temps, je le prendrai.
@++.
Vous n'êtes pas encore membre ?
inscrivez-vous, c'est gratuit et ça prend moins d'une minute !
Les membres obtiennent plus de réponses que les utilisateurs anonymes.
Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.
Le fait d'être membre vous permet d'avoir des options supplémentaires.