1

2

3

ben tu peux faire un

prog("fich","-m","option-m","-p","optionp")

ou bien un prog("fich","-m optionm", "-p optionp")

ou même: prog("fich -m optionm -p optiop")

nan?

4

Martial Demolins (./2) :
En fait, on ne peut pas utiliser de switches à base de '/', '-', '+' etc, comme sur difféernts OS. Il faut passer par des chaines de caractères pour avoir des arguments non interprétés par le TIOS.

Effectivement.
Au fait, sur PedroM, ça marche pareil ?

À ma connaissance, sous PedroM, tous les paramètres sont automatiquement des chaînes de caractères.
avatar
Mes news pour calculatrices TI: Ti-Gen
Mes projets PC pour calculatrices TI: TIGCC, CalcForge (CalcForgeLP, Emu-TIGCC)
Mes chans IRC: #tigcc et #inspired sur irc.freequest.net (UTF-8)

Liberté, Égalité, Fraternité

5

6

martial, c'est ce header que tu veux : http://tigcc.ticalc.org/doc/args.html estack.h c'est pour renvoyer des args à ams.

(parce que c'est pas normal que t'as pas vu ça: http://tigcc.ticalc.org/doc/args.html#ArgCount ^^)

7

8

9

ArgCount n'est qu'un alias pour remaining_element_cnt.
avatar
Mes news pour calculatrices TI: Ti-Gen
Mes projets PC pour calculatrices TI: TIGCC, CalcForge (CalcForgeLP, Emu-TIGCC)
Mes chans IRC: #tigcc et #inspired sur irc.freequest.net (UTF-8)

Liberté, Égalité, Fraternité

10

11

12

13

14

il manque un move.l (a2),a2 (sinon l'adresse de top_estack serait stockée en ROM, ce serait un peu difficile de la faire bouger cheeky), à part ça c'est bon.

« The biggest civil liberty of all is not to be killed by a terrorist. » (Geoff Hoon, ministre des transports anglais)

15

16

et tu veux vraiment pas apprendre le C pour arrêter de t'embêter? trigni

quitte à juste assembler, pour t'amuser à retoucher l'asm généré trilangue

17

18

je sais pas si tu *veux* apprendre le C mais okazou...

a=*machin
mov a, [machin]

a=&machin
ça existe pas en asm, mais c'est l'inverse grin

ce qui me fait marrer c'est qu'on dit "rah les pointeurs du C c'est dur" mais en asm, y'a que ça grin

une variable c'est juste le contenu d'une case mémoire appelé directement par son nom, en général ça se fait caser dans une registre automatiquement par le compilo (pour les calculs intermédiaires)

écrire un compilateur est über chiant mais ça permet de comprendre énormément de choses et perso quand j'écris du C j'arrive à imaginer quel genre d'instructions asm seront générées (en gros).

19

20

j'ai ptet inversé src et dest. * permet de toucher le contenu d'une adresse, c'est un déréférencement de mémoire.

& permet d'obtenir l'adresse d'une variable

les variables du C sont toujours stockées en RAM (les variables locales en pile)

et il y a une confusion facile, c'est qu'une variable en C correspond à l'adresse de cette variable pour l'asm.

donc a=*b correspond a mem[b] -> a

mais en asm tu vas plutot faire mem[mem[b]] -> mem[a]

faut que je te trouve une doc.

21

22

23

squalyl a mis du x86 syntaxe Intel, c'est du mov dest,src. Sur le 68k, on écrit move src,dest.
avatar
Mes news pour calculatrices TI: Ti-Gen
Mes projets PC pour calculatrices TI: TIGCC, CalcForge (CalcForgeLP, Emu-TIGCC)
Mes chans IRC: #tigcc et #inspired sur irc.freequest.net (UTF-8)

Liberté, Égalité, Fraternité

24

oui, désolé, j'ai enlevé l'ambiguité après avec la syntaxe src --> dest

25

26

heu je pense

sinon machin(pc) et machin ça revient au même en C sauf le mode de calcul de l'adresse.

en pseudo code "machin" c'est mem[adresse_machin]
et machin(pc) c'est mem[pc+delta] et delta=adresse_machin-pc, calculé par le compilo
la différence c'est que le deuxième est "position independent" ie ça marchera quel que soit l'adresse de chargement du programme.

c'est pour ça que j'ai choisi la notation mem[adr] qui est totalement explicite

27

28

oui c'est fondamental

les variables non-pointeurs sont LA extension du C à l'asm en fournissant un moyen symbolique d'accéder au contenu de la mémoire.

<optionnel>d'ailleurs si tu regardes pour faire l'opération mem[adresse] en asm, on écrit mov qc, a pas mov qc,(a). En réalité il va stocker dans la RAM à l'adresse a, mais on associe "a" et "le contenu de a" donc c'est pareil grin</optionnel>

Je réalise que ce qui fout le bordel dans ta compréhension c'est les registres indirects

quand tu fais mov qc, %a0 tu stockes dans LE REGISTRE %a0 mais quand tu fais (%a0) tu stockes en fait dans mem[%a0] et ça n'a aucun équivalent en C puisqu'on ne manipule que la mémoire. Ca fait un fouillis memoire/registre à cause du jeu d'instruction CISC.

En RISC (arm, mips, ppc) on n'a pas le droit de faire des opérations qui mélangent la mémoire et les registres. Toutes les instructions (mov, add, etc) ne travaillent qu'avec des registres directement. Et il y a deux instructions spéciales LOAD ( mem[reg1]->reg2, avec des options, index, etc) et STORE (qui fait l'inverse)
C'est beaucoup plus clair. en fait le move 68k est un mélange de move(regs) et de load/store

29

30