Page 1 sur 1

Débutant

Publié : lun. 25/nov./2013 18:53
par Mesa
Il y a longtemps que je n'ai pas programmé en assembleur et "jamais" sous PB et puis il manquait une rubrique pour le deboguage...

Quelqu'un peut-il me faire fonctionner ce code (et me dire ce qui cloche si possible :) )

Code : Tout sélectionner

DataSection
  monthlen:
  Data.b 31,  28,  31,  30,  31,  30,  31,  31,  30,  31,  30,  31, 31,  29,  31,  30,  31,  30,  31,  31,  30,  31,  30,  31
EndDataSection

Global debugexx=0

Procedure MDToDayNum(M, D, LeapYearFlag)
  
  ;Static monthlength;pas réussi à faire fonctionner avec le MOVZX même avec so_nomprocedure.v_nominfo

  Protected.i monthlength  ;integer est-il le bon choix pour 32b et 64b ?
  monthlength=?monthlen
  ;Debug monthlength
  
  EnableASM
  MOV	ebx, LeapYearFlag				; ebx := LeapYearFlag
  MOV	edx, M
  ;Je veux : eax := MonthLen[M - 1 + LeapYearFlag]
  ;MOVZX	eax, [p.v_monthlength + edx -1 +ebx] ; pourquoi ça ne fonctionne pas ?
  MOVZX	eax, byte[p.v_monthlength] ; essai de deboggage
  
  ;------------------------
  MOV	debugexx, eax	
  ; Debug debugexx   ;attention debug change le eax
  ;------------------------	
  DisableASM
  ProcedureReturn
EndProcedure

Debug MDToDayNum(1, 2, 1) ; mauvais
Debug PeekB(?monthlen)    ; bon
Debug debugexx            ; mauvais

Mesa.

Re: Débutant

Publié : lun. 25/nov./2013 22:53
par PAPIPP
bonjour Mesa

Peut-être comme cela si j'ai bien compris
je n'ai gardé la section data que pour le debug.
Mais à quoi sert le paramètre D ? le jour du mois ? La formule complète serait opportune.

Code : Tout sélectionner

DataSection
	monthlen:
	Data.b 31,28,31,30,31,30,31,31,30,31,30,31,31,29,31,30,31,30,31,31,30,31,30,31
EndDataSection
Global debugexx=0
Procedure MDToDayNum(M,D,LeapYearFlag)
	;Static monthlength;pas réussi à faire fonctionner avec le MOVZX même avec so_nomprocedure.v_nominfo
; 	Protected.i monthlength  ;integer est-il le bon choix pour 32b et 64b ?
; 	monthlength=?monthlen
; 	Debug mp_h(monthlength,32,222)
	;Debug monthlength
		EnableASM
  LEA ebx,[monthlen]
  MOV edx,0
  XOR eax,eax
	MOV eax,LeapYearFlag            ; ebx := LeapYearFlag
	MOV edx,M
	SUB edx,2
	ADD eax,edx
	XLATB
	;Je veux : eax := MonthLen[M - 1 + LeapYearFlag]
	;MOVZX   eax, [p.v_monthlength + edx -1 +ebx] ; pourquoi ça ne fonctionne pas ?
	
	;------------------------
	MOV debugexx,eax
	; Debug debugexx   ;attention debug change le eax
	;------------------------
	DisableASM
	ProcedureReturn
	!monthlen:
	!DB 31,28,31,30,31,30,31,31,30,31,30,31,31,29,31,30,31,30,31,31,30,31,30,31
EndProcedure

Debug MDToDayNum(1,2,1) ; bon
Debug PeekB(?monthlen)    ; bon
Debug debugexx            ;bon

Debug MDToDayNum(2,2,1) ; bon
Debug PeekB((?monthlen)+1)    ; bon
Debug debugexx            ; bon

Debug MDToDayNum(4,2,1) ; bon
Debug PeekB((?monthlen)+3)    ; bon
Debug debugexx            ; bon


Re: Débutant

Publié : mar. 26/nov./2013 11:31
par Mesa
Merci bien :D

En fait j'essaie de traduire ce code http://mikhajduk.houa.org/EN/index.php?f=Links rubrique projects calendar trouvé par kernadec ici http://www.purebasic.fr/french/viewtopi ... =3&t=14026

La traduction de la fonction isleapyear c'est bien passé, maintenant j'essaie de traduire MDToDayNum(M, D, LeapYearFlag)

[Edition] J'ai réussi, je poste un fil nommé rang du jour

Mesa.

Re: Débutant

Publié : ven. 13/déc./2013 12:20
par Mesa
Je dois être miro aujourd'hui mais je ne trouve pas e fichier PureBasic.asm.

Il est où ?

Merci.

M.

Re: Débutant

Publié : ven. 13/déc./2013 13:47
par kernadec
bonjour Mesa
pour purebasic.asm
je l'ai a la racine du répertoire Purebasic
et dans Purebasic\Examples\Sources

Cordialement

Re: Débutant

Publié : sam. 14/déc./2013 10:32
par kernadec
bonjour Mesa
j'ai contacté Mikołaj Hajduk pour lui demander une version de sa bibliothèque dans un autre langage
il m'as répondu qu'il allait mettre sur son site une version en langage C dans quelques temps.

Vraiment sympa Mikołaj

Cordialement