IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Assembleur Discussion :

Arrêter le PC


Sujet :

Assembleur

  1. #1
    Membre expérimenté

    Inscrit en
    Mai 2002
    Messages
    720
    Détails du profil
    Informations forums :
    Inscription : Mai 2002
    Messages : 720
    Points : 1 594
    Points
    1 594
    Par défaut Arrêter le PC
    J'ai développé une disquette bootable toute simple (Affichage à l'écran des entrées clavier).

    Mon problème est que sur mon P4, lorsque je veux éteindre mon OS révolutionnaire, la pression de la touche Power m'arrète les disques dur, et le PC semble entrer en veille !!!
    Un deuxième appuis sur le bouton fait se réveiller mon OS qui continue a fonctionner comme si de rien n'était.

    D'ou mon problème, je ne peux pas arreter mon PC !

    Je cherche donc une procédure permettant de stoper mon PC et l'arreter complètement (Comme sous Windows, quand on fait démarrer arreter : l'allimentation s'arrete toute seule).

    Merci beaucoup pour votre aide !

    Smortex

    Les FAQ Assembleur - Linux
    In The Beginning Was The Command Line Neal Stephenson

  2. #2
    Membre expérimenté

    Inscrit en
    Mai 2002
    Messages
    720
    Détails du profil
    Informations forums :
    Inscription : Mai 2002
    Messages : 720
    Points : 1 594
    Points
    1 594
    Par défaut
    Je pense à une chose : Ca serait-y pas la même application sous Windows qui affiche les écrans d'arret et stoppe le PC ?

    J'avais trouvé le nom de l'exe un jour, mais je ne m'en souvient plus


    Si quelqu'un sait de quelle application il s'agit, je lui serait reconassiant de me le signaler ! Un peu de désassemblage peut s'avérer fort instructif !

    Merci

    Smortex

    Les FAQ Assembleur - Linux
    In The Beginning Was The Command Line Neal Stephenson

  3. #3
    Membre régulier

    Profil pro
    Inscrit en
    Décembre 2002
    Messages
    65
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2002
    Messages : 65
    Points : 105
    Points
    105
    Par défaut
    Salut,

    Bon, voici quelques éléments de réponse qui vont peut être t'éclairer ...

    1. Tu as apparemment une tour ATX. Effectivement, si tu appuies 1 fois de manière brève sur le bouton, tu vas passer en veille. Si tu appuies continuement (au moins 3-4 secondes) sur ce même bouton, ton PC va normalement s'éteindre. M'enfin tout ça tu le savais peut être déjà.

    2. Voici ce que j'ai trouvé là: http://elektron.et.tudelft.nl/~witteman/PowerOff.html
    Cet exe fait exactement ce que tu veux. J'ai tenté de le désassembler avec debug. Le gars fait plusieurs appel à l'int 15h du bios (APM, fonction ah=53h ??), mais je n'ai pas pu isoler concrètement la méthode. Si tu y arrives, fais moi signe, ça m'interesse aussi.

    3. A défaut d'éteindre le pc, tu peux éventuellement t'orienter vers une solution de reboot pour ton os sensationnel:

    en modes réel comme protégé: tu peux envoyer (out...) le bon octet de commande vers le circuit clavier, pour commettre un reboot. C'est assez bizarre, mais sur un PC on peut rebooter grâce au clavier.
    Attention à désactiver la ligne A20, si celle ci est activée.

    en mode réel, tu peux:
    - utiliser int 19h (pas trop recommandé)
    - écrire 1234h (=> warm reboot) en 0040:0072, et faire un jmp long en FFFF:0000. Ceci fait un reboot à chaud.

    en mode protégé, la meilleure méthode est de commettre une "triple fault". Par exemple en flinguant le registre idtr et en faisant un int logiciel.


    Voilà, j'espère que ces quelques explications t'auront plu.

    golem
    +++

  4. #4
    Membre expérimenté

    Inscrit en
    Mai 2002
    Messages
    720
    Détails du profil
    Informations forums :
    Inscription : Mai 2002
    Messages : 720
    Points : 1 594
    Points
    1 594
    Par défaut
    Merci pour ces infos !

    Citation Envoyé par golem
    - utiliser int 19h (pas trop recommandé)
    Pourquoi n'est il pas recommandé d'utiliser cette Int ? (En fait, je l'utilise sur tous mes disques bootables !!)

    Smortex

    Les FAQ Assembleur - Linux
    In The Beginning Was The Command Line Neal Stephenson

  5. #5
    Membre régulier

    Profil pro
    Inscrit en
    Décembre 2002
    Messages
    65
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2002
    Messages : 65
    Points : 105
    Points
    105
    Par défaut
    Salut,

    Extrait de "la bible PC - 4ème édtion", p. 1265:


    Interruption 19h BIOS
    Lancement du système

    Entrée: aucune
    Sortie: aucune

    Remarques:
    Il arrive que cette interruption ne relance pas l'ordinateur, mais au contraire provoque un plantage. Cela dépend du fait que le contenu de la mémoire RAM est effacé alors que la table des vecteurs d'interruption reste intacte dans la zone de ces interruptions 00h à 1Ch. Si un programme TSR atteint l'une de ces interruptions, le prochain appel de cette interruption provoque irrémédiablement un plantage. Cela s'applique surtout à l'interruption 08h qui est utilisée par la plupart des programmes TSR.

    Par conséquent, évitez d'utiliser cette interruption et adoptez plutot la technique suivante pour relancer le système [... méthode décrite dans le précédent message ...]

    (...)


    Tu es toi dans le cas spécial que tu n'es pas sous DOS et par conséquent tu ne seras pas géné par un quelconque TSR. Cependant, si ton os s'amuse à trifouiller la table des int., il y a de fortes chances que tu rentres dans le cadre de la susceptibilité à plantage. J'ai moi même fait l'expérience et j'en ai conclu de ne pas utiliser int 19h. Après c'est à toi de voir.

    Pour ce qui est des fonctions BIOS APM, vois cette spécif: http://www.pdc.kth.se/~joda/apm-1.2.pdf

    La méthode pour arrêter le système est décrite dedans.

    Voilà.
    golem
    +++

  6. #6
    Membre expérimenté

    Inscrit en
    Mai 2002
    Messages
    720
    Détails du profil
    Informations forums :
    Inscription : Mai 2002
    Messages : 720
    Points : 1 594
    Points
    1 594
    Par défaut
    Citation Envoyé par golem
    J'ai tenté de le désassembler avec debug. Le gars fait plusieurs appel à l'int 15h du bios (APM, fonction ah=53h ??), mais je n'ai pas pu isoler concrètement la méthode. Si tu y arrives, fais moi signe, ça m'interesse aussi.
    J'ai réussi à reconstituer le source de l'application ! Milles mercis à toi, Ô Golem !!!

    Comme il y en à que ca peut intéresser, voici la chose, traduite en la languge de Molière (Code compilé avec FASM pour un .com de 267 Octets !) :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    104
    105
    106
    107
    108
    109
    110
    111
    112
    113
    114
    115
    116
    117
    118
    119
    120
    121
    122
    123
    124
    125
    126
    127
    128
    129
    130
    131
    132
    133
    134
     
    ;------------------------------------------------------------------------------;
    ;      Power.com  <--> Arrêt de PC grâce a APM (Advanced Power Managment)      ;
    ;      Ce code ne pourra fonctionner que si le PC possède une alimentation     ;
    ;      du type "ATX"                                                           ;
    ;                                                                              ;
    ;      Compilateur utilisé : FASM - Rédaction du code : Romain TARTIERE        ;
    ;                                 e-mail :   romain-tartiere AT astase.com     ;
    ;                                 Site internet : http://www.astase.com        ;
    ;------------------------------------------------------------------------------;
     
            Org     100h
     
            MOV     DX, APMVer      ;
            MOV     AH, 09h         ;
            INT     21h             ; Récupération des infos APM du système.
     
            MOV     AX, 5300h       ;
            MOV     BX, 0000h       ;
            INT     15h             ; Vérification du matériel
     
            Jb      No_APM_Support  ; Erreur : APM non supporté par le système !
     
    ;------------------------------------------;
    ; Afichage de la version de APM du système ;
    ;------------------------------------------;
            PUSH    AX
            PUSH    AX
            ADD     AH, 30h         ;
            MOV     DL, AH          ;
            MOV     AH, 02h         ;
            INT     21h             ; Affichage du numéro de version majeur.
     
            MOV     DL, 2Eh         ;
            MOV     AH, 02h         ;
            INT     21h             ; Affichage du Point.
     
            POP     AX              ;
            ADD     AL, 30h         ;
            MOV     DL, AL          ;
            MOV     AH, 02h         ;
            INT     21h             ; Affichage du numéro de version mineure.
     
    ;----------------------------;
    ; Connexion au service d'APM ;
    ;----------------------------;
            MOV     AX, 5301h       ;
            MOV     BX, 0000h       ;
            INT     15h             ; Connect real Mode Interface.
     
            Jb      Deconnexion     ; Erreur ! On déconnecte...
     
    ;-------------------------;
    ; Arret de l'alimentation ;
    ;-------------------------;
            MOV     AX, 530Eh       ;
            MOV     BX, 0000h       ;
            POP     CX              ;
            INT     15h             ; Version du driver.
     
            MOV     AX, 530Dh       ;
            MOV     BX, 0001h       ;
            MOV     CX, 0001h       ;
            INT     15h             ; On rend disponibles les services d'APM.
     
            MOV     AX, 530Fh       ;
            MOV     BX, 0001h       ;
            MOV     CX, 0001h       ;
            INT     15h             ; On rend disponible l'arret de l'alimentation.
     
            MOV     AX, 5307h       ;
            MOV     BX, 0001h       ;
            MOV     CX, 0003h       ;
            INT     15h             ; Arret du système.
     
            Jb      Set_APM_Failed  ; Erreur !
     
            JMP     Deconnexion
     
    ;-----------------------------;
    ; L'arrêt du système à échoué ;
    ;-----------------------------;
    Set_APM_Failed:
            PUSH    AX
            MOV     AX, 0DDCh
            MOV     DS, AX
            MOV     DX, Fail
            MOV     AH, 09h
            INT     21h
            POP     AX
            Jmp     APM_Done
     
    ;--------------------------------;
    ; Déconnexion des services d'APM ;
    ;--------------------------------;
    Deconnexion:
            MOV     AX, 5304h       ;
            MOV     BX, 0000h       ;
            INT     15h             ; Déconnexion de l'interface APM.
     
            Jb      No_APM_Support
            JMP     APM_Done
     
    ;------------------------------------------------------;
    ; APM semble ne pas être pris en charge par le système ;
    ; (Ca peut être Windows qui fait une blague ;)         ;
    ;------------------------------------------------------;
    No_APM_Support:
            MOV     DX, NoAPM
            MOV     AH, 09h
            INT     21h
     
    ;----------------------;
    ; Fin de l'application ;
    ;----------------------;
    APM_Done:
            MOV     DX, Done
            MOV     AH, 09h
            INT     21h
     
            MOV     AX, 4C00h       ;
            INT     21h             ; Fin du programme
     
    ;-------------------------;
    ; Constantes du programme ;
    ;-------------------------;
    APMVer  db      'Version de APM du systŠme : $'
    NoAPM   db      13,10,'[Erreur] : Pas de support de APM !$'
    Fail    db      13,10,'Echec lors de l''arret de l''alimentation !$'
    Done    db      13,10,'Termin‚.$';
     
    ;--------------------;
    ; That's all folks ! ;
    ;--------------------;
    C'est une application complète qui fonctionnera sous DOS (Attention : Windows fait des blagues : Win 98, tout semble correct, Win XP "APM non supporté !" )

    Bon développement à tous et encore merci à ceux qui m'ont aidé a corriger ce problème !

    Smortex

    Les FAQ Assembleur - Linux
    In The Beginning Was The Command Line Neal Stephenson

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. arrêter serveur mysql
    Par rigel dans le forum Requêtes
    Réponses: 10
    Dernier message: 18/08/2004, 18h49
  2. [C#] [VS.NET] Arrêter le système
    Par patdez dans le forum Windows Forms
    Réponses: 2
    Dernier message: 16/07/2004, 14h35
  3. Arrêter une Thread brutalement!
    Par Rodrigue dans le forum C++Builder
    Réponses: 2
    Dernier message: 18/01/2004, 21h29
  4. [DiVERS] -> Arrêter et redemarrer son programme ?
    Par MaTHieU_ dans le forum C++Builder
    Réponses: 5
    Dernier message: 20/08/2003, 15h25
  5. Arrêter un prog si temps de connexion trop long
    Par jakouz dans le forum Langage
    Réponses: 4
    Dernier message: 22/10/2002, 18h28

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo