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

x86 16-bits Assembleur Discussion :

Faire un cold boot


Sujet :

x86 16-bits Assembleur

  1. #1
    Membre actif

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

    Informations forums :
    Inscription : Décembre 2002
    Messages : 339
    Points : 279
    Points
    279
    Par défaut Faire un cold boot
    Voilà, je veux faire un rebootage à froid avec un jump far. Le problème c'est que mon code suivant ne marche pas .....
    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
     
    code segment
    assume cs:code
    assume ds:data
    assume ss:pile
    debut:
    mov ax,0040h
    mov ds,ax
    mov si,0072h
    mov word ptr ds:[si],0000h
    mov ax,0FFFFh
    mov es,ax
    xor si,si
    jmp es:[si]
    code ends
     
    data segment
    data ends
     
    pile segment stack
    remplissage db 256 DUP (?)
    pile ends
     
    end debut
    Je pense que le problème vient du 'jmp es:[si]' qui devrait être un 'jmp es:si' mais mon compilo le prend pas (TASM).

    Est-ce que quelqu'un peut me renseigner là-dessus ? Merci à ceux qui voudront bien répondre
    Ma boule de cristal s'était éclaircie et puis plus rien. Alors je me suis mis à internet et maintenant j'ai plus de renseignements qu'avec cette satané boule .....

  2. #2
    Membre éclairé
    Profil pro
    Inscrit en
    Juillet 2002
    Messages
    842
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2002
    Messages : 842
    Points : 696
    Points
    696
    Par défaut
    moi, j'en ai jamais fait, mais tu es sur que ca marche comme ca les jmps far ??

    ne marche pas ?

    ---

    Après avoir cherché,j'ai des doutes. Ce que je t'ai filé devrai marcher, mais pour le saut indirect tu ne dois pas plutot pointer un endroit en mémoire qui contient l'adresse plutot ?? parce que le saut JMP sreg:reg je suis pas sur que ca existe

  3. #3
    Membre actif

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

    Informations forums :
    Inscription : Décembre 2002
    Messages : 339
    Points : 279
    Points
    279
    Par défaut
    Non, en faisant ta méthode Blustuff, il me met l'erreur :
    'Near jump or call to different CS'. J'ai donc fait un 'jmp far 0FFFFh:0' et là il met met 'Illegal Immediate'... Satané compilo

    Après m'être cassé la tête un peu cette nuit, j'ai trouvé deux solutions. La première j'ai trouvé une manière de faire un saut direct. Dans mon cas, ça donne :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    db 0EAh,0,0,0FFh,0FFh
    Maintenant, en allant voir ce qui se trouve en FFFF:0, ce n'est qu'un appel de l'interruption 19h donc la deuxième méthode et d'utiliser l'interruption 19h directement et de ne pas faire de jmp far. Cependant, je pense qu'il faut toujours mettre 0 dans 0040h0072h si on veut faire un cold reboot.

    Et, je finirai par dire que j'ai trouvé dans ma doc, l'existence de ce jmp far codé avec 0EAh, si elle t'intéresse Blustuff.

    Merci encore de t'être penché sur ce problème
    Ma boule de cristal s'était éclaircie et puis plus rien. Alors je me suis mis à internet et maintenant j'ai plus de renseignements qu'avec cette satané boule .....

  4. #4
    Membre éprouvé
    Avatar de Biglo
    Profil pro
    Inscrit en
    Juillet 2002
    Messages
    537
    Détails du profil
    Informations personnelles :
    Localisation : France, Moselle (Lorraine)

    Informations forums :
    Inscription : Juillet 2002
    Messages : 537
    Points : 984
    Points
    984
    Par défaut
    Pour sauter à FFFF:0000, tu peux aussi utiliser RETF qui désempile l'adresse 32bits avant de sauter là-bas. Ce qui pourrait donner ça si je ne me trompe pas.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    xor ax,ax
    dec ax
    push ax ; empile FFFF
    inc ax
    push ax : empile 0000
    retf

  5. #5
    Membre actif

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

    Informations forums :
    Inscription : Décembre 2002
    Messages : 339
    Points : 279
    Points
    279
    Par défaut
    Intéressant, merci pour l'astuce Biglo .

    Ce qui m'amène à une autre question, c'est quoi la différence entre 'retf' et 'retf 0002'. Vu que j'ai aucune doc sur cette instruction, ce serait sympa d'éclairer ma lanterne sur ce sujet.
    Ma boule de cristal s'était éclaircie et puis plus rien. Alors je me suis mis à internet et maintenant j'ai plus de renseignements qu'avec cette satané boule .....

  6. #6
    Membre éclairé
    Profil pro
    Inscrit en
    Juillet 2002
    Messages
    842
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2002
    Messages : 842
    Points : 696
    Points
    696
    Par défaut
    non, la doc m'interesse pas trop, vu que j'ai déja programmé l'emulatio nentre autre de cette instruction je sait comment elle fonctionne en langage machine, le seul truc c'est que je sait pas comment l'utiliser non plus dans un assembleur. Cela dit

    ret imm

    et

    retf imm

    ont la mêm spécificité et si je me souviens servent à incrementer (e)sp comme pour liberer la pile demandée par une fonction. Mais comme je l'ai jamais vu, je suis pas sur.

  7. #7
    Membre actif

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

    Informations forums :
    Inscription : Décembre 2002
    Messages : 339
    Points : 279
    Points
    279
    Par défaut [Résolu]pb reboot avec jmp far
    ok, ça y est, j'ai compris ce que faisait ret et retf. Merci à tous
    Ma boule de cristal s'était éclaircie et puis plus rien. Alors je me suis mis à internet et maintenant j'ai plus de renseignements qu'avec cette satané boule .....

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

Discussions similaires

  1. Recherche logiciel pour faire des multi-boot sur clé USB
    Par Invité dans le forum Autres Logiciels
    Réponses: 4
    Dernier message: 16/10/2014, 18h56
  2. [SYSLINUX] boot floppy/CD : comment faire?
    Par chantal4 dans le forum Autres
    Réponses: 23
    Dernier message: 03/04/2007, 19h08
  3. Problème de boot , ne sait plus quoi faire ...
    Par timZeR0 dans le forum Administration système
    Réponses: 3
    Dernier message: 02/12/2005, 18h01
  4. Comment faire pour créer son master boot record
    Par HNT dans le forum Ordinateurs
    Réponses: 3
    Dernier message: 19/09/2005, 20h58

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