Assembleur IUT LENS 2002 Les instructions logiques L`opérande

Assembleur - IUT LENS 2002
Assembleur
IUT LENS 2002
Les instructions logiques
Assembleur - IUT LENS 2002
Les instructions logiques
lLes instructions logiques sont équivalentes
aux portes de base utilisées dans les circuits
logiques.
lL’assembleur possède donc les instructions
élémentaires à partir desquelles on peut
obtenir l’ensemble des cas possibles.
Assembleur - IUT LENS 2002
L’opérande AND
lAND destination, source
lCette opération effectue un ET logique entre
destination et source.
Mov AH,11001101
Mov AL,00111100
AND AH,AL
=> AH 00001100
Assembleur - IUT LENS 2002
L’opérande OR
lOR destination, source
lCette opération effectue un OU logique entre
destination et source.
Mov AH,11001101
Mov AL,00111100
OR AH,AL
=> AH 11111101
Assembleur - IUT LENS 2002
L’opérande XOR
lXOR Destination, Source
lCette instruction réalise un OU Exclusif entre la
source et la destination. On l’utilise très souvent pour
effacer un registre (Xor sur lui-même)
MOV AH,00111100
XOR AH,11001100
=> AH = 11110000
Assembleur - IUT LENS 2002
L’opérande NOT
lNOT source
lCette opération effectue un NON logique sur
source.
Mov AH,11001101
NOT AH
=> AH 00110010
Assembleur - IUT LENS 2002
Assembleur
IUT LENS 2002
Structures Conditionnelles
et de Boucles
Assembleur - IUT LENS 2002
Le fonctionnement.
lLe rôle d’une structure conditionnelle est d’orienté le
programme en fonction du résultat d’un test dans les
langages de haut niveau ou d’une opération
arithmétique en assembleur.
lLa plus connue étant le
SI
…
ALORS
…
SINON
Assembleur - IUT LENS 2002
En Assembleur ?
lIl n’existe aucune structure conditionnelle de
ce type mais on peut contourner ce
problème.
lL’instruction SI ALORS SINON des langages
de haut niveau se transforme en plusieurs
instructions assembleur.
Assembleur - IUT LENS 2002
Algorithme général
lOn peut résumer la transformation du SI
ALORS SINON sous cette forme
d’instructions élémentaires.
SI => Opération de Test ou Arithmétique.
ALORS => Test d’un indicateur et Saut à une autre endroit
SINON => Suite du programme
Assembleur - IUT LENS 2002
Ce qui donne en ASM …
MOV AL,0FFH
CMP AL,0
JA Label1
………..…….
……………...
Label1 : ……..
…………….
AL = OFFH;
SI AL > 0
ALLER A Label1
……..
……..
Label1 :…………
………………….
Assembleur - IUT LENS 2002
Les instructions de Test
lToutes les instructions positionnant les Flags
peuvent servir de Test.
lIl existe cependant 2 instructions spécifiques
de test qui ont l’avantage, par rapport aux
instructions arithmétiques, de ne pas
modifier les opérandes.
Assembleur - IUT LENS 2002
Les Labels
lIl est possible en assembleur de nommer
des lignes de codes.
–Soit par un déplacement relatif dans le code, mais
qui risque de changer à chaque compilation
–Soit par un label précédant la ligne de code, à la
charge du compilateur de transformer ce label en
déplacement
VotreNom : Instruction Asm
Assembleur - IUT LENS 2002
L’instruction CMP
lCMP destination, source
lCette opération effectue l’opération SUB
mais n’affecte pas le résultat dans
destination.
lElle sert à comparer les deux opérandes.
Assembleur - IUT LENS 2002
L’instruction TEST
lTEST destination, source
lL’instruction TEST effectue la même
opération que le ET logique, sauf qu’aucun
résultat n’est stocké dans destination.
lOn se sert de cette instruction pour
déterminer la position d’un ou plusieurs bits.
Assembleur - IUT LENS 2002
Les instructions de Saut
lIls existent deux instructions de saut : l’une
conditionnelle Jcond et l’autre inconditionnelle JMP.
lDans le cadre des structures conditionnelles, on
utilise Jcond oùcond représente une des conditions
suivantes.
Jcond Label
Assembleur - IUT LENS 2002
Les conditions non signées
PF = 0Pas de parité / paritéImpaireNP / PO
PF = 1Parité / Parité paireP / PE
CF = 0Carry égal à 0NC
CF = 1Carry égal à 1C
CF ou ZF = 1Inférieur ou égal / Pas supérieurBE / NA
CF ou ZF = 1Inférieur / Pas supérieur ni égalB / NAE
CF = 0Supérieur ou égal / Pas inférieurAE / NB
CF ou ZF = 0Supérieur / Pas inférieur ni égalA / NBE Flag testéDescriptionCondition
Assembleur - IUT LENS 2002
Conditions Signées
SF = 0Signe négatifNS
SF = 1Signe positifS
OF = 0Overflowégal à 0NO
OF = 1Overflowégal à 1O
((SF xor OF) ou ZF) = 1Inférieur ou égal / Pas supérieurLE / NG
(SF xor OF) = 1Inférieur / Pas supérieur ni égalL / NGE
(SF xor OF) = 0Supérieur ou égal / Pas inférieurGE / NL
((SF xor OF) ou ZF) = 0Supérieur / Pas inférieur ni égalG / NLE Flag testéDescriptionCondition
Assembleur - IUT LENS 2002
Condition sur Zéro
ZF = 0Pas égal / Pas ZéroNE / NZ
ZF = 1Egal / ZéroE / Z Flag testéDescriptionCondition
Assembleur - IUT LENS 2002
L’instruction JMP
lJMP Label
lCette instruction effectue un saut
inconditionnel vers Label.
attention comme dans tout programme si vous
créer une boucle vérifiez bien que le code
permette d’en sortir.
Assembleur - IUT LENS 2002
Quelques exemples (1)
Label2:
Label1:
}
JL Label1
CMP A,5
A++;
INC A
B++;
INC B
While (a < 5) {
JMP Label2
Assembleur - IUT LENS 2002
Quelques Exemples (2)
Label1:
While (B!=0);
JL Label1
}
CMP B,0
C++;
INC C
B--;
DEC B
Do {
Assembleur - IUT LENS 2002
Quelques exemples (3)
Label2
Label1:
}
INC C
JMP Label1
ADD A, B
A = A +B;
JG Label2
{;
CMP C,10
For (c=0;c<10;c++)
MOV C,0
Assembleur - IUT LENS 2002
L’instruction LOOP
lL’instruction loop permet de gérer des boucles for,
en utilisant le registre de «boucle » CX.
lA chaque tour de boucle CX est décrémenté.
lDès que le registre arrive à 0 l’instruction suivante
est exécutée, sinon on remonte au label de début de
boucle.
Assembleur - IUT LENS 2002
Exemple d’utilisation de Loop
Start : MOV CX,10
For : …………….
LOOP For
lEquivaut à
For (i=10;i>0.i--) { … }
Assembleur - IUT LENS 2002
Assembleur
IUT LENS 2002
La Mémoire
Assembleur - IUT LENS 2002
La mémoire et les variables
lLa mémoire et les différents modes d’accès
vont nous permettre d’aller plus loin dans
l’utilisation de l’assembleur.
lLes registres étant limités en nombre et à
des longueurs de 16 bits maximum, la
mémoire permet de stocker des informations
sur des tailles plus importantes.
Assembleur - IUT LENS 2002
La mémoire est «quasi-illimitée»
lComment y accéder ? Si on utilise l’ancien
système (ie un registre 16 bits pour
représenter une adresse mémoire on arrive à
une limite de 64Ko).
lLes 80X86 ont donc une méthode plus
compliquée qui remonte à l’é poque où des
registres supérieurs à 16 bits étaient
«irréalisables ».
Assembleur - IUT LENS 2002
Notion de segment
lUn segment est un bloc de mémoire
continue (que l’on peut parcourir linéairement
du début à la fin)
lDes segments peuvent se chevaucher.
lIl peut y en avoir autant que nécessaire.
Assembleur - IUT LENS 2002
L’OFFSET d’une adresse
lIl représente un déplacement par rapport à la
base du segment associé.
lL’offset et le segment composent l’adresse
logique (ou segmentée) d’une variable.
Assembleur - IUT LENS 2002
L’adresse physique
lPour obtenir l’adresse physique à partir de
l’offset et d’un segment, il suffit d’appliquer
la formule suivante.
ADRESSE PHYSIQUE = SEGMENTS *16 + OFFSET
lOn obtient alors une adresse sur 20 bits
permettant d’adresser jusqu’à 1 Mo pour le
mode réel.
Assembleur - IUT LENS 2002
Le mode protégé
lLa mémoire actuelle dépassant allégrement le Mo
maintenant il faut pouvoir y accéder également.
lPour cette raison un deuxième mode de
représentation des adresses mémoire est apparu à
partir du 286.
lNous y reviendrons lorsque nous étudierons les
évolutions de l’assembleur.
Assembleur - IUT LENS 2002
Comment nommer une variable
lLe nommage des variables obéit à certaines
règles. Son nom doit en effet :
–Contenir des lettres, des chiffres ou des
caractères spéciaux ? @ _ (La casse n’a pas
d’importance).
–Commencer par une lettre ou un caractère
spécial.
lLa longueur maximale est de 255 caractères
mais seul les 31 premiers sont significatifs.
Assembleur - IUT LENS 2002
Les types de variables
lDans les langages de haut niveau, il est possible de
«typer » une variable. En assembleur, il s’agit plutôt
d’indiquer la taille de cette dernière qui pourra
contenir n’importe quelle information.
lAttention, l’absence de typage implique que vous
interprétiez correctement votre variable, le
compilateur ne vous sera d’aucune aide la-dessus.
Assembleur - IUT LENS 2002
Les différentes tailles de variables
10 bytes
Quad Word
Pword
Double Word
Word
Octet
80 bitsDT 64 bitsDQ 48 bitsDP 32 bitsDD 16 bitsDW 8 bitsDB
Assembleur - IUT LENS 2002
L’initialisation des variables
lPour initialiser vos variables on distingue 4
représentations «entière »+ 2 flottantes
–Nombre décimal : Suite de chiffres suivie ou non
de D
–Nombre Hexadécimal : Suite de Chiffres ou de
A..F et suivie de H
–ASCII : Suite de caractères encadrée par des
apostrophes « ‘»
–Inconnue : Suite de points d’interrogation
Assembleur - IUT LENS 2002
Quelques exemples de déclarations
lExemples de déclarations dans la section .DATA
Nombre1 DD 12345678
Caractère DB ‘a’
Nombre2 DW 1234H
Inconnu DD ?
Inconnu2 DB 5 DUP (0)
lLa famille des processeurs 80X86 utilise la représentation
«LITTLE ENDIAN » c’est-à-dire que l’on commence par le
poids faible des données.
Assembleur - IUT LENS 2002
Représentation Mémoire
lPour les exemples précédents on obtient alors la
représentation mémoire suivante. Chacune des
cases représente un octet (8 bits)
12H
0
?34H‘a’12345678Adr
N
0000???Adr
N+8
Assembleur - IUT LENS 2002
L’instruction DUP
lL’instruction DUP est très pratique pour initialiser un
tableau.
lSoit a une valeur initiale comme dans l’exemple :
Variable Type NbCase DUP (Valeur)
lSoit pour réserver une zone mémoire qu’on affectera
plus tard.
Variable Type NbCase DUP (?)
Assembleur - IUT LENS 2002
Assembleur
IUT LENS 2002
Les différents modes
d’adressages
1 / 8 100%
La catégorie de ce document est-elle correcte?
Merci pour votre participation!

Faire une suggestion

Avez-vous trouvé des erreurs dans l'interface ou les textes ? Ou savez-vous comment améliorer l'interface utilisateur de StudyLib ? N'hésitez pas à envoyer vos suggestions. C'est très important pour nous!