C/c++ et 19h

Signaler
Messages postés
368
Date d'inscription
mercredi 14 novembre 2001
Statut
Membre
Dernière intervention
1 septembre 2008
-
Messages postés
4
Date d'inscription
jeudi 26 juin 2003
Statut
Membre
Dernière intervention
1 juillet 2003
-
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

Messages postés
33
Date d'inscription
mercredi 15 mai 2002
Statut
Membre
Dernière intervention
24 octobre 2003

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.
Messages postés
58
Date d'inscription
jeudi 25 avril 2002
Statut
Membre
Dernière intervention
19 juillet 2003

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+
Messages postés
4
Date d'inscription
jeudi 26 juin 2003
Statut
Membre
Dernière intervention
1 juillet 2003

-------------------------------
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!
Messages postés
4
Date d'inscription
jeudi 26 juin 2003
Statut
Membre
Dernière intervention
1 juillet 2003

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
Messages postés
4
Date d'inscription
jeudi 26 juin 2003
Statut
Membre
Dernière intervention
1 juillet 2003

-------------------------------
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
>