begin process at 2012 05 29 09:57:57
  Trouver un code source :
 
dans
 
Accueil > Forum > 

Archive C/C++

 > 

Archives

 > 

Divers

 > 

interruption avec dev-cpp dans instruction asm()


Derniers messages déposésPoser une question dans le forum ou lancer une discussion

interruption avec dev-cpp dans instruction asm()

jeudi 28 août 2003 à 17:07:04 | interruption avec dev-cpp dans instruction asm()

mrtoufou

J'ai un probleme avec dev-cpp. J'ai besoin de trouver la resolution avant d'acceder a la memoire video et je comptais pour cela utiliser la fonction vesa 4F03 de l'interruption 10.

Ma source compile mais lorsque je lance le prog je me tape un bon vieil ecran bleu windows 9x qui me dit que une erreur 0D et que l'application va se terminer.
De plus, j'ai essayé d'autres interruptions et j'ai eu a chaque fois des problemes a l'execution. J'ai ensuite compilé un code similaire en assembleur avec nasm et la pas de probleme.
J'ai cherché sur le site et j'ai trouvé un probleme similaire qui n'a pas non plus trouvé de réponse.
Voila le code :

#include "stdio.h"
#include "conio.h"
long int videoMod = 0;
long int codeErr = 0;
int main()
{
asm(
"pushl %eax\n"
"pushl %ebx\n"
"movl $0x00004F03, %eax\n"
"int $0x10\n"
"movl %eax, _codeErr\n"
"movl %ebx, _videoMod\n"
"popl %ebx\n"
"popl %eax"
);
switch(videoMod)
{
case 0x101: printf("640x480, 256 couleurs\n"); break;
case 0x110: printf("640x480, 32768 couleurs\n"); break;
case 0x111: printf("640x480, 65536 couleurs\n"); break;
case 0x112: printf("640x480, 16777216 couleurs\n"); break;
case 0x103: printf("800x600, 256 couleurs\n"); break;
case 0x113: printf("800x600, 32768 couleurs\n"); break;
case 0x114: printf("800x600, 65536 couleurs\n"); break;
case 0x115: printf("800x600, 16777216 couleurs\n"); break;
case 0x105: printf("1024x768, 256 couleurs\n"); break;
case 0x116: printf("1024x768, 32768 couleurs\n"); break;
case 0x117: printf("1024x768, 65536 couleurs\n"); break;
case 0x118: printf("1024x768, 16777216 couleurs\n"); break;
default: printf("mode inconnu: %x\nErreur: %x", videoMod, codeErr); break;
}
getch();
return 0;
}

Voila merci a tous ceux qui se pencherons sur le probleme.
jeudi 28 août 2003 à 17:24:11 | Re : interruption avec dev-cpp dans instruction asm()

BruNews

Administrateur CodeS-SourceS
Dans dev-cpp les instructions sont a l'envers ???
"movl %eax, _codeErr\n"
"movl %ebx, _videoMod\n"

ce ne serait pas plutot:
mov _codeErr, eax
mov _videoMod, ebx


BruNews, ciao...


-------------------------------
Réponse au message :
-------------------------------

> J'ai un probleme avec dev-cpp. J'ai besoin de trouver la resolution avant d'acceder a la memoire video et je comptais pour cela utiliser la fonction vesa 4F03 de l'interruption 10.
>
> Ma source compile mais lorsque je lance le prog je me tape un bon vieil ecran bleu windows 9x qui me dit que une erreur 0D et que l'application va se terminer.
> De plus, j'ai essayé d'autres interruptions et j'ai eu a chaque fois des problemes a l'execution. J'ai ensuite compilé un code similaire en assembleur avec nasm et la pas de probleme.
> J'ai cherché sur le site et j'ai trouvé un probleme similaire qui n'a pas non plus trouvé de réponse.
> Voila le code :
>
> #include "stdio.h"
> #include "conio.h"
> long int videoMod = 0;
> long int codeErr = 0;
> int main()
> {
> asm(
> "pushl %eax\n"
> "pushl %ebx\n"
> "movl $0x00004F03, %eax\n"
> "int $0x10\n"
> "movl %eax, _codeErr\n"
> "movl %ebx, _videoMod\n"
> "popl %ebx\n"
> "popl %eax"
> );
> switch(videoMod)
> {
> case 0x101: printf("640x480, 256 couleurs\n"); break;
> case 0x110: printf("640x480, 32768 couleurs\n"); break;
> case 0x111: printf("640x480, 65536 couleurs\n"); break;
> case 0x112: printf("640x480, 16777216 couleurs\n"); break;
> case 0x103: printf("800x600, 256 couleurs\n"); break;
> case 0x113: printf("800x600, 32768 couleurs\n"); break;
> case 0x114: printf("800x600, 65536 couleurs\n"); break;
> case 0x115: printf("800x600, 16777216 couleurs\n"); break;
> case 0x105: printf("1024x768, 256 couleurs\n"); break;
> case 0x116: printf("1024x768, 32768 couleurs\n"); break;
> case 0x117: printf("1024x768, 65536 couleurs\n"); break;
> case 0x118: printf("1024x768, 16777216 couleurs\n"); break;
> default: printf("mode inconnu: %x\nErreur: %x", videoMod, codeErr); break;
> }
> getch();
> return 0;
> }
>
> Voila merci a tous ceux qui se pencherons sur le probleme.
jeudi 28 août 2003 à 20:41:52 | Re : interruption avec dev-cpp dans instruction asm()

mrtoufou

Salut BruNews,
Eh bien oui, c'est normal pour le code assembleur.
J'ai trouvé ca sur le site hier. Le compilateur par defaut de dev-cpp c'est gcc et il prend de instruction en assembleur AT&T et ca marche pas pareille. y a juste quelques regles de syntaxe qui changent. Voila les principales regles de syntaxe pour ceux qui seraient interressés en anglais parce que je veux pas me faire chier a traduire :

. Register names are prefixed with %, so that registers are %eax, %dl and so on, instead of just eax, dl, etc. This makes it possible to include external C symbols directly in assembly source, without any risk of confusion, or any need for ugly underscore prefixes.
. The order of operands is source(s) first, and destination last, as opposed to the Intel convention of destination first and sources last. Hence, what in Intel syntax is mov eax,edx (move contents of register edx into register eax) will be in GAS syntax mov %edx,%eax.
. The operand size is specified as a suffix to the instruction name. The suffix is b for (8-bit) byte, w for (16-bit) word, and l for (32-bit) long. For instance, the correct syntax for the above instruction would have been movl %edx,%eax. However, gas does not require strict AT&T syntax, so the suffix is optional when size can be guessed from register operands, and else defaults to 32-bit (with a warning).
. Immediate operands are marked with a $ prefix, as in addl $5,%eax (add immediate long value 5 to register %eax).
. Missing operand prefix indicates that it is memory-contents; hence movl $foo,%eax puts the address of variable foo into register %eax, but movl foo,%eax puts the contents of variable foo into register %eax.
. Indexing or indirection is done by enclosing the index register or indirection memory cell address in parentheses, as in testb $0x80,17(%ebp) (test the high bit of the byte value at offset 17 from the cell pointed to by %ebp).

De toute facon le probleme vient juste de l'instruction "int $0x10" parce que quand je la commente ca marche. Mais ca fait pas trop ce que je veux.
Merci de t'etre interressé a mon probleme BruNews. a plus


Cette discussion est classée dans : probleme, case, printf, couleurs, break


Répondre à ce message

Sujets en rapport avec ce message

probleme avec les couleurs [ par sparetime ] bonsoirsous dos en graphique je peux utiliser outtext et printf pour afficher du texte mais quant à changer la couleur je peux le faire avec outext av Petit jeu en mode texte [:D] [ par thedivxboy ] Alors je carbure en C aujourd'hui ...Pourquoi la tête ne se déplace-t-elle pas au bon endroit ?Pourquoi dois-je mettre un getchar() à un certain endr CASE [ par CHKDSK2K ] Bonjour, j'ai une variable de type char "choix";  je voudrais utiliser cette variable dans un switch mais il ne veut passwitch(choix){    case 'maison CreateService [ par 0xYg3n3 ] Bonjour, Voila j'ai cree une application que je souhaits mettre en mode Service. Mais le probleme est que lorsque je vais dans le panneau de configura ptit probleme [ par aladdin_wydadi ] voila le code source ke j'ai trouvé : #include#include //--------------------------------------------------------------------// Conversion d'un nombre prob math [ par chinois57 ] g un prob pour faire les fonction cosinus, sinus,tangante, ansmerci de maider ma source est: #include #include #include main(){float x,y;char z; print Lister Chaque lancer de dé aléatoire [ par pkmnlio ] bonjour,je suis entrain de faire un programme qui donne 100 nombres aléatoirement entre 1 et 6  puis me dis combien de 6 j'ai obtenu et combien de nom cosinus,sinus,tangante,ans [ par chinois57 ] quelqu'un peut maider a rajouter (cos, sin, tan, ans) svp ma source est:#include #include #include main(){float x,y;char z; printf("veuillez saisir un client irc [ par tagboys ] bon j'ai trouver une source sur ce site ces un socket bot j'aimerait y rajouter quelque commands .la seul chose qu'il a ces le pong reply .j'aimerait Problème avec un switch en C [ par alexis69 ] Alors voilà. J'ai coder un petit code avec un menu. À la fin de mon switch j'ai ajouté l'option default comme ça si une personne tape autre chose que


Nos sponsors


Sondage...

CalendriCode

Mai 2012
LMMJVSD
 123456
78910111213
14151617181920
21222324252627
28293031   

Consulter la suite du CalendriCode

Photothèque

A découvrir



 
Développement réalisé par Nicolas SOREL (Nix) avec l'aide de : Cyril DURAND et Emmanuel (EBArtSoft), Merci à Vincent pour ses précieux conseils.
CodeS-SourceS.com© Toute reproduction même partielle est interdite sauf accord écrit du Webmaster
CodeS-SourceS.com© est une marque déposée tous droits réservés

Google Coop CodeS-SourceS Google Coop CodeS-SourceS
Temps d'éxécution de la page : 0,952 sec (4)

Nous contacter | Annoncer sur CodeS-SourceS | Mentions légales