Section courante

A propos

Section administrative du site

Assembleur 80x86

PUSH

INTEL 8088+ Push Value Onto Stack

Syntaxe

PUSH immédiate INTEL 80286+
PUSH opérande INTEL 8088+

Paramètres

Nom Description
immédiate Ce paramètre permet d'indiquer une valeur immédiate à rajouter dans la pile
opérande Ce paramètre permet d'indiquer l'opérande dont la valeur est rajouté dans la pile

Description

Cette instruction permet d'empiler un mot, un double mot ou quadruple mot dans la pile.

Remarques

Algorithme

SI taille de l'adresse = 32 bits ALORS
   SI taille de l'opérande = 32 bits ALORS
      ESP ← ESP - 4
      SS:ESP ← opérande
   SINON
      ESP ← ESP - 2
      SS:ESP ← opérande
   FIN SI
SINON
   SI taille de l'opérande = 16 bits ALORS
      SP ← SP - 2
      SS:SP ← opérande
   SINON
      SP ← SP - 4
      SS:SP ← opérande
   FIN SI
FIN SI

Mnémonique

Instruction Opcode Description
PUSH reg/mem16 FFh /6 Empile le contenu d'une opérande registre ou mémoire 16 bits dans la pile.
PUSH reg/mem32 FFh /6 Empile le contenu d'une opérande registre ou mémoire 32 bits dans la pile. Il n'y a pas de préfixe en mode 64 bits.
PUSH reg/mem64 FFh /6 Empile le contenu d'une opérande registre ou mémoire 64 bits dans la pile.
PUSH reg16 50h +rw Empile le contenu d'un registre 16 bits dans la pile.
PUSH reg32 50h +rd Empile le contenu d'un registre 32 bits dans la pile. Il n'y a pas de préfixe en mode 64 bits.
PUSH reg64 50h +rq Empile le contenu d'un registre 64 bits dans la pile.
PUSH imm8 6Ah ib Empile le contenu d'une valeur immédiate 8 bits dans la pile.
PUSH imm16 68h iw Empile le contenu d'une valeur immédiate 16 bits dans la pile.
PUSH imm32 68h id Empile le contenu d'une valeur immédiate 32 bits dans la pile. Il n'y a pas de préfixe en mode 64 bits.
PUSH imm64 68h id Empile le contenu d'une valeur immédiate 32 bits dans la pile. Il n'y a pas de préfixe en mode 64 bits.
PUSH CS 0Eh Empile le contenu du registre CS dans la pile. Invalide en mode 64 bits.
PUSH DS 1Eh Empile le contenu du registre DS dans la pile. Invalide en mode 64 bits.
PUSH ES 06h Empile le contenu du registre ES dans la pile. Invalide en mode 64 bits.
PUSH FS 0Fh A0h Empile le contenu du registre FS dans la pile.
PUSH GS 0Fh A8h Empile le contenu du registre GS dans la pile.
PUSH SS 16h Empile le contenu du registre SS dans la pile. Invalide en mode 64 bits.

Exceptions

Message Mode réel Virtuel 8086 Mode protégé Description
#UD(Opcode invalide)     X Les instructions «PUSH CS», «PUSH DS», «PUSH ES» ou «PUSH SS» sont exécutés en mode 64 bits.
#SS(Pile) X X X Une adresse mémoire dépasse la limite du segment de pile ou n'est pas canonique
#GP(Protection général) X X X Une adresse mémoire dépasse la limite du segment de données ou n'est pas canonique
    X Un segment de données nulle est utilisé comme référence mémoire
#PF(Faute de page)   X X Une faute de page résultat de l'exécution de l'instruction
#AC(Vérifie l'alignement)   X X Un désalignement de la référence mémoire est effectué quand une vérification d'alignement est activé

Exemple

Voici un exemple en Turbo Pascal 7 montrant une utilisation de cette instruction :

  1. Program AsmPushSamples;
  2.  
  3. Var _AX:Word;
  4.  
  5. BEGIN
  6.  ASM
  7.   MOV AX,4
  8.   MOV BX,7
  9.   PUSH AX
  10.    MOV AX,3
  11.    MOV BX,AX
  12.   POP AX
  13.   ADD AX,BX
  14.   MOV _AX,AX
  15.  END;
  16.  WriteLn('AX = ',_AX);
  17. END.

on obtiendra le résultat suivant :

AX = 7

Voir également

Langage de programmation - Assembleur 80x86 - Instruction POP
Langage de programmation - Structure de données - Structures récursives linéaires - Pile

Références

Le livre d'Or PC, Martin Althaus, 1992, ISBN: 2-7361-0934-1, page 826
Assembleur Facile, Philippe Mercier, 1990, ISBN: 2-501-01176-7, page 413
AMD64 Architecture Programmer's Manual Volume 3: General-Purpose and System Instructions, Edition Advanced Micro Devices, Revision 3.14, September 2007, Publication No. 24594, page 197.
Intel® 64 and IA-32 Architectures Software Developer’s Manual Volume 2B: Instruction Set Reference, N-Z, Edition Intel, Mars 2010, Publication No. 253667-034US, page 321 à 325.

Dernière mise à jour : Lundi, le 1 septembre 2014