TD3[printd.asm]

Voir le sujet précédent Voir le sujet suivant Aller en bas

TD3[printd.asm]

Message  captaing le Dim 21 Mar 2010, 18:39

Bonsoir, j'ai repri un bout de code du printd.asm pour mon programme td3 mais je ne le comprend pas trop bien.
Je sais que c'est une histoire de pointeur et de code ascii mais sans plus!
Si quelqu'un pouvait m'aider, ce serait sympas.
Code:
mov ebx,10      ; base
          mov esi,nb+10  ; position
          mov ecx,1
digit:  mov edx,0
          div ebx
          add dl,30h      ; ascii
          mov [esi],dl
          dec esi
          inc ecx
          cmp eax,0
          jne digit

          mov byte [esi],'-'
          inc ecx

          mov edx,ecx
          mov ecx,nb
          add ecx,12
          sub ecx,edx
            mov eax,4
          mov ebx,1
          int 0x80

captaing

Nombre de messages : 26
Prénom : stevie
Date d'inscription : 16/10/2008

Revenir en haut Aller en bas

Re: TD3[printd.asm]

Message  Bill le Dim 21 Mar 2010, 19:38

Pour ce qui est du pointeur, je ne sais pas trop, moi j'ai utilisé le pile pour mettre les chiffres dans le bon ordre.
Pour la valeur ascii, on additionne le chiffre que l'on a par 30h car quand tu vas voir dans le tableau ascii (par exemple celui-ci) on voit que les valeurs ascii des chiffres e 0 à 9 sont entre 30h et 39h.

Bill

Nombre de messages : 73
Age : 28
Prénom : Kevin
Statut : Ancien
Localisation : Brussels
Date d'inscription : 07/10/2009

Revenir en haut Aller en bas

Re: TD3[printd.asm]

Message  nvs le Dim 21 Mar 2010, 20:58

Bill a écrit:Pour ce qui est du pointeur, je ne sais pas trop, moi j'ai utilisé le pile pour mettre les chiffres dans le bon ordre.
c'est une alternative intéressante Smile

Bill a écrit:Pour la valeur ascii, on additionne le chiffre que l'on a par 30h car quand tu vas voir dans le tableau ascii (par exemple celui-ci) on voit que les valeurs ascii des chiffres e 0 à 9 sont entre 30h et 39h.
à ce propos, le code de printd eût été plus clair avec
Code:
'0'
à la place de
Code:
30h
ça ne fait pas un pli Wink





cyclops

_________________

nvs

Nombre de messages : 5238
Age : 44
Prénom : Nicolas
Statut : prof
Localisation : bxl
Date d'inscription : 24/11/2005

http://nvansteenkiste.googlepages.com

Revenir en haut Aller en bas

Re: TD3[printd.asm]

Message  deeploy le Sam 27 Mar 2010, 17:12

Je remets le poste du programme au complet parce qu'il y a autre chose que je n'ai pas compris dans le programme.

Je n'arrive pas à comprendre dans le digith la ligne :
add edx,carhex

Je vois que EDX est à zéro mais je ne comprends pas l'effet que ca fait en additionnant 01234....F
:/

Merci d'avance

Code:

; Ecrit par J.C. JAUMAIN
; Dernière modification, le 4/1/2008
;===========================
   section .data
;==========================
nb    DB 'sxxxxxxxxxx '
LF    DB 10
carhex    DB '0123456789ABCDEF'
;===========================
      section .bss
;===========================
;===========================
global printd
;===========================
   section .text
;===========================
printd:   push ebp
   mov ebp,esp
   pushad
;===========================
; Impression hexadécimale
;===========================
   mov eax,[ebp+8]
   mov edi,16   ; base
   mov esi,nb+10   ; position
   mov ecx,8

digith:   mov edx,0
   div edi
   add edx,carhex
   mov bl,[edx]
   mov [esi],bl
   dec esi
   loop digith

   mov eax,4
   mov ebx,1
   mov ecx,nb+3
   mov edx,9
        int 0x80

;===========================
; Impression décimale positive
;===========================
   mov eax,[ebp+8]
   mov ebx,10   ; base
   mov esi,nb+10   ; position
   mov ecx,1
digit:   mov edx,0
   div ebx
   add dl,30h   ; ascii
   mov [esi],dl
   dec esi
   inc ecx
   cmp eax,0
   jne digit

   mov byte [esi],'+'
   inc ecx

   mov edx,ecx
   mov ecx,nb
   add ecx,12
   sub ecx,edx
   mov eax,4
   mov ebx,1
        int 0x80
;===========================
; Impression décimale négative
;===========================
   mov eax,[ebp+8]
   cmp eax,0
   jge fin
   neg eax
   mov ebx,10   ; base
   mov esi,nb+10   ; position
   mov ecx,1
digitn:   mov edx,0
   div ebx
   add dl,30h   ; ascii
   mov [esi],dl
   dec esi
   inc ecx
   cmp eax,0
   jne digitn

   mov byte [esi],'-'
   inc ecx

   mov edx,ecx
   mov ecx,nb
   add ecx,12
   sub ecx,edx
   mov eax,4
   mov ebx,1
        int 0x80
;===========================
; Impression saut de ligne
;===========================
fin:   mov eax,4
   mov ebx,1
   mov ecx,LF
   mov edx,1
   int 0x80

   popad
   pop ebp
   ret 4



deeploy

Nombre de messages : 14
Age : 29
Prénom : kevin
Statut : étudiant télécoms et réseaux 1ère
Date d'inscription : 10/11/2009

Revenir en haut Aller en bas

Re: TD3[printd.asm]

Message  nvs le Sam 27 Mar 2010, 20:18

deeploy a écrit:Je n'arrive pas à comprendre dans le digith la ligne :
add edx,carhex

Je vois que EDX est à zéro mais je ne comprends pas l'effet que ca fait en additionnant 01234....F
:/
sauf que carhex est une adresse...





Cool

_________________

nvs

Nombre de messages : 5238
Age : 44
Prénom : Nicolas
Statut : prof
Localisation : bxl
Date d'inscription : 24/11/2005

http://nvansteenkiste.googlepages.com

Revenir en haut Aller en bas

Re: TD3[printd.asm]

Message  Contenu sponsorisé Aujourd'hui à 10:56


Contenu sponsorisé


Revenir en haut Aller en bas

Voir le sujet précédent Voir le sujet suivant Revenir en haut


 
Permission de ce forum:
Vous ne pouvez pas répondre aux sujets dans ce forum