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.
lLassembleur possède donc les instructions
élémentaires à partir desquelles on peut
obtenir lensemble des cas possibles.
Assembleur - IUT LENS 2002
Lopé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
Lopé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
Lopérande XOR
lXOR Destination, Source
lCette instruction réalise un OU Exclusif entre la
source et la destination. On lutilise très souvent pour
effacer un registre (Xor sur lui-même)
MOV AH,00111100
XOR AH,11001100
=> AH = 11110000
Assembleur - IUT LENS 2002
Lopé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 dune structure conditionnelle est dorienté le
programme en fonction du résultat dun test dans les
langages de haut niveau ou dune opération
arithmétique en assembleur.
lLa plus connue étant le
SI
ALORS
SINON
Assembleur - IUT LENS 2002
En Assembleur ?
lIl nexiste aucune structure conditionnelle de
ce type mais on peut contourner ce
problème.
lLinstruction 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
dinstructions élémentaires.
SI => Opération de Test ou Arithmétique.
ALORS => Test dun 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 lavantage, 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
Linstruction CMP
lCMP destination, source
lCette opération effectue lopération SUB
mais naffecte pas le résultat dans
destination.
lElle sert à comparer les deux opérandes.
Assembleur - IUT LENS 2002
Linstruction TEST
lTEST destination, source
lLinstruction TEST effectue la même
opération que le ET logique, sauf quaucun
résultat nest stocké dans destination.
lOn se sert de cette instruction pour
déterminer la position dun ou plusieurs bits.
Assembleur - IUT LENS 2002
Les instructions de Saut
lIls existent deux instructions de saut : lune
conditionnelle Jcond et lautre 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
Linstruction 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 den 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
Linstruction LOOP
lLinstruction 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 linstruction suivante
est exécutée, sinon on remonte au label de début de
boucle.
Assembleur - IUT LENS 2002
Exemple dutilisation 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 daccès
vont nous permettre daller plus loin dans
lutilisation de lassembleur.
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 lancien
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 lon 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
LOFFSET dune adresse
lIl représente un déplacement par rapport à la
base du segment associé.
lLoffset et le segment composent ladresse
logique (ou segmentée) dune variable.
Assembleur - IUT LENS 2002
Ladresse physique
lPour obtenir ladresse physique à partir de
loffset et dun segment, il suffit dappliquer
la formule suivante.
ADRESSE PHYSIQUE = SEGMENTS *16 + OFFSET
lOn obtient alors une adresse sur 20 bits
permettant dadresser 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 lassembleur.
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 na pas
dimportance).
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 sagit plutôt
dindiquer la taille de cette dernière qui pourra
contenir nimporte quelle information.
lAttention, labsence de typage implique que vous
interprétiez correctement votre variable, le
compilateur ne vous sera daucune 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
Linitialisation 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 dinterrogation
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 » cest-à-dire que lon 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
?34Ha12345678Adr
N
0000???Adr
N+8
Assembleur - IUT LENS 2002
Linstruction DUP
lLinstruction DUP est très pratique pour initialiser un
tableau.
lSoit a une valeur initiale comme dans lexemple :
Variable Type NbCase DUP (Valeur)
lSoit pour réserver une zone mémoire quon affectera
plus tard.
Variable Type NbCase DUP (?)
Assembleur - IUT LENS 2002
Assembleur
IUT LENS 2002
Les différents modes
dadressages
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 linterface ou les textes ? Ou savez-vous comment améliorer linterface utilisateur de StudyLib ? Nhésitez pas à envoyer vos suggestions. Cest très important pour nous !