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
Rust
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

L'interruption de la cassette

L'interruption de cassette (interruption 15h) est un vestige de l'époque où les PC utilisaient des enregistreurs de cassette exclusivement comme périphériques d'entreposage de données. Cette interruption fournissait quatre fonctions (numérotées de 0 à 3) pour activer et désactiver le moteur de l'enregistreur à cassette, lire et écrire sur la bande magnétique. Au fur et à mesure que le PC gagnait du terrain dans le monde des affaires, l'unité de disque est devenu populaire. Par conséquent, la popularité du lecteur de cassette s'est estompée.

Les quatre fonctions d'interruption de cassette font toujours partie du ROM-BIOS du PC. Le XT n'a pas d'interface d'enregistrement de cassette. De plus, l'interruption de la cassette XT consiste en une courte routine définissant le drapeau de retenue et entrepose un code d'erreur dans le registre AH pour indiquer au programme que la fonction appelée n'est pas disponible.

L'AT et l'interruption cassette

L'interruption de la cassette est revenue avec l'introduction de l'AT. De nouvelles fonctions peuvent être appelées n'ayant rien à voir avec la commande du magnétophone. Ce qui suit décrit ces fonctions, disponibles uniquement sur les modèles AT.

Entre autres choses, l'interruption met à disposition deux fonctions basées sur la mesure du temps de l'horloge temps réel AT embarquée. La première d'entre elles est la fonction 83h. Il est utile dans les situations où le processeur est engagé dans une tâche chronophage (par exemple, le calcul d'une formule compliquée), mais d'autres tâches doivent être effectuées en même temps, par exemple, la vérification du clavier pour déterminer si l'utilisateur veut mettre fin à l'opération ).

Fonction 83h : Drapeau de temps

La fonction 83h appelle l'adresse d'un drapeau (un octet dans le programme utilisateur) dans lequel le bit de niveau le plus élevé est défini après qu'un certain laps de temps s'est écoulé. Dans un programme en cours d'exécution, ce drapeau peut être testé après un certain laps de temps. Seules deux instructions en langage d'assemblage sont nécessaires pour cela, de sorte que le test nécessite peu de temps. Le numéro de fonction 83h transmet des informations au registre AH. L'adresse de segment du drapeau est chargée dans le registre ES et l'adresse de déplacement dans le registre BX. Le temps devant s'écouler jusqu'à ce qu'au drapeau soit défini est transmis aux registres CX et DX. Les deux registres forment un nombre de 32 bits indiquant le nombre de microsecondes à attendre (1 seconde = 1 000 000 microsecondes).

Le registre CX représente les 16 bits supérieurs de ce nombre. Pour calculer le temps total, le contenu du registre CX doit être multiplié par 65 536 et le registre DX doit ensuite être ajouté au total. Si la période d'attente est connue en microsecondes, la valeur des registres CX et DX peut être calculée :

CX = int(Période d'attente / 65 536)
DX = Période d'attente mod 65 536

Cette fonction ne peut être appelée que si le précédent appel de cette fonction est terminé (le temps indiqué est écoulé). Si ce n'est pas le cas, la fonction revient immédiatement avec le drapeau de retenue défini.

Fonction 86h : Attendre l'heure de fin

La deuxième fonction temporelle, la fonction 86h, diffère de la fonction 83h en ce qu'elle attend que le temps indiqué soit écoulé. Pour cette raison le numéro de fonction doit passer dans le registre AH, et le temps d'attente dans les registres CX et DX lors de l'appel de la fonction. Pour convertir le temps d'attente en deux valeurs pour les registres CX et DX, la formule ci-dessus peut être utilisée. Cette fonction ne peut être appelée que si la fonction 83h n'a pas été appelée précédemment, et si la durée fixée lors de son appel n'est pas encore écoulée. Dans un tel cas, la fonction revient immédiatement avec un drapeau de retenue défini au programme appelant.

Mémoire étendue

L'AT accepte plus de 640 Ko de mémoire. Cette mémoire supplémentaire (appelée étendue) commence à 1 mégaoctet et n'est pas accessible en mode réel, dans lequel le microprocesseur 80286 fonctionne comme un microprocesseur 8086. La fonction 88h détermine la disponibilité et la taille de cette mémoire. Placer une valeur de 88h dans le registre AH renvoie la taille de la RAM au-delà de la limite de 1 mégaoctet (à l'exclusion de la RAM de 0 à 640K) par incréments de 1 Ko dans le registre AX.

Fonction 87h : Déplacer le bloc mémoire

La fonction 87h déplace des blocs de mémoire dans l'espace mémoire total. Cela signifie que des blocs de mémoire peuvent être déplacés de la zone en dessous de la limite de 1 mégaoctet vers la zone au-dessus de la limite de 1 mégaoctet, et inversement. La fonction ne doit pas être utilisée pour ce dernier, car son appel est compliqué et présente d'autres inconvénients. Pour accéder à la mémoire au-delà de la barrière de 1 mégaoctet, le microprocesseur doit être mis en mode protégé (mode 80286 complet). La fonction 87h nécessite des informations très complètes, car le microprocesseur 80286 est plus difficile à programmer en mode protégé qu'en mode réel (émulation 8086 sous DOS).

Le numéro de fonction 87h doit d'abord être transmis au registre AH, puis le nombre de mots à déplacer (mots seuls, pas d'octets) doit être transmis au registre CX. Une valeur maximale de 8000h correspond à une valeur maximale de 64 Ko.

Tableau des descripteurs globaux (Global Descriptor Table)

La paire de registres ES:SI reçoit l'adresse de la GDT (Global Descriptor Table), devant être installée dans le programme utilisateur. Le GDT décrit les segments de mémoire individuels du 80286 en mode protégé. Les segments en mode protégé sont exemptés des limitations faites en mode réel. Alors que les segments ne peuvent démarrer qu'à des emplacements de mémoire divisibles par 16 en mode réel, les segments en mode protégé peuvent démarrer à n'importe quel emplacement de mémoire. De plus, les segments en mode protégé peuvent avoir n'importe quelle taille de 1 octet à 64 Ko.

Autre innovation du mode protégé, le code d'accès défini pour chaque segment. Il indique si le segment décrit est un segment de données ou un segment de code (seuls les segments de code peuvent être exécutés). Le code d'accès contient également des informations sur la priorité d'accès, et si l'accès est même autorisé. Chaque descripteur de segment se compose de 8 octets chacun. La fonction 87h s'attend lors de son appel à ce que six descripteurs de segment aient été préparés dans le GDT (c'est-à-dire l'espace mémoire leur étant réservé). La figure ci-dessous illustre les descripteurs de segment impliqués, ainsi que la construction d'un descripteur de segment :

Seuls les descripteurs de segment désignés comme début et destination nous intéressent ici, puisque les fonctions BIOS complètent les autres descripteurs. Le premier décrit le segment d'où proviennent les données. Le descripteur de destination décrit le segment dans lequel les données sont copiées. La longueur des deux segments peut être de 0FFFFh (64 Ko décimal), même si moins d'octets (ou de mots) sont copiés au cours du processus. Si une valeur inférieure est indiquée, ne laissez pas le nombre d'octets (nombre de mots multiplié par 2) à copier dépasser ce montant. Sinon, le processeur remarque un accès à travers une limite de segment pendant la copie, ce qui déclenche une erreur. L'adresse des deux zones mémoire doit être convertie en une adresse (physique) 24 bits. Les 16 bits inférieurs de cette adresse entrent dans le deuxième champ du descripteur de segment et les 8 bits supérieurs entrent dans le troisième champ. Comme code d'accès 92h peut être utilisé, signalant au microprocesseur que le segment décrit est un segment de données avec la priorité la plus élevée ; que le segment existe en mémoire ; et que le segment peut être écrit. Le dernier champ du descripteur existe pour des raisons de compatibilité avec le microprocesseur 80386, et doit toujours contenir la valeur 0.

Alors que l'adresse du tampon du programme utilisateur reste fixe, l'adresse au-delà de la limite de 1 mégaoctet vers laquelle les données doivent être copiées peut être librement sélectionnée (sous réserve de la disponibilité de la RAM). Le tableau suivant montre les adresses des différents blocs de 1 Ko au-delà de la frontière de 1 mégaoctet sous forme d'adresses 24 bits.

Mémoire Adresse Mémoire Adresse
0 Ko 100000h 124 Ko 11F000h
1 Ko 100400h 125 Ko 11F400h
2 Ko 100800h 126 Ko 11F800h
3 Ko 100C00h 127 Ko 11FC00h
4 Ko 101000h 128 Ko 120000h
5 Ko 101400h 129 Ko 120400h
6 Ko 100800h 130 Ko 120800h
7 Ko 100C00h 131 Ko 120C00h
8 Ko 102000h 132 Ko 121000h
9 Ko 102400h 133 Ko 121400h
60 Ko 10F000h 252 Ko 13F000h
61 Ko 10F400h 253 Ko 13F400h
62 Ko 10F800h 254 Ko 13F800h
63 Ko 10FC00h 255 Ko 13FC00h
64 Ko 110000h 256 Ko 140000h
65 Ko 110400h 257 Ko 140400h
66 Ko 110800h 258 Ko 140800h
67 Ko 110C00h 259 Ko 140C00h
68 Ko 111000h 260 Ko 141000h
69 Ko 111400h 261 Ko 141400h

Après l'appel de la fonction, le drapeau de retenue indique le succès de l'appel de la fonction. Si le drapeau de retenue est défini, une erreur s'est produite. La valeur dans le registre AH indique la cause de l'erreur :

Valeur Description
AH=0 Pas d'erreur (réinitialisation du drapeau de retenue)
AH=1 Erreur de parité RAM
AH=2 GDT défectueux à l'appel de la fonction
AH=3 Le mode protégé n'a pas pu être initialisé correctement

Un inconvénient de cette fonction est que lorsque le microprocesseur est en mode protégé, toutes les interruptions doivent être supprimées. La raison en est que pendant le mode protégé, les interruptions du BIOS (par exemple, la minuterie ou le clavier) peuvent être appelées, mais ces routines ont été développées pour un fonctionnement en mode réel uniquement. Ces interruptions peuvent ne pas fonctionner correctement en mode protégé. L'inconvénient peut être clairement vu lorsque vous appelez la minuterie. Comme ses interruptions sont supprimées, le mode protégé n'effectue aucune mesure de temps et le temps reste figé pendant un moment. Si les programmes appellent fréquemment la fonction 87h, l'horloge peut ralentir de 20 ou 30 secondes en une journée. L'horloge peut être facilement remise à l'heure avec un logiciel, de sorte que le logiciel peut contourner la plupart des inconvénients.

Fonction 89h : Mode protégé

La fonction 89h fait passer l'AT en mode protégé. Seule une personne développant son propre système d'exploitation peut être intéressée par cette fonction. Tout système capable de multitraitement doit fonctionner en mode protégé.

Fonction 84h : Lecture de la manette de jeudx

La fonction 84h lit deux manettes de jeux connectés à l'AT. Deux sous-fonctions opèrent au sein de cette fonction : Les deux renvoient un indicateur de report défini si l'adaptateur auquel les manettes doivent être connectées n'existe pas.

La première sous-fonction s'exécute en passant le numéro de fonction au registre AH et la valeur 0 au registre DX. Il renvoie l'état des boutons de tir de manette de jeux dans les bits 4 à 7 du registre AL.

La deuxième sous-fonction s'exécute en transmettant le numéro de fonction au registre AH et la valeur 1 au registre DX. Il renvoie les positions actuelles de la manette de jeux à l'aide des coordonnées X et Y. La coordonnée X de la première manette de jeux se trouve dans le registre AX et la coordonnée Y dans le registre BX. Pour la deuxième manette de jeux, le registre CX contient la coordonnée X et le registre DX la coordonnée Y.

Fonction 85h : Lire la touche SysReq

La touche System Request du clavier AT déclenche une interruption sans produire de code de caractère. Il ne peut pas être testé avec les fonctions de lecture du clavier du BIOS. La fonction 85h lit le clavier pour la touche System Request. Le passage du numéro de fonction au registre AH exécute la fonction. La version actuelle du BIOS n'implémente pas cette fonction dans l'interruption de la cassette. Habituellement, la touche System Request ne fait rien lorsque l'utilisateur appuie dessus. Cependant, une routine en langage machine peut affecter une application spéciale à la touche System Request. Ce programme doit uniquement "dévier" l'interruption 15h vers sa propre routine. S'il est appelé par un programme utilisateur ou par le système, une routine utilisateur s'exécute à la place de l'interruption de la cassette. Il peut tester si le registre AH contient le numéro de fonction 85h. Si ce n'est pas le cas, il appelle l'interruption de l'ancienne cassette. Si le registre AH contient ce numéro de fonction, la routine utilisateur exécute l'action souhaitée.

Le contenu du registre AL est également important pour cette routine utilisateur car il indique si l'utilisateur a appuyé ou relâché la touche System Request : 0 signifie activé, 1 signifie relâché.



PARTAGER CETTE PAGE SUR
Dernière mise à jour : Mardi, le 7 février 2023