30

oui

31

Style 2 fois clr.w -(an) -> clr.l -(an).

Vade retro satanas !

32

-

33

1. Oui on peut optimiser.
2. Les commentaires m'ont l'air correct.

34

-

35

Mais pour le moment, y'a pas de grosses erreurs de conception. et puis optimiser l'appel des rom_calls... Tu devrais installer preos par contre, et sa protection nostub. Mais elle peut ne pas etre suffisante.

36

-

37

Oui, c'est comme ca.
Le -(a7), veut dire que tu decrementes d'abord a7, puis que tu saves a cette adresse.
Donc si tu fais 8 fois -(a7),
il faut coriger apres.

38

-

39

1- lea c "load effective adress", ca charge une adresse
2- c plus rapide
3- ca depend comment marche ta routine ...
4- pea fait comme lea mais met directment l'adresse sur a7 (si je ne me tropme po smile)
(PC) ca veut dire je crois qu'il est à la fin du programme en tant que données et pas en bss
En préretraitre

40

que veut dire et que fait l'instruction: lea

LEA : Load Effective Address
Empile une adresse.
pourquoi est il mieux de remplacer: lea par addq.l lorsque l'on doit dé-empiler moins de 8.

Parce que addq.l est plus rapide et prend moins de place que lea (attention optimisation valable pour des valeurs immédiates inférieures à #8)
pourquoi utilise t'on un .w avec move lorsque l'on veut indiquer les coordonnée
X et Y d'une ligne ou d'un texte: vu que les coordonnée ne dépasse pas 255 ou pourrait metre un .b a la place de .w

Je crois que ce sont les équivalences de types AMS (écrit en C) <-> Assembleur qui veulent cela.
Tu devrais voir cela :http://membres.lycos.fr/sirryl/ti89/index.php?dl=1&url=ctoasm.htm
et pourquoi utilise t'on pea.l bighw(pc)

On utilise pc car les variables sont passées en PC relatif (relatives au compteur programme).

41

-

42

Au début, oui, mais quand tu optimises ton programme tu sais quels registres tu utilises et donc tu peux te permetrre de restreindre la sauvegarde seulement à ceux réellement utilisés.

43

-

44

Orion_ a écrit :
c mieux d'utilise un :
move.l Fonction*4(a5),a0
jsr (a0)

plutôt qu'un : jsr doorsos::fonction ???

L'un est en nostub, l'autre en kernel. Et pitie arretez d'utiliser le header de doorsos, il est depasse.

sinon, y'a pas plus rapide pour afficher un texte ou quelque chose comme
sa ?? parceque 7 ligne pour juste un "print", trisotrisotrisotriso

Bienvenu dans l'assembleur. Et encore la tu utilises une fonction.
Sans ca....

sinon, PpHd ma dit que mon prog etait optimisable j'aimerais bien savoir ou ? et comment ? SVP


Tu veux savoir ? Sauvegarde l'ecran dans la pile, le test tst.l d4 est superflu.
Sauvegarde le ptr de pile directement puis restaure le a la fin sans faire toutes les corrections intermediaires.
Quoi d'autre, chais plus.

45

zdrubal a écrit :
LEA : Load Effective Address
Empile une adresse.


heu non c pea qui empile un adresse
lea ne fait que mettre l'addresse dans un autre registre
(je pense que lea <ea>,-(a7) <=> pea <ea> a la taille et a la vitesse pres)

pour le .w pour les coordonnée : c pasque on ne peut pas empiler d'octets sur la pile car une adresse doit toujour etre paire quand ont lit un mot[-long] (et donc avec un move.b <ea>,-(a7) elle serait impaire et donc address error assuré (quoi qu'il me semble egalement que cette ligne empile un mot bien qu'il y ait un .w)

avatar

46

-

47

Je te signales que pour le moment tu n'as fait que des appels de fonctions. Pas encore du VRAI code assembleur. Commence par la. plutot que d'optimiser des appels de fonctions.

48

C'est la base smile

49

-

50

moi g un ptit soucis avec cette ligne :

lea (a0,d0.w),a0

tigcc me donne comme erreur :
1 undefined reference to 'a0,d0.w'



(coloration syntaxik maison rulez)
avatar

51

-

52

-

53

Plus par curiosité qu'aure chose, je me suis penché sur ton code pr essayez de voir si je pouvia soptimiser un peu...
j'aimerai que quelqu'un me dise si c bon ce que j'ai fait...
(notament, si le coup des deux move.w en 1 move.l est judicieux)
; Assembly Source File ; Created 19/04/2002, 16:29:29 ; Taille de départ sous TIGCC : 353 octets. ; Taille en mettant la sauvegarde et restauration de la pile en 1 seule fois : 329 octets. ; Taille après quelques magouilles (deux move.w transformés en un move.l) : 321      section ".data"      include "os.h"      xdef _nostub      xdef _ti89      xdef _ti92plus       _main:      movem.l a5-a6,-(a7)            link a6,#0  ; On sauvegarde l'adresse du sommet de la pile dans a6      ; => Il faudra la restaurer à la fin du programme.      ; Si on fait cela, il n'est plus nécessaire de le restaurer après chaque appel de fonction : on le fait une fois pour toutes.             ; Sauvegarde ecran      move.l $c8,a5      pea.l 3840      move.l HeapAllocPtr*4(a5),a0      jsr (a0)      move.l a0,d4      tst.l d4      beq nomem      move.l #3840,(a7)      pea.l LCD_MEM      move.l d4,-(a7)      move.l memcpy*4(a5),a0      jsr (a0)                  ;;;;;;;;;;;;;;;;;;      ; Prog principal ;      ;;;;;;;;;;;;;;;;;;            ; ClrScr      move.l ScreenClear*4(a5),a0      jsr (a0)            ; FontSetSys      move.w #2,-(a7)      move.l FontSetSys*4(a5),a0 ; Fonction      jsr (a0)                   ; Execute            ; DrawStrXY      move.w #4,-(a7)       ; noir sur blanc      pea.l bighw(pc) ; Texte                   ;     move.w #10,-(a7)      ; y=10 ;     move.w #10,-(a7)      ; x=10      move.l #$000A000A,-(a7) ; y=10 et x=10  (10 en décimal == 000A en hexa)      ; La doc que j'ai sur les cycles dit que empiler deux word prend 2*12 cycles... alors qu'empiler un long prend 20 cycles...      ; Si la doc a raison (et que je sais la lire !), ça sera plus rapide, et ne prend pas plus de place-memoire.      ; SI J'AI TORD DE FAIRE çA, çA SERAIT COOL DE ME LE FAIRE SAVOIR... (PpHd, si tu me reçois...)            move.l DrawStr*4(a5),a0 ; Fonction      jsr (a0)              ; Execute                  ; DrawLine      move.w #1,-(a7)      ; c=1       ;     move.w #95,-(a7)     ; y1=95 ;     move.w #5,-(a7)      ; x1=5      move.l #$0005005F,-(a7)  ; 95==$005F et 5==$0005  d'ailleur, cette fois-ci, ça fait économiser de la mémoire ! bizarre...       ;     move.w #65,-(a7)     ; y2=65 ;     move.w #145,-(a7)    ; x2=145      move.l #$00910041,-(a7) ; 65==$41 et 145==$91            move.l DrawLine*4(a5),a0 ; Fonction      jsr (a0)              ; Execute      ; car w+w+w+w+w=2+2+2+2+2=10            ; FontSetSys      move.w #0,-(a7)      move.l FontSetSys*4(a5),a0 ; Fonction      jsr (a0)                   ; Execute                  ; DrawStrXY      move.w #4,-(a7)       ; noir sur blanc      pea.l msg1(pc) ; Texte       ;     move.w #40,-(a7)      ; y=40 ;     move.w #10,-(a7)      ; x=10      move.l #$000A0028,-(a7) ; 10==$A et 40==$28  Ici aussi, ça fait gagner de la meme... je comprend pas : ça en fait gagner une fois sur deux ?            move.l DrawStr*4(a5),a0 ; Fonction      jsr (a0)              ; Execute                  ; DrawStrXY      move.w #4,-(a7)       ; noir sur blanc      pea.l msg2(pc) ; Texte       ;     move.w #48,-(a7)      ; y=48 ;     move.w #10,-(a7)      ; x=10      move.l #$000A0030,-(a7)            move.l DrawStr*4(a5),a0 ; Fonction      jsr (a0)              ; Execute            ; ngetchx      move.l ngetchx*4(a5),a0      jsr (a0)            ; Restore l'ecran      pea.l 3840      move.l d4,-(a7)      pea.l LCD_MEM      move.l memcpy*4(a5),a0      jsr (a0)      move.l d4,(a7)      move.l HeapFreePtr*4(a5),a0      jsr (a0)                   nomem:                  ; ST_helpMsg      pea.l stmsg(pc) ; Texte      move.l ST_helpMsg*4(a5),a0 ; Fonction      jsr (a0)              ; Execute                        unlk a6 ; On restaure l'adresse du sommet de la pile, qu'on avait mémorisé dans a6                  ; Restore Registres      movem.l (a7)+,d4/a5            rts ; Datas bighw: dc.b 'Hello World !',0 msg1: dc.b 'This is my first ASM program',0 msg2: dc.b 'Coded OnCalc With AS by ORION',0 stmsg: dc.b 'Hello: Coded oncalc with AS by Orion',0


(et puis, ça me permet de tester la coloration syntaxique grin)
avatar
Tutorial C (TI-89/92+/v200) - Articles Développement Web (PHP, Javascript, ...)
« What is the sound of Perl? Is it not the sound of a wall that people have stopped banging their heads against? » - Larry Wall

54

heu... j'oubliais : je suis un newbie total en ASM : mon truc à moi, c'est le C
avatar
Tutorial C (TI-89/92+/v200) - Articles Développement Web (PHP, Javascript, ...)
« What is the sound of Perl? Is it not the sound of a wall that people have stopped banging their heads against? » - Larry Wall

55

Dommage grin

(en meme temps quand on est newbie depuis 2 jours faut pas s'attendre a plus rotfl)

(remarque moi chuis newbie d'1~2 mois en ASM ce n'est guerre mieux)
avatar

56

-

57

heu g pas compros grand chose a la fontion link mais je ne mpense pas que ce soit aussi simple

et puis il vaut mieux s'appliquer a bien restaure le conteur de pile apres chaque ROM CALL c plus propre
avatar

58

-

59

-

60

Jimmy Mardell a écrit dans sont 68k guide :
L'instruction LINK crée une stackframe, une mémoire allouée temporairement
sur la pile. L'instruction est souvent utilisée dans les languages de haut
niveau quand il faut allouer de la mémoire pour des procédures comportant
des variables locales. Quand la procédure est désactivée, les variables
siparaissent se qui fait gagner de la mémoire.
LINK à deux opérandes. La première est un registre d'adresse et la seconde
une valeur complémentaire à deux, qui est la taille du frame (souvent négative
sauf si la pile grandie à l'envers). Quand l'instruction est éxécutée, le
registre d'adresse est empilé et le registre A7 nouvellement mis à jour est
copié dans le registre d'adresse. La valeur immédiate est ajoutée au registre
de la pile (A7).
La mémoire locale est accessible avec un décalage négatif depuis le registre
d'adresses. De cette façon vous pouvez utiliser des variables locales sans
déranger d'autres données qui sont empilées ou enlevées de la pile crée et garde
a la portée que vous précisez pendant l'appel de LINK.

L'instruction UNLK enleves le stackframe et restore le pointeur de pile.

METHODE D'ADRESSAGE : Aucune

TAILLE DES DONNEES : -

FLAGS: Unaffected

SYNTAXE : LINK An,#<shifting>

L'utilisation de LINK permet des programmes récurents.


moi ca me parrait bien plus compliqué !
avatar