C_far+ 442 Signaler ce message Posté(e) 21 juin 2016 Ce sujet fait office de support le tutoriel L'assembleur (#emit) - Partie 1.Merci de poster vos questions ici. Partager ce message Lien à poster Partager sur d’autres sites
Dayrion 32 Signaler ce message Posté(e) 21 juin 2016 (modifié) Salut. Super tuto! #EMIT était pour moi un sujet mistique très intéressant. J'ai donc des questions!» Data, Code, Stack, Heap sont ils dans le registre primaire ?» Les deux registres sont exécutés sur la "machine virtuelle"? Pour ce qui est des codes ou autres j'ai bien compris et saisi la chose mais ça m'amène à d'autres questions.» Coder en "#emit" donne des performances améliorées ?! (rapidité d'exécution). Je demande ça car je vois que tu as quand même réduits de 6 p-codes et si j'ai bien saisi, les p-codes sont "générés" par le compiler puis lus par la machine virtuelle .Merci de tes réponses.PS: Ces questions peuvent te paraître très simplistes et un peu stupides mais c'est la première fois que je touche de la programmation à ce niveau. Modifié 21 juin 2016 par Dayrion Partager ce message Lien à poster Partager sur d’autres sites
C_far+ 442 Signaler ce message Posté(e) 21 juin 2016 » Data, Code, Stack, Heap sont ils dans le registre primaire ? Le registre primaire et le registre alterné sont des segments temporaires. Les segments DATA, COD, STK et HEAP sont dynamiques et statiques à la fois, disons qu'il faut comprendre comment fonctionne l'Architecture de von Neumann. » Les deux registres sont exécutés sur la "machine virtuelle"? Les deux registres qui sont des segments temporaires sont utilisées lors de l’exécution du code, donc dans l'Abstract Machine. » Coder en "#emit" donne des performances améliorées ?! (rapidité d'exécution). Je demande ça car je vois que tu as quand même réduits de 6 p-codes et si j'ai bien saisi, les p-codes sont "générés" par le compiler puis lus par la machine virtuelle Oui en diminuant le nombre de p-code, on permet une exécution plus rapide du code, mais sache que 6 p-codes c'est rien, c'était juste un exemple. Partager ce message Lien à poster Partager sur d’autres sites
IncroyablePix 52 Signaler ce message Posté(e) 22 juin 2016 Dutheil il est amoureux de l'assembleur, chaque instant de sa vie où il voit un nouveau topic de demande d'aide se transforme en l'espoir, brillant dans ses yeux qu'il va pouvoir utiliser #emit, Partager ce message Lien à poster Partager sur d’autres sites
Papawy 83 Signaler ce message Posté(e) 22 juin 2016 il y a 9 minutes, IncroyablePix a dit : Dutheil il est amoureux de l'assembleur, chaque instant de sa vie où il voit un nouveau topic de demande d'aide se transforme en l'espoir, brillant dans ses yeux qu'il va pouvoir utiliser #emit, Et après y'a ceux qui pense que la lisibilité du code est plus importante que l'optimisation (obviously y'a des limites) Partager ce message Lien à poster Partager sur d’autres sites
C_far+ 442 Signaler ce message Posté(e) 22 juin 2016 il y a 7 minutes, Papawy a dit : Et après y'a ceux qui pense que la lisibilité du code est plus importante que l'optimisation (obviously y'a des limites) J'aime quand un code est propre et optimisé ! A la limite en C(++), l'optimisation peut passer après si c'est un petit programme. Mais en Pawn, c'est autre chose, car les collisions de pointeurs arrivent vite ! Partager ce message Lien à poster Partager sur d’autres sites
Papawy 83 Signaler ce message Posté(e) 22 juin 2016 à l’instant, Dutheil a dit : J'aime quand un code est propre et optimisé ! A la limite en C(++), l'optimisation peut passer après si c'est un petit programme. Mais en Pawn, c'est autre chose, car les collisions de pointeurs arrivent vite ! Tiens d'ailleurs, ce soir (oui j'ai une épreuve de bac cet aprem) faudra que j'te parle d'un "soucis" que j'ai eu avec des problèmes du type "comment je peux renvoyer l'adresse de cette variable et pas une copie ?". Type de problème auxquels je n'avais pas été confronté en C++ ou en Python (ou tout est référence). Partager ce message Lien à poster Partager sur d’autres sites
C_far+ 442 Signaler ce message Posté(e) 22 juin 2016 il y a 2 minutes, Papawy a dit : Tiens d'ailleurs, ce soir (oui j'ai une épreuve de bac cet aprem) faudra que j'te parle d'un "soucis" que j'ai eu avec des problèmes du type "comment je peux renvoyer l'adresse de cette variable et pas une copie ?". Type de problème auxquels je n'avais pas été confronté en C++ ou en Python (ou tout est référence). Ca ? int i = 0; int *pi; pi = &i; Partager ce message Lien à poster Partager sur d’autres sites
Papawy 83 Signaler ce message Posté(e) 22 juin 2016 static MySQL_handle; // ---------------------------------------------------------------------------- stock getMySQLHandle() { return MySQL_handle; } stock setMySQLHandle(newHandle) { MySQL_handle = newHandle; return true; } En C/++ j'aurais pu retourner un pointeur dans "getMySQLHandle" et donc ça m'aurais éviter le "setMySQLHandle" inutile à mes yeux. Partager ce message Lien à poster Partager sur d’autres sites
C_far+ 442 Signaler ce message Posté(e) 22 juin 2016 il y a 44 minutes, Papawy a dit : static MySQL_handle; // ---------------------------------------------------------------------------- stock getMySQLHandle() { return MySQL_handle; } stock setMySQLHandle(newHandle) { MySQL_handle = newHandle; return true; } En C/++ j'aurais pu retourner un pointeur dans "getMySQLHandle" et donc ça m'aurais éviter le "setMySQLHandle" inutile à mes yeux. Garde ce genre de méthodes, que ça soit en C/C++/Pawn, c'est + universel Partager ce message Lien à poster Partager sur d’autres sites
Dayrion 32 Signaler ce message Posté(e) 19 juillet 2016 #include <a_samp> main() { new a; #emit LOAD.S.pri a #emit ADD.S.pri 10 #emit LOAD.S.pri a printf("%i", a); } // OU main() { new a; #emit LOAD.S.pri a #emit ADD.S 10 #emit LOAD.S.pri a printf("%i", a); } Ce code me renvoi : Run time error 22: "AMX not initialized (or doubly initialized)" Le problème vient de la ligne de l'addition. @C_far Partager ce message Lien à poster Partager sur d’autres sites
C_far+ 442 Signaler ce message Posté(e) 19 juillet 2016 (modifié) il y a 5 minutes, Dayrion a dit : #include <a_samp> main() { new a; #emit LOAD.S.pri a #emit ADD.S.pri 10 #emit LOAD.S.pri a printf("%i", a); } // OU main() { new a; #emit LOAD.S.pri a #emit ADD.S 10 #emit LOAD.S.pri a printf("%i", a); } Ce code me renvoi : Run time error 22: "AMX not initialized (or doubly initialized)" Le problème vient de la ligne de l'addition. @C_far C'est normal, je vois ce que tu souhaites faire, additionner la valeur 10 à la variable "a". Pour il faut simplement charger la valeur "a", on constate qu'elle se trouve dans le stack puisqu'elle est dans uen fonction et qu'elle n'est pas statique, donc LOAD.S.(pri/alt). ADD.S.pri/ADD.S n'existe pas, c'est ADD ou ADD.C. ADD permet d'additionner le contenu du registre alterné au registre primaire (pri += alt) ADD.C ajoute la valeur en paramètre au registre primaire (ADD.C 5 = pri += 5) Pour stocker la valeur d'un registre temporaire dans une variable, il faut utiliser STOR.S.(pri/alt) Modifié 19 juillet 2016 par C_far Partager ce message Lien à poster Partager sur d’autres sites
Dayrion 32 Signaler ce message Posté(e) 19 juillet 2016 (modifié) Ah oui, pas foutus de recopier les bonnes réponses.. (A la fin j'ai voulus faire le code globale avec #emit, ça a fonctionné en regardant la solution j'ai vus qu'il y avait 100x plus simple avec #emit CONST.alt 10 dès le début. ) Edit; Que signifie .c et .s (STACK non?) ? Tu as pas parlés de substrate (SUB) dans le tuto mais tu l'inclus en solution de fin! @C_far Modifié 19 juillet 2016 par Dayrion Partager ce message Lien à poster Partager sur d’autres sites
C_far+ 442 Signaler ce message Posté(e) 19 juillet 2016 il y a 38 minutes, Dayrion a dit : Ah oui, pas foutus de recopier les bonnes réponses.. (A la fin j'ai voulus faire le code globale avec #emit, ça a fonctionné en regardant la solution j'ai vus qu'il y avait 100x plus simple avec #emit CONST.alt 10 dès le début. ) Edit; Que signifie .c et .s (STACK non?) ? Tu as pas parlés de substrate (SUB) dans le tuto mais tu l'inclus en solution de fin! @C_far .C = constante .S = stack SUB permet de soustraire tout simplement (pri -= alt) Partager ce message Lien à poster Partager sur d’autres sites
C_far+ 442 Signaler ce message Posté(e) 31 juillet 2016 (modifié) Merci à @maxia de m'avoir fait remarquer une erreur de ma part dans ce tutoriel (je m'étais pas relu), dans deux codes j'ai utilisé deux fois LOAD.S.pri à la place d'une fois et d'un STOR.S.pri @Dayrion voilà pourquoi tu avais fait une erreur Modifié 31 juillet 2016 par C_far 1 Partager ce message Lien à poster Partager sur d’autres sites