directives asm de purbasic?????

Pour discuter de l'assembleur
tonton
Messages : 315
Inscription : mar. 26/avr./2005 15:19

directives asm de purbasic?????

Message par tonton »

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
Avatar de l’utilisateur
djes
Messages : 4252
Inscription : ven. 11/févr./2005 17:34
Localisation : Arras, France

Message par djes »

Regarde la doc de FASM: http://flatassembler.net/
tonton
Messages : 315
Inscription : mar. 26/avr./2005 15:19

Message par tonton »

merci pour ta reponse rapide, mais sur ce doc , ils disent d employer
rb,rd....
mais marche pas sous purebasic.
Anonyme2
Messages : 3518
Inscription : jeu. 22/janv./2004 14:31
Localisation : Sourans

Message par Anonyme2 »

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
Heis Spiter
Messages : 1092
Inscription : mer. 28/janv./2004 16:22
Localisation : 76
Contact :

Message par Heis Spiter »

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
tonton
Messages : 315
Inscription : mar. 26/avr./2005 15:19

Message par tonton »

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 : Tout sélectionner

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 modification par tonton le mar. 26/avr./2005 18:14, modifié 2 fois.
Anonyme2
Messages : 3518
Inscription : jeu. 22/janv./2004 14:31
Localisation : Sourans

Message par Anonyme2 »

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 : Tout sélectionner

Goto deb1

!section '.data' Data readable writeable

dat:
! rd 2800

dat1:
! rd 2800
tonton
Messages : 315
Inscription : mar. 26/avr./2005 15:19

Message par tonton »

merci denis, ca marche avec ta methode. 8)

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

a+
Avatar de l’utilisateur
djes
Messages : 4252
Inscription : ven. 11/févr./2005 17:34
Localisation : Arras, France

Message par djes »

Très bel effet ;)
Anonyme2
Messages : 3518
Inscription : jeu. 22/janv./2004 14:31
Localisation : Sourans

Message par Anonyme2 »

djes a écrit :Très bel effet ;)
Il faut remplacer
LOOP l_eff

par

!LOOP l_eff


sinon on a une erreur de saut
Dr. Dri
Messages : 2527
Inscription : ven. 23/janv./2004 18:10

Message par Dr. Dri »

Merci les plantages :(

Code : Tout sélectionner

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
tonton
Messages : 315
Inscription : mar. 26/avr./2005 15:19

Message par tonton »

Dr. Dri a écrit :Merci les plantages :(

Code : Tout sélectionner

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 : Tout sélectionner

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
Dr. Dri
Messages : 2527
Inscription : ven. 23/janv./2004 18:10

Message par Dr. Dri »

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 : Tout sélectionner

[code]
[/code]

Dri
Avatar de l’utilisateur
djes
Messages : 4252
Inscription : ven. 11/févr./2005 17:34
Localisation : Arras, France

Message par djes »

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...
Le Soldat Inconnu
Messages : 4312
Inscription : mer. 28/janv./2004 20:58
Localisation : Clermont ferrand OU Olsztyn
Contact :

Message par Le Soldat Inconnu »

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 : Tout sélectionner

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)]
Répondre