10.Instructions logiques

Download Report

Transcript 10.Instructions logiques

Système d’exploitation :
Assembleur
Semaine 10
Instructions logiques
Instruction logique : AND
•
AND effectue un ET LOGIQUE bit par bit sur les opérandes source et destination.
Le résultat est placé dans l’opérande destination.
•
Table de vérité de AND
0 AND 0 = 0
0 AND 1 = 0
1 AND 0 = 0
1 AND 1 = 1
•
Utilisations possibles :
–
–
–
–
–
–
–
•
AND
AND
AND
AND
AND
AND
AND
reg(8 ou 16), reg(8 ou 16)
reg(8 ou 16), mem(8 ou 16)
mem(8 ou 16), reg(8 ou 16)
reg(8 ou 16), imm(8)
reg(16), imm(16)
mem(8 ou 16), imm(8)
mem(16), imm(16)
Positionnement des indicateurs :
OF et CF sont mis à 0
SF, ZF et PF sont positionnés
Instruction logique : AND
Utilité
• AND sert à forcer des bits à 0 à l’aide d’un masque
(mettre des 0 en regard des bits à forcer à 0 et des 1 en regard des bits à laisser inchangés)
AX = CDEFh
isoler les 12 bits de poids faible
AND AX, 0000 1111 1111 1111b (c à d 0FFFh)
résultat : AX = 0DEFh
• AND permet de calculer le reste d’une division d’un nb par un autre ce
dernier étant une puissance de 2.
– 1ère opérande du AND = le numérateur
– 2ème opérande du AND = le dénominateur – 1
Exemple :
reste de 134/16 : 1000 0110b AND 0000 1111b = 0000 0110b = 6d
• AND permet de transformer un nb ascii en BCD
Exemple :
ascii :
masque :
résultat :
33h
0F
03
34h
0F
04
37h
0F
07
38h
0F
08
Instruction logique : OR
•
OR effectue un OU LOGIQUE bit par bit sur les opérandes source et destination.
Le résultat est placé dans l’opérande destination.
•
Table de vérité de OR
0 OR 0 = 0
0 OR 1 = 1
1 OR 0 = 1
1 OR 1 = 1
•
Utilisations possibles :
–
–
–
–
–
–
–
•
OR
OR
OR
OR
OR
OR
OR
reg(8 ou 16), reg(8 ou 16)
reg(8 ou 16), mem(8 ou 16)
mem(8 ou 16), reg(8 ou 16)
reg(8 ou 16), imm(8)
reg(16), imm(16)
mem(8 ou 16), imm(8)
mem(16), imm(16)
Positionnement des indicateurs :
OF et CF sont mis à 0
SF, ZF et PF sont positionnés
Instruction logique : OR
Utilité
• OR sert à forcer des bits à 1 à l’aide d’un masque
(mettre des 1 en regard des bits à forcer à 1 et des 0 en regard des bits à laisser inchangés)
• AX = CDEFh - forcer à 1 les 12 bits de poids faible
• OR AX, 0000 1111 1111 1111b c.àd 0FFFh
• résultat : AX = CFFFh
• OR permet de transformer des majuscules en minuscule
Exemple :
texte :
masque :
résultat :
41 53 53 45 4D 42 4C 45 52 (ASSEMBLER)
20 20 20 20 20 20 20 20 20
61 73 73 65 6D 62 6C 65 72 (assembler)
Instruction logique : XOR
•
XOR effectue un OU LOGIQUE (exclusif) bit par bit sur les opérandes source et destination.
Le résultat est placé dans l’opérande destination.
•
Table de vérité de XOR
0 XOR 0 = 0
0 XOR 1 = 1
1 XOR 0 = 1
1 XOR 1 = 0
•
Utilisations possibles :
–
–
–
–
–
–
–
•
XOR
XOR
XOR
XOR
XOR
XOR
XOR
reg(8 ou 16), reg(8 ou 16)
reg(8 ou 16), mem(8 ou 16)
mem(8 ou 16), reg(8 ou 16)
reg(8 ou 16), imm(8)
reg(16), imm(16)
mem(8 ou 16), imm(8)
mem(16), imm(16)
Positionnement des indicateurs :
OF et CF sont mis à 0
SF, ZF et PF sont positionnés
Instruction logique : XOR
Utilité
• XOR sert à inverser des bits à l’aide d’un masque
(mettre des 1 en regard des bits à inverser et des 0 en regard des bits à laisser inchangés)
• AX = CDEFh - inverser les 12 bits de poids faible
• XOR AX, 0000 1111 1111 1111b càd 0FFFh
• résultat : AX = C210h
• XOR est un moyen rapide pour remettre un registre à 0
Exemple :
XOR AX, AX ; remet AX à 0
XOR BH, BH ; remet BH à 0
• XOR permet de transformer les majuscules en minuscules et les
minuscules en majuscules.
Exemple :
texte :
masque :
résultat :
41 53 73 45 6D 62 6C 45 72 (ASsEmblEr)
20 20 20 20 20 20 20 20 20
61 73 53 65 4D 42 4C 65 52 (asSeMBLeR)
Instruction logique : NOT
•
NOT effectue un NON LOGIQUE bit par bit sur l’opérande spécifiée.
Le résultat est placé dans l’opérande spécifiée.
•
Table de vérité de NOT
NOT 0 = 1
NOT 1 = 0
•
Utilisations possibles :
–
–
NOT reg
NOT mem
•
Positionnement des indicateurs :
•
Utilité :
les indicateurs ne sont pas positionnés par NOT
(attention, c’est l’exception !)
NOT sert à inverser tous les bits de l’opérande destination
(équivalent à XOR utilisant un masque ne comportant que des “1”)
Exemple :
NOT AX avec AX=C4 62 donne AX=3B 9D
Instruction logique : TEST
•
TEST effectue un ET LOGIQUE bit par bit sur les opérandes spécifiées.
•
Les opérandes ne sont pas modifiées par l’opération.
Seuls les indicateurs sont positionnés suite à une instruction TEST.
•
Utilisations possibles :
–
–
–
–
–
–
–
TEST
TEST
TEST
TEST
TEST
TEST
TEST
reg(8 ou 16), reg(8 ou 16)
reg(8 ou 16), mem(8 ou 16)
mem(8 ou 16), reg(8 ou 16)
reg(8 ou 16), imm(8)
reg(16), imm(16)
mem(8 ou 16), imm(8)
mem(16), imm(16)
•
Positionnement des indicateurs : idem AND
(OF et CF sont mis à 0; SF, ZF et PF sont positionnés)
•
Exemples :
TEST AX, 0000 0010b avec AX = 10101101 donne ZF=1
Instructions de décalage et de rotation
• Principe : consiste à faire glisser tous les bits d’un octet ou
d’un mot vers la droite ou vers la gauche.
• 2 catégories : les SHIFTS et les ROTATIONS
Les 4 SHIFTS
Les 4 Rotations
SHL, SHR, SAL, SAR
ROL, ROR, RCL, RCR
Rotation (R)
Shift (S)
Logique (H)
Gauche (L)
Droit (R)
Algébr (A)
Gauche (L)
Droit (R)
Logique (O)
Gauche (L)
Droit (R)
Algébr (C)
Gauche (L)
Droit (R)
Instructions de décalage et de rotation
Utilité
• Lire un à un les bits du registre
les bits sortant à gauche positionnent l'indicateur de
retenue CF
• Multiplier par 2n
le fait de décaler un nombre binaire d'un chiffre à gauche le
multiplie par 2; en effectuant cette opération n fois on obtient
une multiplication par 2n.
Les instructions de décalage (1/2)
• Utilisations possibles :
• SHL/SHR/SAL/SAR
reg(8 ou 16), 1
• SHL/SHR/SAL/SAR
mem(8 ou 16), 1
• SHL/SHR/SAL/SAR
reg(8 ou 16), CL
• SHL/SHR/SAL/SAR
mem(8 ou 16), CL
• SHL et SHR permettent de multiplier par 2n des entiers naturels (pas des
entiers relatifs car le bit de poids fort disparait dès la première rotation).
• Fonctionnement
• SHL ou SAL (instructions identiques)
CF
reg/mem
perdu
• SHR
0
reg/mem
CF
0
perdu
• SAR
reg/mem
Signe réinjecté
CF
perdu
Les instructions de décalage (2/2)
• Positionnement des indicateurs
•
•
•
•
OF, SF, ZF, PF, AF et CF sont positionnés
OF n’a de signification que pour un shift de 1 bit
OF et AF modifiés uniquement si shift à gauche
OF mis à 0 si CF identique au bit de signe et mis à 1
dans le cas contraire
• Indicateurs non positionnés si shift de 0 position.
Les instructions de rotation (1/3)
• Utilisations possibles :
•
• ROL/ROR/RCL/RCR
reg(8 ou 16), 1
• ROL/ROR/RCL/RCR
mem(8 ou 16), 1
• ROL/ROR/RCL/RCR
reg(8 ou 16), CL
• ROL/ROR/RCL/RCR
mem(8 ou 16), CL
RCL et RCR permettent de faire une lecture bit-à-bit du contenu du registre.
• Fonctionnement
• ROL
CF
reg/mem
perdu
• ROR
reg/mem
CF
perdu
• RCL
• RCR
CF
reg/mem
reg/mem
CF
Les instructions de rotation (2/3)
•
Positionnement des indicateurs
–
–
–
–
–
OF et CF sont positionnés
Les autres indicateurs sont inchangés.
OF n’a de signification que pour une rotation de 1 bit.
OF et CF sont modifiés quel que soit le sens de rotation.
Rotations à gauche :
OF mis à 0 si CF identique au bit de signe
et mis à 1 dans le cas contraire
– Rotations à droite :
OF mis à 0 si le bit rentré à gauche est identique au bit de
signe et mis à 1 dans le cas contraire
– Indicateurs non positionnés si rotation de 0 position.
Les instructions de rotation (3/3)
•
Utilisation courante :
– les shift et les rotations peuvent remplacer avantageusement les instructions de
multiplication et de division.
• Shift vers la gauche = multiplication par 2
• Shift vers la droite = division par 2
– SAx pour nombres signés
– SHx pour nombres non-signés