PureBasic

Forums PureBasic
Nous sommes le Sam 24/Aoû/2019 19:23

Heures au format UTC + 1 heure




Poster un nouveau sujet Répondre au sujet  [ 2 messages ] 
Auteur Message
 Sujet du message: probleme procedure
MessagePosté: Mer 20/Nov/2013 9:31 
Hors ligne

Inscription: Mer 14/Sep/2011 16:59
Messages: 904
Je ne comprends pas pourquoi ce code compile sans erreurs
Code:
; DWORD IsLeapYear(DWORD Y, DWORD Gregorian)
;
; This function determines if the given year is leap in the chosen calendar.
;
; Parameters:
;   Y - year,
;   Gregorian - chosen calendar (0 - Julian, 1 - Gregorian).
;
; Returned values:
;   * 1 if the year Y is leap, 0 - in opposite case,
;   * -1 for the invalid parameters.
;
;proc   IsLeapYear, Y, Gregorian
Procedure IsLeapYear(Y, Gregorian)
 
EnableASM
PUSHFD
PUSH   ebx edx

!CheckParameters:
TEST   [Gregorian], -2               ; 0 <= Gregorian <= 1
JNZ   Error                  ;

!IsYNegative:
MOV   eax, [Y]               ; eax := Y
TEST   eax, eax
JZ   Error
JNS   CheckCalendar
; eax < 0 (Y < 0)
;
INC   eax                  ; eax := eax + 1
NEG   eax                  ; eax := -eax = -(Y + 1) = -Y - 1 =
;      = |Y| - [Y < 0] = Y'

!CheckCalendar:
CMP   [Gregorian], 0
JE   mod4

!Gregorian:
XOR   edx, edx               ; eax := E(eax / 100) = E(Y' / 100)
MOV   ebx, 100               ; edx := eax mod 100 = Y' mod 100
DIV   ebx                  ;

TEST   edx, edx
JZ   mod4

MOV   eax, edx               ; eax := edx = Y' mod 100
;
; {(Y' mod 100) mod 4 = Y' mod 4}

!mod4:
SHR   eax, 1                  ; eax := E(eax / 2); CF := eax mod 2
JC   Result                  ;

SHR   eax, 1                  ; eax := E(eax / 2); CF := eax mod 2
JMP   Result                  ;

!Error:
MOV   eax, -1
JMP   Endd

!Result:
SETNC   al                  ; eax := not CF
MOVZX   eax, al                  ;

!Endd:

POP   edx ebx
POPFD

RET ;ProcedureReturn ? (renvoie eax ?)

DisableASM
EndProcedure



; ok=IsLeapYear(2000, 1)
; Debug ok


mais si je dé-commente
; ok=IsLeapYear(2000, 1)
; Debug ok
ça ne compile plus.

Une idée ?

M.


Haut
 Profil  
Répondre en citant le message  
 Sujet du message: Re: probleme procedure
MessagePosté: Mer 20/Nov/2013 10:00 
Hors ligne

Inscription: Lun 26/Avr/2004 0:40
Messages: 14535
Mesa a écrit:
Je ne comprends pas pourquoi ce code compile sans erreurs
mais si je dé-commente
; ok=IsLeapYear(2000, 1)
; Debug ok
ça ne compile plus.

Une idée ?

M.


ben tout simplement parceque commenté
cette ligne
Code:
; ok=IsLeapYear(2000, 1)

n'appelle pas la procedure
une procedure , si il n'y a pas d'erreur de syntaxe , tu peux bien mettre ce que tu veux dedans
comme erreur , du moment qu'elle n'est pas appelé , il n'y a pas de raison que ça plante !!

exemple
Code:

Procedure debile(x)
   ; je suis une procedure débile
   toto:
   OpenWindow(1,1,1,100,100, "null",#PB_Window_SystemMenu )
   StartDrawing(1)
      goto toto
   StopDrawing()
   
EndProcedure


;debile(x)  ; commenté ça se compille

; si tu decommentes , ça va planter :)
; EPB


Haut
 Profil  
Répondre en citant le message  
Afficher les messages postés depuis:  Trier par  
Poster un nouveau sujet Répondre au sujet  [ 2 messages ] 

Heures au format UTC + 1 heure


Qui est en ligne

Utilisateurs parcourant ce forum: Aucun utilisateur enregistré et 1 invité


Vous ne pouvez pas poster de nouveaux sujets
Vous ne pouvez pas répondre aux sujets
Vous ne pouvez pas éditer vos messages
Vous ne pouvez pas supprimer vos messages

Rechercher:
Aller à:  

 


Powered by phpBB © 2008 phpBB Group | Traduction par: phpBB-fr.com
subSilver+ theme by Canver Software, sponsor Sanal Modifiye