Section courante

A propos

Section administrative du site

 Langage  Elément  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
Format du programme
Format de l'opérande
Directives assembleur
Codes d'opération
Référence des messages d'erreurs
Préface
Notes légal
Dictionnaire
Recherche

Format de l'opérande

Afin de décrire complètement les codes d'opération et les pseudo-opérations, il faut d'abord présenter la forme du champ d'opérande, car il est utilisé dans presque toutes les instructions. Les expressions dans le champ opérande se composent d'opérandes simples, d'étiquettes, de constantes et de mots réservés, combinés dans des sous-expressions correctement formées par des opérateurs arithmétiques et logiques. Le calcul de l'expression est effectué par l'assembleur au fur et à mesure de l'assemblage. Chaque expression doit produire une valeur 16 bits lors de l'assemblage. De plus, le nombre de chiffres significatifs dans le résultat ne doit pas dépasser l'utilisation prévue. Autrement dit, si une expression doit être utilisée dans une instruction immédiate de déplacement d'octet, les 8 bits les plus significatifs de l'expression doivent être zéro. La restriction sur la signification de l'expression est donnée avec les instructions individuelles.

Étiquettes

Comme indiqué ci-dessus, une étiquette est un identifiant qui apparaît sur une instruction particulière. En général, l'étiquette reçoit une valeur déterminée par le type d'instruction qu'elle précède. Si l'étiquette apparaît sur une instruction qui génère du code machine ou réserve de l'espace mémoire (par exemple, une instruction MOV ou une pseudo opération DS), l'étiquette reçoit la valeur de l'adresse du programme qu'elle étiquette. Si l'étiquette précède un EQU ou un SET, l'étiquette reçoit la valeur résultant de l'évaluation du champ d'opérande. À l'exception de l'instruction SET, un identificateur ne peut étiqueter qu'une seule instruction.

Lorsqu'une étiquette apparaît dans le champ opérande, sa valeur est remplacée par l'assembleur. Cette valeur peut ensuite être combinée avec d'autres opérandes et opérateurs pour former le champ d'opérande d'une instruction particulière.

Constantes numériques

Une constante numérique est une valeur de 16 bits dans l'une de plusieurs bases. La base, appelée base de la constante, est indiquée par un indicateur de base de fin. Voici les indicateurs de base :

Indicateur Description
B Cet indicateur est une constante binaire (base 2).
O Cet indicateur est une constante octale (base 8).
Q Cet indicateur est une constante octale (base 8).
D Cet indicateur est une constante décimale (base 10).
H Cet indicateur est une constante hexadécimale (base 16).

Q est un indicateur de base alternatif pour les nombres octaux car la lettre O est facilement confondue avec le chiffre 0. Toute constante numérique ne se terminant pas par un indicateur de base est une constante décimale.

Une constante est donc composée d'une séquence de chiffres, suivie d'un indicateur de base facultatif, où les chiffres sont dans l'intervalle appropriée pour la base. Les constantes binaires doivent être composées de chiffres 0 et 1, les constantes octales peuvent contenir des chiffres compris entre 0 et 7, tandis que les constantes décimales contiennent des chiffres décimaux. Les constantes hexadécimales contiennent des chiffres décimaux ainsi que des chiffres hexadécimaux A(10D), B(11D), C(12D), D(13D), E(14D) et F(15D). Notez que le premier chiffre d'une constante hexadécimale doit être un chiffre décimal pour éviter de confondre une constante hexadécimale avec un identificateur. Un 0 devant suffira toujours. Une constante composée de cette manière doit s'évaluer en un nombre binaire pouvant être contenu dans un compteur 16 bits, sinon elle est tronquée à droite par l'assembleur. Semblables aux identificateurs, les signes "$" intégrés sont autorisés dans les constantes pour améliorer leur lisibilité. Enfin, l'indicateur de base est traduit en majuscule si une lettre minuscule est rencontrée. Voici toutes les instances valides de constantes numériques :

1234 1234D 1100B 1111$0000$1111$0000B
1234H 0FFEH 3377O 33$77$22Q
3377o 0fe3h 1234d 0ffffh

Mots réservés

Il existe plusieurs séquences de caractères réservés ayant des significations prédéfinies dans le champ opérande d'une instruction. Les noms des registres 8080 sont donnés ci-dessous, qui, lorsqu'ils sont rencontrés, produisent les valeurs indiquées à droite :

Caractère Valeur
A 7
B 0
C 1
D 2
E 3
H 4
L 5
M 6
SP 6
PSW 6

(Encore une fois, les noms en minuscules ont les mêmes valeurs que leurs équivalents en majuscules). Les instructions machine peuvent également être utilisées dans le champ opérande ; ils évaluent à leurs codes internes. Dans le cas d'instructions nécessitant des opérandes, où l'opérande spécifique devient une partie du modèle binaire binaire de l'instruction (par exemple, MOV A, B), la valeur de l'instruction (dans ce cas MOV) est le modèle binaire de l'instruction avec des zéros dans les champs optionnels (par exemple, MOV produit 40h).

Lorsque le symbole "$" apparaît dans le champ de l'opérande (non intégré dans les identificateurs et les constantes numériques), sa valeur devient l'adresse de la prochaine instruction à générer, sans compter l'instruction contenue dans la ligne logique actuelle.

Constantes de chaîne de caractères

Les constantes de chaîne de caractères représentent des séquences de caractères ASCII et sont représentées en encadrant les caractères dans des symboles d'apostrophe. Toutes les chaînes de caractères doivent être entièrement contenues dans la ligne physique actuelle (autorisant ainsi les symboles "!" dans les chaînes de caractères) et ne doivent pas dépasser 64 caractères. Le caractère apostrophe lui-même peut être inclus dans une chaîne de caractères en le représentant comme une double apostrophe (les deux touches ''), devenant une apostrophe simple lorsqu'elle est lue par l'assembleur. Dans la plupart des cas, la longueur de la chaîne de caractères est limitée à un ou deux caractères (la pseudo-opération DB est une exception), auquel cas la chaîne de caractères devient une valeur de 8 ou 16 bits, respectivement. Les chaînes de caractères de deux caractères deviennent une constante de 16 bits, le deuxième caractère étant l'octet de poids faible, et le premier caractère comme octet de poids fort.

La valeur d'un caractère est son code ASCII correspondant. Il n'y a pas de traduction de cas dans les chaînes de caractères; les caractères majuscules et minuscules peuvent être représentés. Notez cependant que seuls les caractères ASCII graphiques (imprimables) sont autorisés dans les chaînes de caractères. Les chaînes de caractères valides sont :

Chaînes de caractères valides : Comment l'assembleur lit les chaînes de caractères :
'A' 'AB' 'ab' 'c' A AB ab c
'' 'a''' '''' '''' a '''
'Ni ni quoi.' Ni ni quoi.
'Elle m'a dit "Bonjour".' Elle m'a dit "Bonjour".
'Je lui ai dit "Bonjour".' Je lui ai dit "Bonjour".

Opérateurs arithmétiques et logiques

Les opérandes décrits ci-dessus peuvent être combinés en notation algébrique normale en utilisant n'importe quelle combinaison d'opérandes, d'opérateurs et d'expressions entre parenthèses correctement formés. Les opérateurs reconnus dans le champ opérande sont décrits dans ce tableau :

Les opérateurs Signification
a + b somme arithmétique non signée de a et b
a - b différence arithmétique non signée entre a et b
+ b unaire plus (produit b)
- b moins unaire (identique à 0 - b)
a * b multiplication de magnitude non signée de a et b
a / b division de grandeur non signée de a par b
a MOD b reste après a / b.
NOT b inverse logique de b (tous les 0 deviennent des 1, les 1 deviennent des 0), où b est considéré comme une valeur de 16 bits
a AND b logique bit à bit et de a et b
a OR b logique bit à bit ou de a et b
a XOR b exclusif logique bit à bit de a et b
a SHL b la valeur résultant du déplacement de a vers la gauche d'une quantité b, avec un remplissage de zéro
a SHR b la valeur résultant du déplacement de a vers la droite d'une quantité b, avec un remplissage de zéro

Dans chaque cas, a et b représentent des opérandes simples (étiquettes, constantes numériques, mots réservés et chaînes de caractères à un ou deux caractères) ou des sous-expressions entièrement entre parenthèses, comme celles présentées dans les exemples suivants :

10+20 10h+37Q L1 /3 (L2+4) SHR 3
('a' and 5fh)+'0' ('B'+B)OR(PSW+M) (1+(2+c))shr(A-(B+1))

Notez que tous les calculs sont effectués au moment de l'assemblage en tant qu'opérations non signées 16 bits. Ainsi, -1 est calculé comme 0-1, ce qui donne la valeur 0ffffh (c'est-à-dire, tous les 1). L'expression résultante doit correspondre au code d'opération dans lequel elle est utilisée. Par exemple, si l'expression est utilisée dans une instruction ADI (ajout immédiat), les 8 bits de poids fort de l'expression doivent être zéro. En conséquence, l'opération "ADI -1" produit un message d'erreur (-1 devient 0ffffh, ne pouvant pas être représenté comme une valeur de 8 bits), tandis que "ADI (-1) AND 0FFH" est accepté par l'assembleur car l'opération AND remet à zéro les bits de poids fort de l'expression.

Priorité des opérateurs

Pour la commodité du programmeur, ASM suppose que les opérateurs ont une priorité relative d'application permettant au programmeur d'écrire des expressions sans niveaux imbriqués de parenthèses. L'expression résultante a supposé des parenthèses étant définies par la priorité relative. L'ordre d'application des opérateurs dans les expressions sans parenthèses est indiqué ci-dessous. Les opérateurs répertoriés en premier ont la priorité la plus élevée (ils sont appliqués en premier dans une expression sans parenthèses), tandis que les opérateurs répertoriés en dernier ont la priorité la plus faible. Les opérateurs répertoriés sur la même ligne ont la même priorité et sont appliqués de gauche à droite lorsqu'ils sont rencontrés dans une expression :

Ainsi, les expressions affichées à gauche ci-dessous sont interprétées par l'assembleur comme les expressions entièrement entre parenthèses affichées à droite ci-dessous :

a*b+c (a*b) + c
a+b*c a + (b*c)
a MOD b*c SHL d ((a MOD b) * c) SHL d
a OR b AND NOT c+d SHL e a OR (b AND (NOT (c + (d SHL e))))

Des sous-expressions équilibrées entre parenthèses peuvent toujours être utilisées pour remplacer les parenthèses supposées ; ainsi, la dernière expression ci-dessus pourrait être réécrite pour forcer l'application des opérateurs dans un ordre différent, comme indiqué :

( a OR b ) AND ( NOT c ) + d SHL e

Cela se traduit par ces parenthèses supposées :

(a OR b ) AND ( (NOT c ) + ( d SHL e ) )

Notez qu'une expression sans parenthèses n'est bien formée que si l'expression résultant de l'insertion des parenthèses supposées est bien formée.



PARTAGER CETTE PAGE SUR
Dernière mise à jour : Lundi, le 16 janvier 2023