Section courante

A propos

Section administrative du site

Assembleur 80x86

VMRUN

AMD-V Run Virtual Machine

Syntaxe

VMRUN RAX

Description

Cette instruction permet de lancer l'exécution d'un flux d'instructions invité.

Algorithme

SI ((MSR_EFER.SVME = 0) OU (!PROTECTED_MODE)) ALORS
   EXCEPTION #UD()
FIN SI
SI CPL ≠ 0 ALORS
   EXCEPTION #GP()
FIN SI
SI RAX contient un adresse physique non supporté ALORS
   EXCEPTION #GP()
FIN SI
SI interception (VMRUN) ALORS
   #VMEXIT (VMRUN)
FIN SI
Mémorise l'adresse VMCB fournit dans RAX pour le prochain #VMEXIT
Sauvegarde l'état de l'hôte à l'adresse mémoire physique indiquer dans le VM_HSAVE_PA MSR: ES.sel, CS.sel, SS.sel, DS.sel, GDTR.{base,limit}, IDTR.{base,limit}, EFER, CR0, CR4, CR3, RFLAGS, VMRUN, RIP, RSP, RAX
Charge les informations de contrôle VMCB de l'adresse physique contient dans le registre RAX: vecteur d'interception, TSC_OFFSET contrôle d'interruption (v_irq, v_intr_*, v_tpr), EVENTINJ champ, ASID
SI page supporté ALORS
   NP_ENABLE
   SI NP_ENABLE = 1 ALORS
      nCR3
   FIN SI
FIN SI

Charge l'état d'invité VMCB de l'adresse physique RAX: ES.{base,limit,attr,sel}, CS.{base,limit,attr,sel}, SS.{base,limit,attr,sel}, DS.{base,limit,attr,sel}, GDTR.{base,limit}, IDTR.{base,limit}, EFER, CR0, CR4, CR3, CR2
   SI NP_ENABLE = 1 ALORS
      Charge également gPAT, RFLAGS, RIP, RSP, RAX, DR7, DR6, CPL
   FIN SI
   INTERRUPT_SHADOW

SI LBR virtualisation supporté ALORS
   LBR_VIRTUALIZATION_ENABLE
SI LBR_VIRTUALIZATION_ENABLE = 1 ALORS
   Sauvegarde l'état LBR dans la région de l'hôte sauvegardé: DBGCTL, BR_FROM, BR_TO, LASTEXCP_FROM, LASTEXCP_TO
   Charge l'état LBR du VMCB: DBGCTL, BR_FROM, BR_TO, LASTEXCP_FROM, LASTEXCP_TO
FIN SI
SI état invité consiste en un échec de vérification ALORS
   #VMEXIT(INVALID)
FIN SI
Exécute une commande entreposé dans TLB_CONTROL
GIF ← 1
SI EVENTINJ.V ALORS
   EXCEPTION Interruption dans l'invité
SINON
   Saut à la prochaine instruction invité
FIN SI

#VMEXIT:
   GIF ← 0
   Sauvaregarde l'état invité du VMCB: ES.{base,limit,attr,sel}, CS.{base,limit,attr,sel}, SS.{base,limit,attr,sel}, DS.{base,limit,attr,sel}, GDTR.{base,limit}, IDTR.{base,limit}, EFER, CR4, CR3, CR2, CR0
      SI pagination activé ALORS
         Sauvegarde également gPAT, RFLAGS, RIP, RSP, RAX, DR7, DR6, CPL, INTERRUPT_SHADOW
      FIN SI
   Sauvegarde l'état additionnel et interception les informations: V_IRQ, V_TPR, EXITCODE, EXITINFO1, EXITINFO2, EXITINTINFO
   Efface le champ EVENTINJ dans le VMCB
   Prépare pour le mode hôte par effacement interne des bits d'état du microprocesseur: efface l'interception, v_irq, v_intr_masking et tsc_offset, désactive la pagination, ASID ← 0
   Recharge l'état de l'hôte: GDTR.{base,limit}, IDTR.{base,limit}, EFER, CR0, CR0.PE ← 1, CR4, CR3
      SI hôte dans le mode de pagination PAE ALORS
         Recharge l'hôte PDPEs
      FIN SI
      Charge également RFLAGS, RIP, RSP, RAX, DR7 ← tous désactivé, CPL ← 0
      Recharge ES.sel du descripteur de segment GDT
      Recharge CS.sel du descripteur de segment GDT
      Recharge SS.sel du descripteur de segment GDT
      Recharge DS.sel du descripteur de segment GDT
   SI virtualisation LBR supporté ALORS
      LBR_VIRTUALIZATION_ENABLE
      SI LBR_VIRTUALIZATION_ENABLE = 1 ALORS
         Sauvegarde l'état LBR du VMCB: DBGCTL, BR_FROM, BR_TO, LASTEXCP_FROM, LASTEXCP_TO
         Charge l'état LBR state de l'état de la région de sauvegarde: DBGCTL, BR_FROM, BR_TO, LASTEXCP_FROM, LASTEXCP_TO
   SI chargement illégale de l'état de l'hôte OU exception du l'état de l'hôte ALORS
      Redémarrage du microprocesseur
   SINON
      Exécute la première instruction de l'hôte suivant l'instruction VMRUN
   FIN SI

Mnémonique

Instruction Opcode Description
VMRUN RAX 0Fh 01h D8h Cette instruction permet de lancer l'exécution d'un flux d'instructions invité.

Voir également

Articles - Virtualisation
Instruction assembleur 80x86 - Instruction VMLOAD
Instruction assembleur 80x86 - Instruction VMSAVE

Dernière mise à jour : Samedi, le 2 août 2014