Bonjour,
j'aimerais savoir à quelles occasions vous êtes obligé(e) de faire de l'assembleur ? Avez-vous des situations concrètes où l'utilisation de l'assembleur s'est imposé à vous ?
Bonjour,
j'aimerais savoir à quelles occasions vous êtes obligé(e) de faire de l'assembleur ? Avez-vous des situations concrètes où l'utilisation de l'assembleur s'est imposé à vous ?
Je suis un adepte de Delphi... En 32 bits, ce dernier possède un éditeur d'assembleur intégré.
Un jour j'ai eu besoin de manipuler des nombres entiers très grands dépassant allègrement les capacités de huit malheureux octets. La seule solution, se constituer une bibliothèque de manipulations-calculs spécifiques. En pascal compilé cela reste possible, mais bonjour la lenteur des calculs et des affichages, rédhibitoire! Et bien l'asm a apporté un sacré plus... sans comparaison.
Voilà : l'ASM quand on veut dépasser les limites d'un langage compilé de haut niveau.
Pour ma part je prog assembleur que en amateur , je prog pour de vielle console ( snes , megadrive , nes) , étant des console de 'faible puissance' mais qui demande d'optimiser un max pour faire un jeu vidéo (collision , gameplay , rendu ect) assembleur me semble obligatoire surtout que obliger de passer par assembleur pour discuter avec le matériel.
Merci pour vos réponses.
Salut.
Je programme uniquement en assembleur.
J'ai tout de même commencé par le C, mais j'ai zappé au bout d'un mois.
Je faisais des petits trucs sympa, mais sans réellement comprendre ce que je faisais. En faite, c'était plus du visuel qu'autre chose.
Par exemple, je savais que pour déclarer tel truc il fallait le faire à tel endroit, mais sans en connaître la raison.
Je me suis dit que ce n'était pas avec le C que je progresserais, vu à quel point il est simple de faire des programmes sans rien comprendre à ce qu'on fait.
Et je n'aimais vraiment pas ne pas comprendre ce qu'il se passait en background.
Puis au-delà de ça, j'ai entendu plus d'une fois que lorsqu'on sait programmer en asm, on peut ensuite passer à n'importe quel HLL facilement et rapidement.
Egalement qu'il est faux de dire qu'il est plus long ou plus compliqué de coder en assembleur. Je confirme (mais à l'époque c'était vrais).
Pour l'instant, à chaque fois que j'ai re-codé un programme C en asm, j'ai divisé sa taille environ par 5.
Par exemple il y a quelques temps, je debug un code qui a été écrit en C. Je vois une partie de code qui ressemble à un switch assez grand. Je met un petit moment à comprendre qu'en faite c'est un simple strlen !
Autant de ligne de code pour un strlen..! (environ 30)
Alors qu'un strlen asm fait 7 lignes..
Pour une utilisation uniquement personnelle, je ne vois absolument aucun intérêt de coder en C.
Je suis une des rares personnes qui a plus de mal à lire un code C qu'un code asm ^
Un document parlant du language asm:
http://www.int80h.org/
Personnellement je ne suis pas d’accord avec toi ,je suis beaucoup plus un expert en C que en asm , il est vrai que c'est possible de coder en C sans rien comprendre mais en général en ne va pas très loin , le C demande normalement de la rigueur a son programmeur et la plupart qui savent bien programmer en C savent comment marche derrière.
Après je suis plutôt étonné que tu ne fasse pas mention du plus gros défaut en asm (enfin pour moi) , c'est le manque de paradigme possible l'asm est purement impératif , c'est pas super simple de faire du fonctionnel/procédural comme en C par exemple et rien que cela le je préfère largement le C (certes il existe qql macro permettant de faire un peu plus haut niveau) d’ailleurs le C a été fait pour créer des OS par exemple ,en plus le C a des bonnes performances qui sont même d’après wikipedia avec certain compilateur et certaines famille de processeur plus rapide en C que en asm.
Mais je trouve toujours intéressant de programment purement en assembleur et il existe qql cas particulier ou la programmation en asmest plus avantageuse , sinon si c'est pour faire un programme sur windows/linux/mac le C est largement avantageux (et multiplateforme) que en asm ou ça sera galère de passer chaque fois par OS (d'ou pourquoi asm en embarqué est moins contraignant).
Bref pour ma part le C demande vraiment beaucoup de rigueur et de pratique pour pouvoir apprécier ce langage.
Ouep, en même temps concernant le C je donne mon avis à mon niveau (1 mois).
Je sais qu'il y a des codeurs C qui sont vraiment excellents, voir qui font partie de l'élite, et qui ont fait le choix délibéré de coder en C alors qu'ils savent parfaitement coder en asm.
Mais il y a aussi beaucoup, voir énormément de codeur C qui se reposent sur cette facilitée de codage, et qui ne cherchent pas à comprendre les choses, et qui bien sur, comme tu le dis, ne vont pas très loin, ou bien codent de mauvais programmes.
Avec l'asm, comme le dit le mec dans le site que j'ai mis en lien, c'est peu probable, ce genre de personne abandonnent rapidement, car avec l'asm si tu ne cherches pas à comprendre t'es exit direct.
Pour le reste, je n'ai pas assez de connaissance en C pour te répondre. Mais comme je disais dans mon précédant post, je parlais de l'asm pour une utilisation uniquement personnelle.
C'est vrais que pour la portabilité ou la compréhension par d'autres personnes, le C est indispensable.
Mais moi personnellement, pour faire des programmes uniquement pour moi, je ne vois pas d'intérêt dans le C.
Je veux dire, tout ce que je pourrais faire en C je peux le faire en asm et en mieux.
Enfin je crois ! Après peut-être que je me trompe car justement je n'ai pas fait assez longtemps de C.
Le premier code que j'ai fait lors de mon passage en asm, c'est réécrire un client smtp que j'avais codé en C. Je l'ai codé pratiquement comme je l'ai lu, en une fois, et en mieux, plus performant et beaucoup plus petit.
Toutes les conversions que j'ai pu voir du C vers l'asm faite par gcc étaient vraiment affreuses.
Hormis pour les switchs par exemple où les algo ont l'air de bien faire leur travail, à base de jna, jb etc.. Mais le truc, c'est qu'en asm, il est parfois possible d'utiliser des méthodes différentes d'une simple succession de "cmp / jnz", qui seront parfois encore plus courtes ou performantes que la méthode gcc à base de "cmp - jna / jb etc..".
Avec l'option d'optimisation, j'ai testé une fois, c'était encore pire, ça rajoutait environ 30% de ligne de code.
Un exemple autre que le strlen, un base64 trouvé sur un forum. Je l'avais téléchargé justement pour regarder la taille du code asm que gcc sortirait, car je pensais impossible qu'il puisse faire aussi bien qu'un être humain pour un truc pareil, et effectivement, c'est encore pire que ce que je pensais.
Gcc sort un code asm de 650 lignes il me semble. Avec l'option d'otimisation, 1000 lignes !
C'est dingue car en asm, rien qu'avec 650 lignes, il est possible d'écrire un gros programme, quelque chose de bien complexe, et pas juste un base64.
(Mon base64 doit faire environ 150 lignes (le rapport de compression habituel d'environ 1/5). Je ne le post pas, mais si tu veux le voir je peux te l'envoyer).
Pour les OS, regarde sur le forum fasm, beaucoup font des OS qui tiennent la route, très performant.
L'exemple le plus connus est MenuetOS, mais il y en a d'autres sur le forum.
Il y a même un mec qui avait pour projet de réécrire en asm le kernel Linux.
Je n'essaie pas de prouver la supériorité de l'asm à tout prix, j'essaie vraiment de comprendre ce que pourrais m'apporter le C (pour une utilisation personnel), mais pour l'instant à chaque fois que j'ai comparé, j'ai été très déçu.
Ok, merci de ton point de vue
C'est vrai tu as raison que le C est un faux ami pour le débutant , c'est un langage verbeux mais pour le manipuler il faut bien comprendre les mécanisme derrière.
Disons que je suis étonné de ne pas que tu trouve de manière personnel utilité pour faire du C, alors que moi "j'abuse" utilisation des macro en asm.
Mais c'est évident que asm permet une bonne compression du code , c'est pour cela que je utilise d'ailleurs
Bon tout dépent de ce que tu code , pour ma part je me sentirais pas de coder un moteur 3D en asm.
Mais bon c'était juste pour revenir sur ce point sur le C , je suis finalement assez d'accord avec toi sur ce deuxième post , donc je dirait si tu n'as fait que 1 mois du C ,je pense que il te manque encore beaucoup de pratique ,personnellement je considérée qu'il m'a fallu au moins 3 ans de pratique intensive du C pour bien le maitrisé et bien exploité sa puissance et ces avantage (bas et haut niveau a la fois).
Ouai c'est clair, d'ailleurs ce manque de pratique du C me pose des problèmes pour le debugging de code.
Bah ce que je code, c'était vraiment uniquement dans un but d'apprentissage, pour l'instant en tout cas.
Le dernier gros truc que j'ai codé c'est une pile tcpip. M'enfin, je sais pas si on peut dire "pile".
Disons que la partie header est géré complètement, du header ethernet au tcp.
Et les paquets sont envoyés et reçu via af_paquet.
J'ai donc du implémenté le systême handshake à base de syn-psh-ack etc..
Au final j'ai fait un serveur et un client l'utilisant.
C'était plutôt jouissif de coder ça en asm. ^ Et surtout ça m'a permis de voir grandeur nature ce que j'avais appris dans la rfc.
SInon en 3d, je n'y connais rien du tout pour l'instant. Mais pareil c'est un truc qui doit être plutôt gratifiant à coder.
ben je n'ai jamais coder un client/serveur , mais oui je pense que c'est plutôt gratifiant de coder ça en asm.
Oui la 3d c'est un vaste domaine mais c'est très gratifiant de le coder sois même (au lieu de passer sur une librairie/moteur 3D).
Au début je voulais commencé par la 3d..
C'était quand j'ai commencé le C. Puis finalement j'ai zappé car j'avais trouvé ça un peu compliqué pour tout de suite commencer par ça.
Il y a un game engine "kelvar unREAL engine" codé par le créateur de fasm.
http://flatassembler.net/examples.php
Par contre aucune idée si c'est 2d ou 3d, car x32 uniquement et ne fonctionne pas sous mon win64, je n'ai pas encore pu le tester.
c'est marrant de vous voir parler de 3d en assembleur car je me suis mis a l'assembleur après avoir été déçu de la lenteur d'un moteur 3d fil de fer que j'avait réalisé en Qbasic et le temps que j'apprenne correctement a me servir de l'assembleur je me suis totalement désinteressé de la 3d et ce n'est que réçamment que je me suis amusé a porter mon prog qbasic en javascript (visible ici: http://bifur.olympe.in/test.html) et puis je me suis aussi désinteressé du javacript...
ça me donne envie d'essayer de le passer en assembleur. ça me permettra au moins d'essayer d'utiliser le fpu. ce que je n'avait jamais fait avant (traçer un ligne sur un écran vesa je doit avoir une fonction qui fait ça dans un coin de mon disque dur)
@n5Rzn1D9dC
Commencez par la 3D ça me semble difficile il faut mieux déjà être a l'aise avec le langage qu'on utilise je pense , pour "kelvar unREAL engine" ça me semble d’être un moteur 2D (vu les ressources ).
@bifur je trouve cela très interessant de faire la 3D software et evidamment le faire en assembleur permet d'avoir a mon avis de très bonne performance .
Pour faire de la 3D il faut clairement éviter les langages interpréter surtout si on utilise pas la carte graphique.
Sinon je trouve ton test du cube pas mal ^^
Vous avez un bloqueur de publicités installé.
Le Club Developpez.com n'affiche que des publicités IT, discrètes et non intrusives.
Afin que nous puissions continuer à vous fournir gratuitement du contenu de qualité, merci de nous soutenir en désactivant votre bloqueur de publicités sur Developpez.com.
Partager