Assembleur 80x86 | BSWAP |
---|---|
INTEL 80486+, x86-64 | Byte Swap |
Syntaxe
BSWAP Opérande |
Paramètres
Nom | Description |
---|---|
Opérande | Ce paramètre permet d'indiquer l'opérande utiliser pour faire le traitement et c'est également l'opérande allant recevoir le résultat. |
Description
L'instruction tardive BSWAP inverse l'ordre des 4 octets d'un registre de taille de 32 bits. L'octet de poids le plus fort devient celui de poids le plus faible et on affecte les 2 autres octets de la même manière en les inversant eux aussi.
Remarque
- En mode 64 bits, la taille de fonctionnement par défaut de l'instruction est de 32 bits. L'utilisation d'un préfixe REX sous la forme REX.R permet d'accéder à des registres supplémentaires (R8 à R15). L'utilisation d'un préfixe REX sous la forme de REX.W favorise le fonctionnement à 64 bits.
Algorithme
MODULE BSWAP(Opérande) Temporaire ← Opérande Opérande ( 0 à 7 ) ← Temporaire ( 24 à 31 ) Opérande ( 8 à 15 ) ← Temporaire ( 16 à 23 ) Opérande ( 16 à 23 ) ← Temporaire ( 8 à 15 ) Opérande ( 24 à 31 ) ← Temporaire ( 0 à 7 ) |
Mnémonique
Instruction | Opcode | Description |
---|---|---|
BSWAP reg32 | 0Fh C8h +rd | Inverse l'ordre des octets du registre 32 bits |
BSWAP reg64 | 0Fh C8h +rq | Inverse l'ordre des octets du registre 64 bits |
Cycles d'horloge
Instruction | Opcode | 8086 | 8088 | 80186 | 80286 | 80386 | i486 | Pentium | Cx486SLC | Cx486DX | IBM 486BL3X | UMC U5S |
---|---|---|---|---|---|---|---|---|---|---|---|---|
BSWAP reg32 | 0Fh C8h +rd | 1 | 1 | 4 | 4 | 9 | 2 |
Exceptions
Aucune
Exemples
L'exemple suivant permet d'effectuer un échange sur le registre EAX :
- BSWAP EAX
L'exemple suivant permet d'effectuer un échange sur le registre EDX :
- BSWAP EDX
L'exemple suivant permet d'effectuer un échange sur le registre RAX :
- BSWAP RAX
L'exemple suivant permet d'effectuer un échange sur le registre RDX :
- BSWAP RDX
Voici un exemple en Delphi montrant une utilisation de cette instruction :
- Program BSwapSamples;
-
- {$APPTYPE Console}
- Uses SysUtils;
-
- Function _BSWAP(X:LongInt):LongInt;Assembler;ASM
- MOV EAX,X
- BSWAP EAX
- END;
-
- BEGIN
- WriteLn('0 = ',_BSWAP(0));
- WriteLn('-1 = ',_BSWAP(-1));
- WriteLn('$12345678 = $',IntToHex(_BSWAP($12345678),8));
- WriteLn('$87654321 = $',IntToHex(_BSWAP($87654321),8));
- END.
on obtiendra le résultat suivant :
0 = 0-1 = -1
$12345678 = $78563412
$87654321 = $21436587
Voir également
Instruction assembleur 80x86 - Instruction XCHG
Références
Intel® 64 and IA-32 Architectures Software Developer’s Manual Volume 2A: Instruction Set Reference, A-M, Edition Intel, Mars 2010, Publication No. 253666-034US, page 153 à 155.