PureBasic

Forums PureBasic
Nous sommes le Lun 24/Fév/2020 10:06

Heures au format UTC + 1 heure




Poster un nouveau sujet Répondre au sujet  [ 17 messages ]  Aller à la page 1, 2  Suivante
Auteur Message
 Sujet du message: directives asm de purbasic?????
MessagePosté: Mar 26/Avr/2005 15:24 
Hors ligne
Avatar de l’utilisateur

Inscription: Mar 26/Avr/2005 15:19
Messages: 315
salut
quelles sont les directives en assembleur que purbasic accepte.
je n arrive pas a reserver une zone memoire.
rb 200 , resb 200 ou autre ne sont pas pris en compte.
:mad:
merci


Haut
 Profil  
Répondre en citant le message  
 Sujet du message:
MessagePosté: Mar 26/Avr/2005 15:31 
Hors ligne
Avatar de l’utilisateur

Inscription: Ven 11/Fév/2005 17:34
Messages: 4230
Localisation: Arras, France
Regarde la doc de FASM: http://flatassembler.net/


Haut
 Profil  
Répondre en citant le message  
 Sujet du message:
MessagePosté: Mar 26/Avr/2005 17:21 
Hors ligne
Avatar de l’utilisateur

Inscription: Mar 26/Avr/2005 15:19
Messages: 315
merci pour ta reponse rapide, mais sur ce doc , ils disent d employer
rb,rd....
mais marche pas sous purebasic.


Haut
 Profil  
Répondre en citant le message  
 Sujet du message:
MessagePosté: Mar 26/Avr/2005 17:27 
Hors ligne
Avatar de l’utilisateur

Inscription: Jeu 22/Jan/2004 14:31
Messages: 3518
Localisation: Sourans
tonton a écrit:
merci pour ta reponse rapide, mais sur ce doc , ils disent d employer
rb,rd....
mais marche pas sous purebasic.


met un ! devant ta déclaration et si ça ne va pas met ton code ici pour voir ce qui cloche


Haut
 Profil  
Répondre en citant le message  
 Sujet du message:
MessagePosté: Mar 26/Avr/2005 17:27 
Hors ligne
Avatar de l’utilisateur

Inscription: Mer 28/Jan/2004 16:22
Messages: 1092
Localisation: 76
As-tu activé l'assembleur en ligne dans les options de ton projet ?
As-tu essayé en mettant ! devant les instructions ?

_________________
Heis Spiter, webmaster du site http://www.heisspiter.net
Développeur principal et administrateur du projet Bird Chat
Parti courir au bonheur du dév. public et GPL :D


Haut
 Profil  
Répondre en citant le message  
 Sujet du message:
MessagePosté: Mar 26/Avr/2005 17:46 
Hors ligne
Avatar de l’utilisateur

Inscription: Mar 26/Avr/2005 15:19
Messages: 315
comme ci dessous,je suis obligé de remplir une grosse zonne de data pour reserver l espace de travail.
mais c 'est pas saint.
le ! avant marche pas non plus......

Code:
InitSprite()
InitKeyboard()
InitMouse()
OpenScreen(1024,768, 32, "")
StartDrawing(ScreenOutput())

addecr0 = DrawingBuffer()
StopDrawing()
  FlipBuffers()
  StartDrawing(ScreenOutput())
addecr1= DrawingBuffer()
StopDrawing()

   addecr=addecr1

addd=?dat
addd1=?dat1

   x1.f
   z.l
   coo.l
   
     
     emp=1           ;amplitude de depart
    negampli=-140       ;amplitude inferieur
    posampli=140       ;amplitude superieur 
    decomp=0          ;vitesse
     
    z=0
    b=100
    prem=0
    posi=1 
    limite =posi*160
    pause=1
    zoom=10
    ris=0
    sauvss=0



deb1:
  prem=0
  x=150
  y=500
  a=0
  x1=-150
  y1=-150
 
effac:
 

  MOV  eax,00h
  MOV  ebx,00h
  MOV  edx,addecr
  MOV  ecx,170ffh

eff:     
  MOV [edx+ebx],eax
  MOV [edx+ebx+4],eax
  MOV [edx+ebx+8],eax
  MOV [edx+ebx+12],eax
  MOV [edx+ebx+16],eax
  MOV [edx+ebx+20],eax
  MOV [edx+ebx+24],eax
  MOV [edx+ebx+28],eax
  ADD ebx,32
  LOOP l_eff



  MOV eax,addd
  MOV ecx,1500
  MOV edx,0ffffffffh
zero1:
  MOV [eax],edx
  ADD  eax,4
  LOOP l_zero1
  MOV eax,addd1
  MOV ecx,1500
  MOV edx,0h
zero2:
  MOV [eax],edx
  ADD  eax,4
  LOOP l_zero2
  JMP  l_dessin
top:
  MOV  eax,y
  ADD  eax,z
  MOV  coo,eax
  MOV  eax,x
  ROL  eax,2
  MOV  ris,eax
  MOV  eax,addd
  ADD  eax,ris
  MOV  edx,coo
  CMP  [eax],edx
  JB   l_pasaff1
  JMP  l_affplot0
pasaff1:
  MOV  eax,addd1
  ADD  eax,ris
  MOV  edx,coo
  CMP  [eax],edx
  JA   l_pasaff
affplot0:
  MOV  eax,addd1
  ADD  eax,ris
  MOV  edx,coo
  CMP  [eax],edx
  JA   l_affplot
  MOV  [eax],edx
 
affplot:
  MOV  eax,x
  ROL  eax,2
  MOV  edx,coo
  ROL  edx,8
  ROL  edx,4
  ADD  eax,edx
  MOV  esi,addecr
  ADD  esi,eax
  MOV  eax,000ff00h
  MOV  [esi],eax
pasaff:
  CMP  prem,0
  JNE  l_pasa0
  MOV  eax,addd1
  ADD  eax,ris
  MOV  edx,coo
  MOV  [eax],edx
pasa0:   
  MOV  eax,addd
  ADD  eax,ris
  MOV  edx,coo
  CMP  [eax],edx
  JB   l_dessin
  MOV  [eax],edx
dessin:
       x1=x1+0.5
       z=((Sin(Sqr((x1*x1)+(y1*y1))/zoom)))*emp
  INC  x
  MOV  eax,760
  ADD  eax,a
  CMP  x,eax
  JLE  l_top
  MOV  b,0
  MOV  prem,1
  MOV  x,150
  MOV  eax,a
  ADD  eax,posi
  MOV  a,eax
  SUB  y,1
       x1=-150
  ADD  y1,2
  MOV  eax,x
  ADD  eax,a
  MOV  x,eax
  MOV  eax,a
  CMP  eax,limite
  JLE  l_dessin


FlipBuffers()

  MOV  eax,addecr
  CMP  eax,addecr1
  JNE  l_flip
  MOV  eax,addecr0
  MOV  addecr,eax
  JMP  l_finflip
flip: 
  MOV  eax,addecr1
  MOV  addecr,eax   
finflip:

   stopit:
  ExamineKeyboard()
 
    If KeyboardPushed(#PB_Key_Left)
     posampli=posampli+1
     negampli=negampli-1
     emp=emp+1
    EndIf
    If KeyboardPushed(#PB_Key_Right)
   posampli=posampli-1
     negampli=negampli+1
     emp=emp-1
     EndIf
   If KeyboardPushed(#PB_Key_Up)
     zoom=zoom+1
   EndIf
    If KeyboardPushed(#PB_Key_Down)
   zoom=zoom-1
    EndIf
  If KeyboardPushed(#PB_Key_Escape)
     StopDrawing()
    End
   EndIf
    If KeyboardPushed(#pb_key_a)
    Goto stopit
    EndIf
   
   Goto deb1
!section '.data' Data readable writeable

dat:
! rd 1500

dat1:
! rd 1500   
   
 


    End


Dernière édition par tonton le Mar 26/Avr/2005 18:14, édité 2 fois.

Haut
 Profil  
Répondre en citant le message  
 Sujet du message:
MessagePosté: Mar 26/Avr/2005 18:01 
Hors ligne
Avatar de l’utilisateur

Inscription: Jeu 22/Jan/2004 14:31
Messages: 3518
Localisation: Sourans
Essaye ceci à partir du Goto deb1
Mets le nombre de mot de 4 octets correspondant à la taille voulue (j'ai pas compté...)

Si je me souviens bien, rd sert pour les mots de 4 bits.
Si on veut réserver de la place , je pense qu'il faut déclarer en am la section

Code:
Goto deb1

!section '.data' Data readable writeable

dat:
! rd 2800

dat1:
! rd 2800


Haut
 Profil  
Répondre en citant le message  
 Sujet du message:
MessagePosté: Mar 26/Avr/2005 18:12 
Hors ligne
Avatar de l’utilisateur

Inscription: Mar 26/Avr/2005 15:19
Messages: 315
merci denis, ca marche avec ta methode. 8)

j' ai corrigé le post de la source en dessus.

a+


Haut
 Profil  
Répondre en citant le message  
 Sujet du message:
MessagePosté: Mar 26/Avr/2005 18:26 
Hors ligne
Avatar de l’utilisateur

Inscription: Ven 11/Fév/2005 17:34
Messages: 4230
Localisation: Arras, France
Très bel effet ;)


Haut
 Profil  
Répondre en citant le message  
 Sujet du message:
MessagePosté: Mar 26/Avr/2005 18:30 
Hors ligne
Avatar de l’utilisateur

Inscription: Jeu 22/Jan/2004 14:31
Messages: 3518
Localisation: Sourans
djes a écrit:
Très bel effet ;)


Il faut remplacer
LOOP l_eff

par

!LOOP l_eff


sinon on a une erreur de saut


Haut
 Profil  
Répondre en citant le message  
 Sujet du message:
MessagePosté: Mar 26/Avr/2005 18:35 
Hors ligne
Avatar de l’utilisateur

Inscription: Ven 23/Jan/2004 18:10
Messages: 2527
Merci les plantages :(
Code:
InitSprite()
InitKeyboard()
InitMouse()
OpenScreen(1024,768, 32, "")

If StartDrawing(ScreenOutput())

  addecr0 = DrawingBuffer()
  StopDrawing()
 
EndIf

FlipBuffers()

If StartDrawing(ScreenOutput())

  addecr1= DrawingBuffer()
  StopDrawing()
 
EndIf


attention au startdrawing...

Dri


Haut
 Profil  
Répondre en citant le message  
 Sujet du message:
MessagePosté: Mar 26/Avr/2005 18:43 
Hors ligne
Avatar de l’utilisateur

Inscription: Mar 26/Avr/2005 15:19
Messages: 315
Dr. Dri a écrit:
Merci les plantages :(
Code:
InitSprite()
InitKeyboard()
InitMouse()
OpenScreen(1024,768, 32, "")

If StartDrawing(ScreenOutput())

  addecr0 = DrawingBuffer()
  StopDrawing()
 
EndIf

FlipBuffers()

If StartDrawing(ScreenOutput())

  addecr1= DrawingBuffer()
  StopDrawing()
 
EndIf


attention au startdrawing...

Dri


soyez indulgent :lol:
ca fait une semaine que j utilise purbasic apres 10 ans d inactivité dans
la programmation.

chez moi ca plante pas :)

voici la version basic plus stable. et aussi rapide 8O

Code:
InitSprite()
InitKeyboard()
InitMouse()
OpenScreen(1024,768, 32, "")

Dim tableau(1500)
Dim tableau2(1500)


   
   x1.f
   y1.f
   posi.f
   a.f
   
     emp=-100           ;amplitude de depart
    negampli=-140       ;amplitude inferieur
    posampli=140       ;amplitude superieur 
    decomp=0          ;vitesse
     
    z=0
    b=100
    prem=0
    posi=1 
    limite =posi*80
    pause=1
    zoom=200
 

deb1:

  prem=0
  x=150
  y=500
  a=0
  x1=-150
  y1=-150
  emp=emp+decomp 
  If emp>posampli
   decomp=-decomp
     EndIf
   If emp<negampli
   decomp=-decomp
   EndIf


For i =1 To 1000
tableau(i)=1000
Next
For i =1 To 1000
tableau2(i)=000
Next
StartDrawing(ScreenOutput())
Goto  dessin

   
    top:
    If (y+z)>=tableau(x)
       If (y+z)<=tableau2(x)
        Goto pasaff
    EndIf
   EndIf
    If tableau2(x)<(y+z)
    tableau2(x)=(y+z)
    EndIf
      Plot(x,y+z,RGB(0,255,0))
      coox=x
      cooy=(y+z)
     
    pasaff:
     If prem=0
      tableau2(x)=(y+z)
      EndIf
     
     If tableau(x)>=(y+z)
    tableau(x)=(y+z)
EndIf
dessin:
            INC x
           x1=x1+0.5
       z1=(Cos((Sqr((x1*x1)/zoom+(y1*y1)/zoom))))*emp
       z=z1
           If x<760+a
    Goto top
    EndIf
 

  b=0
    prem=1
  x=150
  x1=-150
y1=y1+3.8
     a=a+posi
     SUB y,2
       
   x=x+a
    If a <limite
         Goto dessin
      EndIf

FlipBuffers()
ClearScreen(0,0,0)
StopDrawing()

   stopit:
  ExamineKeyboard()
 
    If KeyboardPushed(#PB_Key_Left)
     posampli=posampli+1
     negampli=negampli-1
     emp=emp+1
    EndIf
    If KeyboardPushed(#PB_Key_Right)
   posampli=posampli-1
     negampli=negampli+1
     emp=emp-1
     EndIf
   If KeyboardPushed(#PB_Key_Up)
     zoom=zoom+1
    EndIf
    If KeyboardPushed(#PB_Key_Down)
   zoom=zoom-1
    EndIf
  If KeyboardPushed(#PB_Key_Escape)
     StopDrawing()
    End
   EndIf
    If KeyboardPushed(#pb_key_a)
    Goto stopit
    EndIf
   

   Goto deb1
    End


Haut
 Profil  
Répondre en citant le message  
 Sujet du message:
MessagePosté: Mar 26/Avr/2005 19:02 
Hors ligne
Avatar de l’utilisateur

Inscription: Ven 23/Jan/2004 18:10
Messages: 2527
la version basic, plus stable et rapide
mais surtout qui fonctionne !
chez moi la version asm me produit une image qui n'a rien à voir...

et là je peux voir un superbe effet :D

aussi je vais être indulgent, je vais te laisser une journée pour mettre ton code entre balises code :P
Code:
[code][/code]


Dri


Haut
 Profil  
Répondre en citant le message  
 Sujet du message:
MessagePosté: Mar 26/Avr/2005 19:45 
Hors ligne
Avatar de l’utilisateur

Inscription: Ven 11/Fév/2005 17:34
Messages: 4230
Localisation: Arras, France
Chez moi ça marche aussi dès que j'enlève le debugger ;)
Par contre, tu risques d'être surpris car il est rare de devoir utiliser l'assembleur en pure, tant celui-ci est rapide! Bien sûr, si tu fais des démos, c'est une autre histoire...


Haut
 Profil  
Répondre en citant le message  
 Sujet du message:
MessagePosté: Mar 26/Avr/2005 22:45 
Hors ligne
Avatar de l’utilisateur

Inscription: Mer 28/Jan/2004 20:58
Messages: 4312
Localisation: Clermont ferrand OU Olsztyn
j'ai corrigé la fin de la source (un Stopdrawing() qui trainait, il y avait aussi FlipBuffers() et ClearScreen(0, 0, 0) de mal placé)

sinon, c'est génial ce code :D (à part les goto partout)

Code:
InitSprite()
InitKeyboard()
InitMouse()
OpenScreen(1024, 600, 32, "")

Dim tableau(1500)
Dim tableau2(1500)



x1.f
y1.f
posi.f
a.f

emp = -100 ; amplitude de depart
negampli = -140 ; amplitude inferieur
posampli = 140 ; amplitude superieur
decomp = 0 ; vitesse

z = 0
b = 100
prem = 0
posi = 1
limite = posi * 80
pause = 1
zoom = 200


deb1 :

prem = 0
x = 150
y = 500
a = 0
x1 = -150
y1 = -150
emp = emp + decomp
If emp > posampli
   decomp = -decomp
EndIf
If emp < negampli
   decomp = -decomp
EndIf


For i = 1 To 1000
   tableau(i) = 1000
Next
For i = 1 To 1000
   tableau2(i) = 000
Next
StartDrawing(ScreenOutput())
   Goto dessin
   
   
   top :
   If (y + z) >= tableau(x)
      If (y + z) <= tableau2(x)
         Goto pasaff
      EndIf
   EndIf
   If tableau2(x) < (y + z)
      tableau2(x) = (y + z)
   EndIf
   Plot(x, y + z, RGB(0, 255, 0))
   coox = x
   cooy = (y + z)
   
   pasaff :
   If prem = 0
      tableau2(x) = (y + z)
   EndIf
   
   If tableau(x) >= (y + z)
      tableau(x) = (y + z)
   EndIf
   dessin :
   INC x
   x1 = x1 + 0.5
   z1 = (Cos((Sqr((x1 * x1) / zoom + (y1 * y1) / zoom)))) * emp
   z = z1
   If x < 760 + a
      Goto top
   EndIf
   
   
   b = 0
   prem = 1
   x = 150
   x1 = -150
   y1 = y1 + 3.8
   a = a + posi
   SUB y, 2
   
   x = x + a
   If a < limite
      Goto dessin
   EndIf
   
StopDrawing()
FlipBuffers()
ClearScreen(RGB(0, 0, 0))

stopit :
ExamineKeyboard()

If KeyboardPushed(#PB_Key_Left)
   posampli = posampli + 1
   negampli = negampli - 1
   emp = emp + 1
EndIf
If KeyboardPushed(#PB_Key_Right)
   posampli = posampli - 1
   negampli = negampli + 1
   emp = emp - 1
EndIf
If KeyboardPushed(#PB_Key_Up)
   zoom = zoom + 1
EndIf
If KeyboardPushed(#PB_Key_Down)
   zoom = zoom - 1
EndIf
If KeyboardPushed(#PB_Key_Escape)
   End
EndIf
Goto deb1

_________________
Je ne suis pas à moitié Polonais mais ma moitié est polonaise ... Vous avez suivi ?

[Intel quad core Q9400 2.66mhz, ATI 4870, 4Go Ram, XP (x86) / 7 (x64)]


Haut
 Profil  
Répondre en citant le message  
Afficher les messages postés depuis:  Trier par  
Poster un nouveau sujet Répondre au sujet  [ 17 messages ]  Aller à la page 1, 2  Suivante

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