bonjour
ma question est simple comment on peut insérer un code assembleur dans un code c et merci
bonjour
ma question est simple comment on peut insérer un code assembleur dans un code c et merci
Cela dépend du compilateur, tu utilises lequel?Envoyé par zerocoolyoussef
Jc
_asm{
//code assembleur
}
je ne suis pas certain que se soit portable.
et aprés effectivement
Cela dépend du compilateur
Apparemment c'est possible en C99 : http://www.developpez.net/forums/sho...8&postcount=44
Peut-etre la aussi
http://asm.developpez.com/faq/?page=fg#fg_asm_inline
ben j'utilise le compilateur turbo c++.
ouiiii ca marché le truc de _asm{ } avec mon compilateur merccii![]()
Gagner la moindre micro-seconde, le moindre octet.Envoyé par Gruik
Bof avec Turbo C++ on peut toujours faire du VGA 320*240 ; on apprend comme çaEnvoyé par Gruik
![]()
Tu peux essayer de programmer le VESA mais il faut toucher à l'EMS , XMS
Si il s'agit d'acceder à certaines adresses speciales (memoire video & co), on peut le faire aussi en C
Faire ceci n'est pas portable?
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2 volatile unsigned char * memoire_speciale = 0xA000; memoire_speciale[43] = 33;
Envoyé par Gruik
J'ai insisté : j'ai eu une 'exception' (normal sur une machine avec MMU : Windows XP).
Code : Sélectionner tout - Visualiser dans une fenêtre à part main.c:37: warning: initialization makes pointer from integer without a cast
Donc, non, ce n'est pas portable. (même avec le cast (unsigned char *) évidemment). Ca peut être compilable, mais le comportement est indéfini.
Ah oui mais je parlais pas de ça, c'est normal l'OS interdit d'acceder aux adresses speciales comme ça
(enfin c'était possible sous dos)
Mais comme visiblement il veut faire une application dos pour faire du VESA, c'est comme ça que ça marche
Si on l'avait fait en assembleur yaurait eu la meme exception sous XP
sous DOS (Borland C), on ne fait pas comme ça non plus, maisEnvoyé par Gruik
Ce qui est loin d'être portable.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4 #include <dos.h> /* assuming memory model LARGE */ volatile unsigned char * memoire_speciale = MK_FP (0xA000, 0x0000); memoire_speciale[43] = 33;
Oui il faut utiliser un pointeur "long" avec MK_FP comme l'illustre Emmannuel.Envoyé par Gruik
On peut utiliser si mes souvenirs sont bons l'union REGS et appeler des interruptions.
Mais effectivement c'est pas portable
bon
personnellement je suis entrain de réaliser dans le cadre d'un projet un systeme de gestion de fichiers ou on ecrit directement dans la disquette sans passé par le systeme d'exploitation puisqu' on le représente nous même.J'ai besoin du code assembleur seulement pour ecire/lire un secteur physique dans une disquette
Pouquoi faire ? Les fonctions du C (fopen(), fgetc(), fread() fwrite() etc.) ne te conviennent pas ?Envoyé par zerocoolyoussef
Sinon, il doit certainement exister des fonctions de bas niveau (équivallentes aux fonctions BIOS[1] d'un PC) qui font ce que tu veux faire. Quel est ton système ?
------------------------
[1] INT 13, 15, 16, 17 http://www.netnam.vn/unescocourse/os...m%20the%20BIOS
bonjour
ben regardez ca marchez avec le compilateur turbo c++ quand je voulais integrer un code asembleur il me suffisait de mettre _asm{
-----code asembleur
}
Mais quand j'ai orienté mon programme vers linux le gcc n'accepte pas cette ecriture.Alors si une personne connait comment on peut resuodre ce problème
![]()
Partager