Section courante

A propos

Section administrative du site

 Langage  Elément  Tutoriel  Programmation  Plateforme  Compilateur  Outils  Emulateur  Annexe  Aide 
ABAP/4
Ada
Assembleur
Assembly & bytecode
ASP (Active Server Pages)
Basic
C
C++
C# (C Sharp)
Cobol
ColdFusion
Fortran
HTML
Java
JavaScript
LISP
Logo
LotusScript
Oberon
Pascal
Perl
PHP
PL/1
Prolog
Python
Rebol
REXX
Ruby
SAS
NoSQL
SQL
Swift
X++ (Axapta)
GNAT
SMALLAda
VHDL
Assembleur 370
Assembleur 1802
Assembleur 4004
Assembleur 6502
Assembleur 6800
Assembleur 68000
Assembleur 8080 et 8085
Assembleur 8089
Assembleur 80x86
Assembleur AGC4
Assembleur ARM
Assembleur DPS 8000
Assembleur i860
Assembleur Itanium
Assembleur MIPS
Assembleur PDP-11
Assembleur PowerPC
Assembleur RISC-V
Assembleur SPARC
Assembleur SuperH
Assembleur UNIVAC I
Assembleur VAX
Assembleur Z80
Assembleur Z8000
Assembleur z/Architecture
ASSEMBLER/MONITOR 64
Micol Assembler
GFA Assembler
A86
MASM (Macro Assembler)
TASM (Turbo Assembler)
CIL
Jasmin
LLVM
MSIL
Parrot
P-Code (PCode)
SWEET16
G-Pascal
ASP 1.0
ASP 2.0
ASP 3.0
ASP.NET
ASP.NET Core
ABasiC (Amiga)
Adam SmartBASIC
Altair BASIC
AmigaBASIC (Amiga)
AMOS Basic (Amiga)
Atari Basic (Atari 400, 600 XL, 800, 800XL)
Basic Apple II (Integer BASIC/APPLESOFT)
Basic Commodore 64 (CBM-BASIC)
Basic Commodore 128 (BASIC 7.0)
Basic Commodore VIC-20 (CBM-BASIC 2.0)
Basic Coco 1 (Color Basic)
Basic Coco 2 (Extended Color Basic)
Basic Coco 3 (Extended Color Basic 2.0)
BASICA (PC DOS)
Basic Pro
BBC BASIC
Blitz BASIC (Amiga)
DarkBASIC
Dartmouth BASIC
GFA-Basic (Atari ST/Amiga)
GWBASIC (MS-DOS)
Liberty BASIC
Locomotive BASIC (Amstrad CPC)
MSX-Basic
Omikron Basic (Atari ST)
Oric Extended Basic
Power Basic
Quick Basic/QBasic (MS-DOS)
Sinclair BASIC (ZX80, ZX81, ZX Spectrum)
ST BASIC (Atari ST)
Turbo Basic
Vintage BASIC
VBScript
Visual Basic (VB)
Visual Basic .NET (VB .NET)
Visual Basic pour DOS
Yabasic
BeckerBASIC
SIMONS' BASIC
Basic09 d'OS-9
Disk Extended Color Basic
Basic09 d'OS-9
Disk Extended Color Basic
Access
Excel
Visual Basic pour Windows
Visual Basic .NET pour Windows
C Shell Unix (csh)
C pour Amiga
C pour Atari ST
C pour DOS
C pour Falcon030
C pour GEMDOS (Atari ST)
C pour Linux
C pour PowerTV OS
C pour OS/2
C pour Unix
C pour Windows
Aztec C
CoCo-C
GNU C
HiSoft C
IBM C/2
Introl-C
Lattice C
Microsoft C
MinGW C
MSX-C
Open Watcom C
OS-9 C Compiler
Pure C
Quick C
Turbo C
HiSoft C for Atari ST
HiSoft C for CP/M (Amstrad CPC)
C++ pour OS/2
C++ pour Windows
Borland C++
C++Builder
IBM VisualAge C++
Intel C++
MinGW C++
Open Watcom C++
Symantec C++
Turbo C++
Visual C++
Visual C++ .NET
Watcom C++
Zortech C++
C# (C Sharp) pour Windows
Apple III Cobol
Microsoft Cobol
BlueDragon
Lucee
OpenBD
Railo
Smith Project
Microsoft Fortran
WATFOR-77
CSS
FBML
Open Graph
SVG
XML
XSL/XSLT
LESS
SASS
GCJ (GNU)
JSP
Jython
Visual J++
Node.js
TypeScript
AutoLISP
ACSLogo
LotusScript pour Windows
Amiga Oberon
Oberon .NET
Apple Pascal
Delphi/Kylix/Lazarus
Free Pascal
GNU Pascal
HighSpeed Pascal
IBM Personal Computer Pascal
Lisa Pascal
Maxon Pascal
MPW Pascal
OS-9 Pascal
OSS Personal Pascal
Pascal-86
Pascal du Cray Research
Pascal/VS
Pascal-XT
PURE Pascal
QuickPascal
RemObjets Chrome
Sun Pascal
THINK Pascal
Tiny Pascal (TRS-80)
Turbo Pascal
UCSD Pascal
VAX Pascal
Virtual Pascal
Turbo Pascal for CP/M-80
Turbo Pascal for DOS
Turbo Pascal for Macintosh
Turbo Pascal for Windows
CodeIgniter (Cadre d'application)
Drupal (Projet)
Joomla! (Projet)
Phalanger (PHP .NET)
phpBB (Projet)
Smarty (balise)
Twig (balise)
Symfony (Cadre d'application)
WordPress (Projet)
Zend (Cadre d'application)
PL360
PL/M-80
PL/M-86
Turbo Prolog
CPython
IronPython
Jython
PyPy
AREXX
Regina REXX
JMP
Btrieve
Cassandra
Clipper
CouchDB
dBASE
Hbase
Hypertable
MongoDB
Redis
Access
BigQuery
DB2
H2
Interbase
MySQL
Oracle
PostgreSQL
SAP HANA
SQL Server
Sybase
U-SQL
Introduction
Les remarques
Les opérateurs
Les instructions conditionnelles
Les instructions de boucles
Type de données élémentaire
Référence des registres
Mode d'adressage du processeur
Structure de données
Référence des instructions par catégories
Référence, lexique et dictionnaire des instructions 80x86
Les symboles prédéfinies
Les directives
Mode 8080
Mode réel
Mode protégé
Mode virtuel 8086
Mode SMM
Format du descripteur de segment
Format du TSS
Format du SMM
Format BCD
Format des nombres réels
8086/8088
Série NEC V20/V30
80286
80386
Pentium
Pentium Pro
AVX-512
MMX (MultiMedia eXtensions)
MPX (Memory Protection Extensions)
SGX (Software Guard Extensions)
SHA extensions
SMX (Safer Mode Extensions)
SSE (Streaming SIMD Extensions)
SSE2 (Streaming SIMD Extensions 2)
SSE3 (Streaming SIMD Extensions 3)
SSSE3 (Supplemental Streaming SIMD Extensions 3)
SSE4.1 (Streaming SIMD Extensions 4.1)
SSE4.2 (Streaming SIMD Extensions 4.2)
TSX (Transactional Synchronization Extensions)
VMX (Virtual-Machine eXtensions)
x86-64
Les boucles
Les chaînes
les comparaisons
Les conversions
Les décalages de bits
Les drapeaux
Les opérateurs
Saut conditionnel
Saut inconditionnel
Les transferts de données
Utilisation de la pile
Accès mémoire
Ensemble d'instructions pour les applications 80386
BIOS compatible au micro-ordinateur IBM PC
Démarrage du système
Détermination de la version du BIOS
Détermination du type de PC
Fonctions de sortie de l'écran du BIOS
Détermination de la configuration du système à l'aide du BIOS
Détermination de la RAM disponible à l'aide du BIOS
Accéder à la disquette depuis le BIOS
Accéder au disque dur depuis le BIOS
Accéder au port série depuis le BIOS
L'interruption de la cassette
Accéder au clavier depuis le BIOS
Accéder à l'imprimante à partir du BIOS
Lecture de la date et de l'heure à partir du BIOS
Variables du BIOS
Bonjour
Application
Détection
Mathématique
Temps
Stationnement de voiture
BIOS SCSI
CMOS de XT
DesqView
Valeur absolue (ABS)
Triangle Pascal
Année bissextile
DOS
GeoWorks
86-DOS
MS-DOS 2
MS-DOS 6
A86
LZASM
MASM
NASM
TASM
CodeView
Free Hex Editor Neo
OllyDbg
SoftICE
Turbo Debugger
DOSBox
emu8086
PCE - PC Emulator
PCem
Interruptions
Port d'entrée/sortie
RAM de l'IBM PC
Téléchargement
00h à 07h: Processeur
08h à 0Fh: Périphériques (IRQ0 à IRQ7)
10h: Gestionnaire vidéo
13h: Accès aux disques
14h: Gestion des ports séries
15h: Extension d'Entrée/Sortie
16h: Gestion du clavier
17h: Gestion de l'imprimante
21h: Service DOS
2Ah: Interface de service réseau
2Fh: Multiplexe
33h: Interface du pilote de souris
59h: GSS Computer Graphics Interface
5Ch: Réseau BIOS (NetBIOS)
67h: Gestionnaire EMM/EMS
00h: Mode vidéo
01h: Sélection du type de curseur
10h, F0h: Tseng Labs HiColor
4Fh: Pilote VESA
5Fh: Realtek RTVGA
6Fh: Video 7
18h: Demande des informations SCSI
01h: Écrit dans la RAM non-volatile (Amstrad PC1512)
02h: Lecture dans la RAM non-volatile (Amstrad PC1512)
10h: Gestionnaire principal TopView
89h: Entrée en mode protégé
64h: OS/2 API DOS32StartSession
FFh, 92h: Détecte la présence du pilote «PREDIR.EXE»
16h: Windows & DPMI
0Ah: Détection de Windows
84h: Demande le point d'entrée
86h: Détection du mode DPMI
87h: Détecte l'installation DPMI
8Eh: Machine virtuel et application
Préface
Notes légal
Dictionnaire
Recherche

Mode 8080

Le mode 8080 est un mode permettant d'émuler le fonctionnement d'exécution d'un programme développer pour l'assembleur des microprocesseurs 8080 et 8085 d'Intel. Les microprocesseurs μPD70108 et μPD70116 disposent de deux modes de fonctionnement du microprocesseur: l'émulation native et l'émulation 8080. En mode natif, l'μPD70108 et μPD70116 exécutent toutes les instructions du jeu d'instructions 8086, à l'exception des instructions RETEM et CALLN. En mode 8080, le microprocesseur exécute le jeu d'instructions pour le μPD8080AF et les instructions RETEM et CALLN. Ces modes sont sélectionnés par des instructions spéciales ou en utilisant une interruption. Le bit le plus significatif du PSW est un indicateur de mode (MD) signalant la sélection du mode de contrôle.

Mode natif et changement de mode 8080

Lorsque le mode de fonctionnement passe de natif à l'émulation ou inversement, les registres sont cartographiés dans le mode d'émulation, comme illustré dans le tableau suivant :

Les 8 bits inférieurs du registre AW et les 8 bits inférieurs et supérieurs des registres BW, CW et DW du μPD70108 et du μPD70116 servent d'accumulateur et de 6 registres à usage général du μPD8080AF. Les 8 bits inférieurs du PSW du μPD70108 et du μPD70116 servant d'indicateurs μPD8080AF. Ces drapeaux correspondent aux 8 bits inférieurs du PSW. Le registre SP sert de pointeur de pile de l'μPD8080AF en mode natif, tandis que le registre BP agit en tant que pointeur de pile en mode d'émulation. De la même manière, les μPD70108 et μPD70116 utilisent des pointeurs de pile indépendants et des zones de pile dans chaque mode. L'utilisation de pointeurs de pile indépendants empêche la destruction du contenu d'un pointeur de pile dans un mode en raison d'une mauvaise utilisation du pointeur de pile dans l'autre mode. Les registres AH, SP, IX et IY et les registres à 4 segments (PS, SS, DS0, DS1) ne sont pas adressables à partir du mode d'émulation. En mode d'émulation, la base de segment du programme est déterminée par le registre PS dont le contenu a été spécifié par un vecteur d'interruption avant que le microprocesseur ne soit entrée en mode d'émulation. La base de segment des opérandes de mémoire (y compris la pile) est déterminée par le registre DS0 dont le programmeur spécifie le contenu avant que le microprocesseur ne passe en mode émulation. La fonction de mise en attente du bus (disponible via le signal de demande de mise en attente / d'accusé de réception) et la fonction de veille (disponible lorsque l'instruction HLT est exécutée) peuvent être utilisées en mode émulation de la même manière qu'en mode natif. Les μPD70108 et μPD70116 fonctionnent en termes de matériel BCU normal, même en mode émulation. Par conséquent, les opérations d'entrée/sortie entre l'μPD70108 et le μPD70116 et les circuits périphériques ou la mémoire sont exactement les mêmes que celles effectuées en mode natif. Cependant, les fonctions BUSLOCK et POLL ne sont pas disponibles pour une utilisation en mode d'émulation. Pour déterminer de manière externe si le μPD70108 ou le μPD70116 sont en mode d'émulation, vérifiez que le signal PS3 d'état du processeur a été émis pendant un cycle de bus μPD70108 ou μPD70116 au maximum. Le signal est toujours à un niveau bas en mode natif.

Le microprocesseur peut repasser en mode émulation lorsque INT est présente (même si les interruptions sont désactivées) et relancer l'exécution du programme en commençant par l'instruction suivant l'instruction HLT. Cette situation est vrai uniquement si le microprocesseur passe en mode veille à partir du mode émulation. Si RESET ou NMI est présent au lieu de INT - ou si INT est présent alors que les interruptions sont activées - le microprocesseur passera en mode natif à partir du mode veille. Si cela se produit, le microprocesseur peut entrer de nouveau en mode d'émulation à partir du mode natif. Autrement dit, à partir de la routine d'interruption NMI ou INT en mode natif, jusqu'à l'exécution de l'instruction RETI. Si le microprocesseur est entrée en mode veille à partir du mode natif, elle peut entrer dans le mode natif en entrant RESET, NMI ou INT, que les interruptions soient désactivées ou activées.

Natif à mode d'émulation 8080

Deux instructions provoquent le changement du mode de fonctionnement du mode d'émulation 8080 natif. Les instructions sont BRKMEM (pause pour émulation) et RETI (retour d'interruption).

Instruction de BRKEM

L'instruction BRKEM lance le mode d'émulation 8080. Il enregistre le contenu de PSW, PS et PC et remet l'indicateur MD à 0. Les valeurs de base et de déplacement du segment sont ensuite chargées dans les registres PS et PC, respectivement, à partir de la table de vecteurs d'interruption. Le numéro de vecteur d'interruption est spécifié par l'opérande immédiat de l'instruction BRKEM. Voici la syntaxe de l'instruction :

BRKEM imm8

Lorsque le mode d'émulation 8080 est lancé avec l'instruction BRKEM (MD = 0), le microprocesseur exécute le programme dans la zone de segment de 64 Ko spécifiée par le contenu du PS, à partir de l'adresse indiquée par le contenu du PC. Le code d'instruction extrait à ce stade est interprété comme une instruction μPD8080AF et est exécuté.

Instruction RETI

L'instruction RETI est généralement utilisée pour renvoyer l'exécution du programme à la routine principale à partir d'une routine d'interruption lancée par une instruction d'interruption externe ou BRK ou CALLN. Voici sa syntaxe :

RETI

Lorsque l'instruction RETI rétablit le contenu de PSW, PS et PC, elle restaure également l'état de l'indicateur de mode (MD) avant que le mode soit passé de 8080 à natif. Cet indicateur MD restauré permet au microprocesseur de revenir en mode émulation.

Pour cette raison, si l'instruction RETI est exécutée en mode natif à la fin du programme d'interruption démarré par l'instruction d'interruption CALLN ou par une interruption externe alors que le microprocesseur est en mode 8080, celle-ci peut entrer à nouveau dans le mode 8080.

Émulation 8080 à mode natif

Les signaux et instructions suivants permettent de changer le mode de fonctionnement de 8080 à natif.

Opération RESET

Lorsque le signal RESET est présent, une opération de réinitialisation est effectuée sur le microprocesseur de la même manière qu'en mode natif. L'émulation 8080 en cours est donc abandonnée.

Opération NMI ou INT

Lorsque le signal NMI ou INT est présent, le processus d'interruption est exécuté comme en mode natif. L'exécution du programme du microprocesseur reviendra à la routine principale à partir de la routine d'interruption en mode natif. En mode natif, le microprocesseur peut entrer à nouveau dans le mode d'émulation 8080 en exécutant l'instruction RETI.

Instruction CALLN

L'instruction CALLN est utilisée exclusivement en mode d'émulation lors de l'appel d'un sous-programme en mode natif non écrit en code 8080. Si l'instruction CALLN est exécutée en mode 8080, le microprocesseur enregistre le contenu de PS, PC et PSW et met l'indicateur de mode à 1. Cette instruction charge également la base de segment d'un vecteur d'interruption dans le registre de segment (PS) et le décalage par rapport au compteur de programme (PC). Lorsque l'instruction RETI est exécutée à la fin de la routine d'interruption, l'exécution du programme peut être renvoyée à la routine principale en mode d'émulation 8080 à partir de la routine d'interruption en mode natif démarrée par l'instruction CALLN.

Instruction RETEM

L'instruction RETEM est utilisée exclusivement comme mode de retour du mode 8080 au mode natif lorsque l'instruction BRKEM a provoqué le passage au mode 8080. L'instruction RETEM du microprocesseur reviendra du programme d'interruption BRKEM au programme principal. Par conséquent, le contenu de PS, PC et PSW est restauré et le microprocesseur revient en mode natif. A ce stade, l'indicateur MD (MD=1), ayant été enregistré dans la pile par l'instruction BRKEM, est restauré, ceci permettant au microprocesseur de passer en mode natif.

Émulation imbriquée

Dans un mode natif appelé par CALLN ou une interruption NMI ou INT du mode d'émulation, le mode d'émulation ne peut pas être rappelé par une instruction BRKEM. Si cette imbrication est tentée, MD ne fonctionnera pas normalement et un fonctionnement normal est improbable.

Remarque



PARTAGER CETTE PAGE SUR
Dernière mise à jour : Samedi, le 25 mai 2019