• # L'asm, le DOS, les démos, le mode X, love them !

    Posté par . En réponse au message Assembleur inline dans gcc. Évalué à 3.

    Est-ce que je suis sûr que je ne vais pas écraser une donnée qui a été mise précédemment dans le registre ax par le compilateur C ?


    Il y a peu de chance. Le C ne fait pour ainsi dire que des appels de fonctions, donc de l'une à l'autre ... à part si tu as passé des options d'optimisation spéciales (il y en a une qui tente de passer le maximum d'infos dans les registres plutôt que dans la pile).

    Si tu crains quelque chose, essaie versatile et register, sachant que c'est sans garantie.

    Mais ça plante sur un segfault, et je ne sais absolument pas pourquoi ! Pire encore, je ne sais pas comment je peux le savoir ! J'ai vérifié que les I/O de la carte étaient activées dans le BIOS, mais malgré tout, dès que j'appelle l'interruption, boum, plantage... Quelqu'un aurait une piste, ne serait-ce que pour une manière de déboguer ce qui se passe ?


    Il n'y a aucune chance que ce que tu comptes faire fonctionne, car il y a longtemps que tous les systèmes d'exploitation fonctionnent en mode protégé.

    D'une manière générale, ton application fonctionne dans un environnement partagé par plusieurs autres ressources, donc tu ne peux pas aller modifier comme ça l'état de ta machine sans en référer au système. Si tu veux bidouiller les fonctions du BIOS, tu as deux options :

    - Tu démarres sous DOS (voir http://www.freedos.org/ )
    - Tu fais des exécutables bootables, tu les colles sur les premiers secteurs d'une disquette et tu démarres dessus.

    Je t'encourage cependant fortement dans cette voie, car les jeunes coders qui débutent aujourd'hui ne peuvent absolument plus se rendre compte de la manière dont fonctionne leur machine. Par contre, si tu fais appel aux fonctions du BIOS et que ton accumulateur ax n'est même pas encore un eax, c'est que ton bouquin doit être assez vieux, maintenant.