C/c++ et 19h

cs_Xs Messages postés 368 Date d'inscription mercredi 14 novembre 2001 Statut Membre Dernière intervention 1 septembre 2008 - 19 juin 2002 à 14:38
MadDuck427 Messages postés 4 Date d'inscription jeudi 26 juin 2003 Statut Membre Dernière intervention 1 juillet 2003 - 1 juil. 2003 à 22:02
salut !

je travaille sous VC++ et j'aimerais utiliser une interuption processeur : 19h

mon code actuel marche mais au lieu d'eteindre le PC, il le fait plante (remarquez ca change pas grand choses)

mon code :

int main(int argc, char* argv[])
{
_asm{
mov AH,0
mov AL,0x19
int 19h
}

return 0;
}

remarquez que si vous savez pas la syntaxe VC++ mais DEVC++, je suis prenneur aussi

****************************
Le C/C++ et une Veritable merveille !
****************************

5 réponses

cs_PierreF Messages postés 33 Date d'inscription mercredi 15 mai 2002 Statut Membre Dernière intervention 24 octobre 2003
23 juin 2002 à 12:00
Le problème c'est que tu veut appeller un interuption du dos (16 bit) avec un programme win32.
VC++ ne sais faire que des prog win32. Si tu veut faire un appelle d'un l'interuption 16 bit tu doit utiliser un compilateur C++ 16 bit.
0
Int19h Messages postés 58 Date d'inscription jeudi 25 avril 2002 Statut Membre Dernière intervention 19 juillet 2003
29 juin 2002 à 18:19
olleh

Je sais pas si le faite de compiler en 32bits perturbe le deroulement du programme... Ca me semble bizzard, l'inverse oui, mais la... Bref.

Par contre, tu utilises VC++, t'es donc sous windows. Le probleme est que windows redirige une grand partie des interruptions. Donc si tu utilies ses fonctions, certaine ne fonctionne plus comme sous DOS.

Question : Int19h@caramail.com

a+
0
MadDuck427 Messages postés 4 Date d'inscription jeudi 26 juin 2003 Statut Membre Dernière intervention 1 juillet 2003
1 juil. 2003 à 21:40
-------------------------------
Réponse au message :
-------------------------------
En fait l'int 19h est mal documentée et surtout commentée différemment d'un bookin à l'autre.
D ailleurs je ne voit pas ce ke sont ces paramètres dans AX!
En fait Int 19h sert ds tt les cas à charger le boot sector ou le MBR du disk dur (suivant parametrage du BIOS). Mais jamais à éteindre le PC!
Cette interruption est à utiliser uniquement en mode réel (DOS/Mode DOS sous Win9x).
Je ne sais si tes progs tournent sous DOS ou en émulation DOS sous Win mais Windows traite cette interruption en faisant quitter le programme; et sous DOS int 19h ne devrait pas etre utilisée (ou alors uniquement à partir d' un secteur de boot) car elle recharge le boot sector sans tenir compte du fait ke des interruption (IRQ) peuvent pointer sur cette zone provoquant alors le crash du PC.
Etant moi meme interessé par le fait d'éteindre le PC par voie logicielle (sous DOS, car sous Win il y a ExitKernel...), je n'ai jusk alor jamai trouvé un moyen standard d'y arriver.
Voilà sur ce bon courage!
0
MadDuck427 Messages postés 4 Date d'inscription jeudi 26 juin 2003 Statut Membre Dernière intervention 1 juillet 2003
1 juil. 2003 à 22:01
Ben en fait voilà j' ai trouvé ça et ca ne marche ke pr les alim ATX (ki tendent à se repandre!)

cut_alim:
;---------------connect_to_real_mode
mov ax, 0x5301
mov bx, 0x0000
int 0x15
;---------------cut_alimentation
mov ax, 0x5307
mov bx, 0x0001
mov cx, 0x0003
int 0x15
ret
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
MadDuck427 Messages postés 4 Date d'inscription jeudi 26 juin 2003 Statut Membre Dernière intervention 1 juillet 2003
1 juil. 2003 à 22:02
-------------------------------
Réponse au message :
-------------------------------

>
>
> Ben en fait voilà j' ai trouvé ça et ca ne marche ke pr les alim ATX (ki tendent à se repandre!)
>
> cut_alim:
> ;---------------connect_to_real_mode
> mov ax, 0x5301
> mov bx, 0x0000
> int 0x15
> ;---------------cut_alimentation
> mov ax, 0x5307
> mov bx, 0x0001
> mov cx, 0x0003
> int 0x15
> ret
>
0
Rejoignez-nous