PurePicBasic - Asm

Forum de développement du compilateur asm / basic pour les puces microchip
 
AccueilAccueil  RechercherRechercher  S'enregistrerS'enregistrer  Connexion  

Partagez
 

 Test Code intermédaire

Aller en bas 
AuteurMessage
wood51

wood51

Messages : 72
Date d'inscription : 20/01/2013
Age : 39
Localisation : Orléans

Test Code intermédaire Empty
MessageSujet: Test Code intermédaire   Test Code intermédaire EmptyLun 18 Fév - 21:07

Salut ,
Je bosse sur la génération du code intermédiaire . Vous pouvez tester en changeant le code dans le fichier source.txt puis compiler le projet PurePicBasic
Voici mes premiers résultats sur l'assignation :

Citation :

Code:
b = 0x0A
TRISA = 0x00000001 + b

Debug:
Reservation mémoire pour B
Affectation : B = 10
Addition : 1 + 10
Affectation : TRISA = 11

Citation :
Code :
define.a a,b

a = 5
b = 32

TMR0 = (19+b)*a

Debug:
Reservation mémoire pour A
Reservation mémoire pour B
Affectation : A = 5
Affectation : B = 32
Addition : 19 + 32
Multiplication : 51*5
Affectation : TMR0 = 255

Citation :

Code:
a = 5
b = 3

; /!\ Le if est juste là pour la comparaison (et la décoration Wink )
if a>b
b=b+1
endif

Debug:
Reservation mémoire pour A
Affectation : A = 5
Reservation mémoire pour B
Affectation : B = 3
Comparaison : 5 > 3 -> True
Addition : 3 + 1
Affectation : B = 4


Voilà , dite moi ce que vous en pensez ...
Revenir en haut Aller en bas
wood51

wood51

Messages : 72
Date d'inscription : 20/01/2013
Age : 39
Localisation : Orléans

Test Code intermédaire Empty
MessageSujet: Re: Test Code intermédaire   Test Code intermédaire EmptyJeu 21 Fév - 21:14

J'ai choisi de générer du code "Three adress code" ou (TAC pour les intimes Smile ) . Le code source se rapproche petit à petit du code asm ...

Voici un exemple
Citation :

Code :
a=4
b=5*(32+3)*a
c=a*3

Debug:
A := 4
_t1 := 32 + 3
_t2 := _t1 * A
_t3 := 5 * _t2
B := _t3
_t4 := A * 3
C := _t4

Je commence a bosser sur les if dans le week-end study
Revenir en haut Aller en bas
venom

venom

Messages : 24
Date d'inscription : 21/01/2013
Age : 34
Localisation : . <---- ici

Test Code intermédaire Empty
MessageSujet: Re: Test Code intermédaire   Test Code intermédaire EmptyVen 22 Fév - 15:50

Bravo wood tu avance bien. Perso c'est un peut du chinois pour moi mais je me doute que ça n'est pas rien Wink







@++
Revenir en haut Aller en bas
wood51

wood51

Messages : 72
Date d'inscription : 20/01/2013
Age : 39
Localisation : Orléans

Test Code intermédaire Empty
MessageSujet: Re: Test Code intermédaire   Test Code intermédaire EmptyVen 22 Fév - 18:22

Salut ! Merci ...

En effet c'est pas rien car la traduction en assembleur est grandement facilitée Cool

ex :

A := 4

MOVLW 4
MOVWF A

_t1 := 12
_t2 := A + _t1

MOVLW 12
MOVWF _t1,F
MOVWF _t1,W
ADDWF A,W
MOVWF _t2

Bien sur tout çà n'est pas optimiser mais çà marche !!!!!


Revenir en haut Aller en bas
Cpl.Bator
Admin


Messages : 50
Date d'inscription : 20/01/2013

Test Code intermédaire Empty
MessageSujet: Re: Test Code intermédaire   Test Code intermédaire EmptyVen 22 Fév - 23:02

Impec , dès que j'ai un peu plus de temps je jetterais un oeil la dessus.
je vais pensé au librairie standard que l'on va pouvoir faire ( en asm )
Revenir en haut Aller en bas
http://purepicbasic.frenchboard.com
wood51

wood51

Messages : 72
Date d'inscription : 20/01/2013
Age : 39
Localisation : Orléans

Test Code intermédaire Empty
MessageSujet: Re: Test Code intermédaire   Test Code intermédaire EmptyDim 24 Fév - 10:05

Je commence l'implémentation de if-else , voici mes premiers résultats , pour l'instant on ne peut pas imbriquer les if .
Comme d'hab , pas d'optimisation .
L'instruction "IfZ condition Goto label" correspond as "si la condition est fausse aller au label"

Citation :
Code :
a=3
if a<1
a=1+3
endif

Debug :
0 -> A := 3
1 -> _t1 := A < 1
2 -> IfZ _t1 Goto _L1
3 -> _t2 := 1 + 3
4 -> A := _t2
5 -> Goto _L2
6 -> _L2:
6 -> _L1:

Citation :

Code :
a=3
if a<1
a=1+3
else
a=a-1
endif

Debug :
0 -> A := 3
1 -> _t1 := A < 1
2 -> IfZ _t1 Goto _L1
3 -> _t2 := 1 + 3
4 -> A := _t2
5 -> Goto _L2
6 -> _L1:
7 -> _t3 := A - 1
8 -> A := _t3
9 -> _L2:
Revenir en haut Aller en bas
Cpl.Bator
Admin


Messages : 50
Date d'inscription : 20/01/2013

Test Code intermédaire Empty
MessageSujet: Re: Test Code intermédaire   Test Code intermédaire EmptyDim 24 Fév - 11:03

ca commence a devenir bon ^^
Revenir en haut Aller en bas
http://purepicbasic.frenchboard.com
wood51

wood51

Messages : 72
Date d'inscription : 20/01/2013
Age : 39
Localisation : Orléans

Test Code intermédaire Empty
MessageSujet: Re: Test Code intermédaire   Test Code intermédaire EmptyDim 24 Fév - 18:45

Voilà la suite des aventures des if-then-else , ouf !!! drunken
Les imbrications ont l'air bonne Smile Si vous voyez des erreurs dite le moi car entre le code PB,le code PicBasic et le code TAC je finis par me perdre scratch .

Citation :
Code:
a=3
if a<1
azerty=1
else
azerty=4
if a>1
azerty=3
endif
endif

Debug:
0 -> A := 3
1 -> _t1 := A < 1
2 -> IfZ _t1 Goto _L1
3 -> AZERTY := 1
4 -> Goto _L2
5 -> _L1:
6 -> AZERTY := 4
7 -> _t2 := A > 1
8 -> IfZ _t2 Goto _L3
9 -> AZERTY := 3
10 -> Goto _L4
11 -> _L4:
12 -> _L3:
13 -> _L2:

Citation :
Code:
a=3
if a<1
azerty=1
if b>1
azerty=3
endif
else
azerty=4
endif

Debug:

0 -> A := 3
1 -> _t1 := A < 1
2 -> IfZ _t1 Goto _L1
3 -> AZERTY := 1
4 -> _t2 := B > 1
5 -> IfZ _t2 Goto _L2
6 -> AZERTY := 3
7 -> Goto _L3
8 -> _L3:
9 -> _L2:
10 -> Goto _L4
11 -> _L1:
12 -> AZERTY := 4
13 -> _L4:

Citation :

Code:
a=3
if a<1
azerty=1
if b>1
azerty=3
endif
else
if c=5
TMR0=255
else
if Z=1
TMR0=0
else
TMR0=127
endif
endif
endif

Debug:
0 -> A := 3
1 -> _t1 := A < 1
2 -> IfZ _t1 Goto _L1
3 -> AZERTY := 1
4 -> _t2 := B > 1
5 -> IfZ _t2 Goto _L2
6 -> AZERTY := 3
7 -> Goto _L3
8 -> _L3:
9 -> _L2:
10 -> Goto _L4
11 -> _L1:
12 -> _t3 := C = 5
13 -> IfZ _t3 Goto _L5
14 -> TMR0 := 255
15 -> Goto _L6
16 -> _L5:
17 -> _t4 := Z = 1
18 -> IfZ _t4 Goto _L7
19 -> TMR0 := 0
20 -> Goto _L8
21 -> _L7:
22 -> TMR0 := 127
23 -> _L6:
24 -> _L4:
25 -> _L8:
Revenir en haut Aller en bas
Cpl.Bator
Admin


Messages : 50
Date d'inscription : 20/01/2013

Test Code intermédaire Empty
MessageSujet: Re: Test Code intermédaire   Test Code intermédaire EmptyVen 1 Mar - 21:13

tu as une archive fonctionnelle ?
Revenir en haut Aller en bas
http://purepicbasic.frenchboard.com
wood51

wood51

Messages : 72
Date d'inscription : 20/01/2013
Age : 39
Localisation : Orléans

Test Code intermédaire Empty
MessageSujet: Re: Test Code intermédaire   Test Code intermédaire EmptyVen 1 Mar - 21:38

non pas d'archive fonctionnelle , juste l'évaluation des expressions et des if fonctionnent . Tu veux que je "commit" la version actuelle ? J'écris quand même un fichier ".tac" contenant le code intermédiaire .
Ce week-end je finis d'implémenté le "<bit_access>" du genre myVar\B0 et je commence le code intermédiaire pour les procedures .
Revenir en haut Aller en bas
wood51

wood51

Messages : 72
Date d'inscription : 20/01/2013
Age : 39
Localisation : Orléans

Test Code intermédaire Empty
MessageSujet: Re: Test Code intermédaire   Test Code intermédaire EmptySam 2 Mar - 0:41

Encore et toujours des essais ... comme d'hab si vous voyez un loup ....

Citation :
Code :
a=255
repeat
a=a-1
until a>0

Debug :
A := 255
_L1:
_t1 := A - 1
A := _t1
_t2 := A > 0
IfZ _t2 Goto _L2
Goto _L1
_L2:

Citation :
Code :
a=255
while a>0
a=a-1
wend

Debug :
A := 255
_L1:
_t1 := A > 0
IfZ _t1 Goto _L2
_t2 := A - 1
A := _t2
Goto _L1
_L2:

L'erreur "Expression manquante est maintenant gérée .... Very Happy
Dépot mis a jours ...

Sleep Sleep study Sleep
Revenir en haut Aller en bas
wood51

wood51

Messages : 72
Date d'inscription : 20/01/2013
Age : 39
Localisation : Orléans

Test Code intermédaire Empty
MessageSujet: Re: Test Code intermédaire   Test Code intermédaire EmptyJeu 7 Mar - 20:54

Salut,
Je viens d'implémenté la boucle 'for-step-next'

Voici un code calculant une factorielle '5!' avec les trois boucle implémenté
Citation :

Code :
x=5
fact = 1
Repeat
fact = fact * x
x = x - 1
Until x = 0

Debug :
X := 5
FACT := 1
_L1:
_t1 := FACT * X
FACT := _t1
_t2 := X - 1
X := _t2
_t3 := X = 0
IfZ _t3 Goto _L2
Goto _L1
_L2:

Citation :
Code :
fact = 1
For x = 5 To 1 Step -1
fact = fact * x
Next

Debug:
FACT := 1
_L1:
X := 5
_t1 := X >= 1
IfZ _t1 Goto _L2
_t2 := FACT * X
FACT := _t2
_t3 := X - 1
X := _t3
_L2:

Citation :

Code :
x=5
fact = 1
While x>0
fact = fact * x
x=x-1
Wend

Debug :
X := 5
FACT := 1
_L1:
_t1 := X > 0
IfZ _t1 Goto _L2
_t2 := FACT * X
FACT := _t2
_t3 := X - 1
X := _t3
Goto _L1
_L2:

Je réfléchis maintenant a l'appel de fonction ( Suspect scratch study ) puis j'attaquerais la génération du code asm
Revenir en haut Aller en bas
Cpl.Bator
Admin


Messages : 50
Date d'inscription : 20/01/2013

Test Code intermédaire Empty
MessageSujet: Re: Test Code intermédaire   Test Code intermédaire EmptyVen 8 Mar - 20:55

ca avance , ca deviens bon ^^
j'utiliserais notre compilo pour faire mes prochain projet à base de pic.
Revenir en haut Aller en bas
http://purepicbasic.frenchboard.com
Contenu sponsorisé




Test Code intermédaire Empty
MessageSujet: Re: Test Code intermédaire   Test Code intermédaire Empty

Revenir en haut Aller en bas
 
Test Code intermédaire
Revenir en haut 
Page 1 sur 1

Permission de ce forum:Vous ne pouvez pas répondre aux sujets dans ce forum
PurePicBasic - Asm :: PurePicBasic-
Sauter vers:  
Ne ratez plus aucun deal !
Abonnez-vous pour recevoir par notification une sélection des meilleurs deals chaque jour.
IgnorerAutoriser