Le « langage machine » Jacques Lonchamp IUT Nancy Charlemagne – DUT Informatique 1A.
-
Upload
cesaire-levasseur -
Category
Documents
-
view
120 -
download
0
Transcript of Le « langage machine » Jacques Lonchamp IUT Nancy Charlemagne – DUT Informatique 1A.
Le laquo langage machine raquo
Jacques Lonchamp
IUT Nancy Charlemagne ndash DUT Informatique 1A
2
Langage machine = langage directement exeacutecutable par le processeur Donc lieacute agrave son architecture et aux circuits qui le composent Diffeacuterent pour chaque processeur2 versions binaire (langage machine) et codeacutee laquo en clair raquo (langage drsquoassemblage ou langage assembleur)
Langage machine et langage drsquoassemblage (assembleur)
3
Exemples de langages drsquoassemblage reacuteels
4
Lien avec les langages eacutevolueacutes (C C++ COBOL hellip)
Il existe aussi des langages interpreacuteteacutes ndash traduction et exeacutecution immeacutediate des instructions (ex javascript PHP) - et semi compileacutes-semi interpreacuteteacutes (Java)
5
La machine simuleacutee (sms32v50)
Meacutemoire centrale 256 mots de 1 octetAdresses de 0 agrave 255 noteacutee [00] agrave [FF] en hexadeacutecimalLes [ ] distinguent les adresses des constantesEX 1F est la constante 31 alors que [1F] est le mot drsquoadresse 31
Pas un accumulateur mais 4 registres drsquoun octet utilisables indiffeacuteremment et noteacutes AL BL CL DLLe compteur ordinal est initialiseacute agrave 0Les mots peuvent contenir des entiers entre -128 et +127 en compleacutement agrave 2 ou des codes ASCII
6
7
Les instructions de la machine simuleacutee
1 Instruction de transfert (meacutemoire vers registre ou registre vers meacutemoire)
MOV destination source
La source est recopieacutee dans la destination (attention a lordre )Les seules formes autoriseacutees sont les suivantes
MOV AL 1B range 1B (hexa) dans ALMOV BL [C2] copie le mot dadresse C2 dans BLMOV [15] CL copie le registre CL dans le mot dadresse 15
Les transferts de meacutemoire agrave meacutemoire sont interdits car il faudrait 2 adresses meacutemoire pour une seule instruction (cf chapitre sur lUAL)
Les transferts entre registres sont aussi interdits Il faut passer par un mot meacutemoire intermeacutediaire ou par la pile La pile est une zone de meacutemoire ou lon empile et deacutepile des valeurs PUSH AL empile la valeur de AL au sommet de la pilePOP BL deacutepile la valeur et la range dans BL
8
AL BL
12
12
PUSH AL
POP BL
12
Pile
9
2 Instructions de calcul
Il sagit de laddition de la soustraction de la multiplication de la division entiegravere du reste de la division entiegravere ou modulo de lincreacutementation de 1 de la deacutecreacutementation de 1 Elles utilisent des registres et rangent leur reacutesultat dans le premier registre
ADD AL BL AL = AL + BLSUB BL CL BL = BL - CLMUL CL DL CL = CL DLDIV DL AL DL = DL=ALMOD AL BL AL = AL mod BLINC DL DL = DL + 1DEC AL AL = AL 1048576 1
Dans les 5 instructions agrave 2 opeacuterandes lopeacuterande de droite peut aussi ecirctre une constante hexadeacutecimale
10
3 Instructions de comparaison
CMP destination source
Compare la source et la destination soustrait la source agrave la destination et met 1 dans le laquo flag raquo (drapeau) zero (Z) si le reacutesultat est nul et 1 dans le laquo flag raquo sign (S) si le reacutesultat est neacutegatif
CMP AL BL met Z a 1 si AL = BL
met S a 1 si AL lt BL
CMP BL13 met Z a 1 si BL = 13
met S a 1 si BL lt 13
CMP CL [20] met Z a 1 si CL = [20]
met S a 1 si CL lt [20]
11
4 Instructions de branchement inconditionnel
JMP eacutetiquette de destination
Llsquoeacutetiquette vers laquelle se fait le saut occupe une ligne du programme assembleur mais ne prend pas de place en meacutemoire Elle repreacutesente une certaine adresse
JMP FINhelliphellip
FIN (ne pas oublier les )hellip
hellip
Change la valeur du compteur ordinal (IP Instruction pointer)
12
5 Instructions de branchement conditionnel
Suit une instruction de comparaison (CMP) et reacutealise le saut en fonction des drapeaux cest-agrave-dire du reacutesultat de la comparaison Sinon passe agrave linstruction suivante
JZ LABAS saute agrave LABAS si le flag Z est agrave 1JNZ PLACE saute agrave place si le flag Z est agrave 0JS RET saute agrave RET si le flag S est agrave 1 JNS START saute agrave START si le flag S est agrave 0
En jouant sur lordre des registres on peut reacutealiser toutes les comparaisons (gt lt gt= lt= = =) comme nous le deacutetaillerons dans la suite
13
6 Instructions diverses
END fin du programme (une seule sur la derniegravere ligne)
HALT arrecirct de lexeacutecution (eacuteventuellement plusieurs)DB constante deacutefinit une donneacutee (laquo Define Byte raquo)
14
JMP debut occupe les mots 0 et 1 DB 5 mot 2 (donneacutee 1)DB 2 mot 3 (donneacutee 2)DB 0 mot 4 (reacutesultat)
debutMOV AL [2] premiegravere instruction du programmeMOV BL [3]ADD AL BL reacutesultat dans ALMOV [4] ALEND les mots dadresse 2 et 3 ont eacuteteacutes
additionneacutes et le reacutesultat rangeacute dans le mot 4
Exemple de programme
Nous prenons lhabitude de placer les donneacutees en deacutebut de meacutemoire avec un JMP qui les saute pour aller au deacutebut du programme (car le compteur ordinal est initialiseacute agrave 0) En effet si on place les donneacutees apregraves le programme on ne peut connaicirctre leurs adresses quapregraves avoir eacutecrit tout le programme ce qui nest guegravere pratique
Zone des donneacutees etreacutesultats
15
Les conditionnelles
si condition alors cas_vrai
sinon cas_faux
fsi
ougrave condition slsquoeacutecrit op1 opeacuterateur op2 avec gt lt gt= lt= = = comme opeacuterateurs
En assembleur il ny a pas dinstruction conditionnelle si alors sinon Il faut la construire avec des branchements conditionnels et inconditionnels Le scheacutema de traduction standard utiliseacute par les compilateurs pour traduire les conditionnelles en langage machine est le suivant
16
MOV AL op1 MOV BL op2 ou autres registres
CMP AL BL ou BL ALJ vrai instructions du cas_fauxJMP fin
vrai instruction du cas_vrai
finougrave J est un des branchements possibles (JZ JNZ JS ou JNS) en fonction de la condition
condition traduction explicationop1 = op2 CMP AL BL puis JZ op1-op2 = 0op1 = op2 CMP AL BL puis JNZ op1-op2 = 0op1 lt op2 CMP AL BL puis JS op1-op2 lt 0op1 gt op2 CMP BL AL puis JS op2-op1 lt 0op1 gt= op2 CMP AL BL puis JNS op1-op2 gt= 0op1 lt= op2 CMP BL AL puis JNS op2-op1 gt= 0
17
Cas particulier du si sans sinon
si condition alors
cas_vrai
fsiLe scheacutema geacuteneacuteral est inutilement compliqueacute car cas_faux est vide Il est preacutefeacuterable de prendre la neacutegation de la condition et de sauter agrave lrsquoeacutetiquette fin si cette neacutegation est vraie (autrement dit laquo si la conditionest fausse alors je ne fais rien raquo)
Le scheacutema de traduction est le suivant MOV AL op1 MOV BL op2 ou autres registres CMP AL BL ou BL AL J fin instructions_du_cas_vraifin ougrave le choix de J et lrsquoordre des opeacuterandes est donneacutee par le tableau preacuteceacutedent pour la neacutegation de la condition
18
Les iteacuterations (avec compteur ndash pour)
pour i de 1 agrave limite fairebloc_agrave_reacutepeacuteter
fpour
Lrsquoiteacuteration se traduit comme suit
MOV registre1 1 compteur iMOV registre2 limite
reCMP registre2 registre1JS fin limite-compteurlt0 cest agrave dire
compteurgtlimitebloc_agrave_reacutepeacuteterINC registre1 increacutementation de iJMP re
fin
19
Parcours drsquoun ensemble de donneacutees conseacutecutives lrsquoadressage indirect
Si on veut parcourir et traiter un ensemble de donneacutees conseacutecutives en meacutemoire (un tableau de donneacutees) il faut pouvoir deacutesigner successivement tous les eacuteleacutements de cet ensemble dans une iteacuteration Avec laquo lrsquoadressage direct raquo qui donne directement lrsquoadresse du mot voulu (ex [3]) ce nrsquoest pas possible On ne peut qursquoeacutecrire ADD AL [3]ADD AL [4]ADD AL [5] etcLrsquoassembleur offre laquo lrsquoadressage indirect raquo pour reacutesoudre ce problegraveme On utilise la notation [AL] qui signifie laquo le contenu du mot dont ladresse est dans le registre AL raquo Il suffit de mettre dans AL la premiegravere adresse voulue puis dincreacutementer AL de 1 en 1 dans une iteacuteration pour acceacuteder gracircce agrave la notation [AL] successivement agrave toutes les donneacutees de lensemble
20
Cest un des 5 modes dadressage classiques en assembleur - lrsquoadressage immeacutediat 8 (constante 8)- lrsquoadressage direct [8] (mot meacutemoire dadresse 8)- lrsquoadressage indirect [AL] (le registre AL contient ladresse voulue)- lrsquoadressage baseacute [AL+4] (le contenu de AL + 4 est ladresse voulue) Nexiste pas dans la machine simuleacutee- lrsquoadressage indexeacute [AL+BL] (le contenu de AL + le contenu de BL est lrsquoadresse voulue) Nexiste pas dans la machine simuleacutee
Attention dans la machine simuleacutee ladressage indirect nest autoriseacute que dans les instructions MOV ce qui est tregraves restrictif Ex
MOV DL [AL] Copie le mot [AL] dans DLMOV [CL] AL Copie AL dans le mot [CL]
21
Les entreacuteessorties de base srsquoeffectuent via des ports Les ports sont des adresses speacuteciales associeacutees aux peacuteripheacuteriques drsquoentreacuteesortie et repeacutereacutees par des numeacuteros Un octet peut ecirctre lu ou eacutecrit dans ces ports gracircce aux instructions IN et OUT qui utilisent le registre AL
IN 00 entreacutee depuis le port 00 vers ALOUT 01 sortie depuis AL vers le port 01
Dans le simulateur le port de sortie 01 est connecteacute agrave 2 feux tricolores selon la valeur de loctet transmis dans AL ces 2 feux srsquoallument dune certaine maniegravere bits 7 6 5 4 3 2 1 0 rouge orange vert rouge orange vert non utiliseacutes feu de gauche feu de droiteLe port dentreacutee 00 est connecteacute au clavier Le registre AL reccediloit le code ASCII de la touche du clavier enfonceacutee
Les entreacuteessorties
22
Cette forme drsquoentreacuteesortie sans condition correspond aux peacuteripheacuteriques qui sont toujours disponibles comme les interrupteurs les voyants lumineux Dans le cas de peacuteripheacuteriques plus complexes il faut recourir aux entreacuteessorties avec condition il faut connaicirctre lrsquoeacutetat du peacuteripheacuterique avant denvoyer ou de lire des informations (ex reacuteseau disque ) Comme nous lrsquoavons vu dans la partie sur le mateacuteriel il existe deux approches principales lrsquoattente active et les entreacuteessorties avec interruptions
23
Les manipulations de bits
1) Deacutecalage et rotations Ces opeacuterations deacutecalent vers la gauche ou vers la droite les bits
drsquoun registre Elles peuvent ecirctre utiliseacutees pour tester un bit quelconque (on le deacutecale tout agrave droite on annule les autres bits et on teste le mot) ou encore pour diviser ou multiplier rapidement un entier par une puissance de 2
SHL CLDeacutecalage agrave gauche le bit de poids fort est perdule bit de poids faible devient 0 (SHift Left)
SHR DL Deacutecalage agrave droite le bit de poids faible est perdu le bit de poids fort devient 0 (SHift Right)
ROL AL Rotation agrave gauche le bit de poids fort devient le bit de poids faible (ROtate Left)
ROR BL Rotation agrave droite le bit de poids faible devient le bit de poids fort (ROtate Right)
24
2) Les instructions logiquesLes instructions logiques effectuent des opeacuterations logiques bit agrave bit (chaque bit est calculeacute indeacutependamment des autres) ET OU et OU exclusif 0 0 1 1 0 0 1 1 0 0 1 1 OU 0 1 0 1 ET 0 1 0 1 OU EX 0 1 0 1 0 1 1 1 0 0 0 1 0 1 1 0a) Linstruction OR OR AL BL AL = AL OU BL OR est souvent utiliseacute pour forcer certains bits agrave 1 gracircce agrave un laquo masque raquo ayant des 1 agrave ces positions Exemple
MOV BL F0 masque BL 11110000MOV AL 55 AL 01010101OR AL BL 11110101
Les 4ers bits de AL sont forceacutes agrave 1 les 4 autres sont inchangeacutesb) Linstruction AND AND AL BL AL = AL ET BL AND est souvent utiliseacute pour forcer certains bits agrave 0 gracircce agrave un laquo masque raquo ayant des 0 agrave ces positions
25
Exemple MOV BL 0F masque BL 00001111MOV AL 55 AL 01010101AND AL BL 00000101
Les 4ers bits de AL sont forceacutes agrave 0 les 4 autres sont inchangeacutesc) Linstruction XOR XOR AL BL AL = AL OU EXCLUSIF BL XOR est souvent utiliseacute pour inverser certains bits gracircce agrave un laquo masque raquo ayant des 1 agrave ces positions
Exemple MOV BL F0 masque BL 11110000MOV AL 55 AL 01010101XOR AL BL 10100101Les 4ers bits de AL sont inverseacutes les 4 autres sont inchangeacutes
Remarque on na pas besoin de recourir agrave lassembleur pour manipuler des bits ces opeacuterateurs existent dans beaucoup de langages eacutevolueacutes comme Java En Java SHL slsquoeacutecrit gtgt SHR slsquoeacutecrit ltlt OR slsquoeacutecrit j AND slsquoeacutecrit amp et XOR slsquoeacutecrit ^ Exemple short i = 13 i a la valeur 0000000000001101 i = i ltlt 2 i prend la valeur 0000000000110100
26
Les sous programmes (SSP)
Un SSP est une suite dinstructions effectuant un certain traitement et regroupeacutees par commoditeacute deacutecoupage du programme en petits lsquomorceauxrsquo morceau utiliseacute plusieurs fois hellipUn SSP est repeacutereacute par ladresse de sa premiegravere instruction Lexeacutecution du SSP est deacuteclencheacutee par un programme appelant Un SSP peut lui mecircme en appeler un autre et ainsi de suiteLappel du SSP est effectueacute par linstruction CALL
CALL adresse (ex CALL 50)Lexeacutecution se poursuit agrave ladresse indiqueacutee dans le CALL La fin du SSP est marqueacutee par linstruction
RETLe processeur revient implicitement agrave linstruction placeacutee immeacutediatement apregraves le CALL car lrsquoadresse de retour est empileacutee
27
Ladresse de retour utiliseacutee par RET est ajouteacutee sur la pile par linstruction CALL Lorsque le processeur exeacutecute linstruction RET il deacutepile ladresse de la pile et la range dans le compteur ordinalCe meacutecanisme marche mecircme dans le cas des appels imbriqueacutes (un CALL dans un SSP vers un autre SSP) et dans le cas des appels reacutecursifs (un SSP qui sappelle lui mecircme un certain nombre de fois)
CALL 40
CALL 90
RET
RET
0
40
904546
1213
13
4613
13
pile
4613
28
Le plus souvent le SSP effectue un traitement sur des donneacutees (ou paramegravetres) qui sont fournies par le programme appelant et produit un reacutesultat qui est retourneacute agrave ce programmePlusieurs strateacutegies pour passer les paramegravetres a) passage par les registresLes valeurs des paramegravetres et du reacutesultat sont contenues dans des registres bien deacutefinis Meacutethode simple qui ne convient que si le nombre de paramegravetres est faible car il y a peu de registresEx le SSP agrave ladresse hexadeacutecimale 30 calcule le maximum de 2 entiers naturels On convient que les entiers sont passeacutes par les registres AL et BL et que le reacutesultat est placeacute dans le registre AL Lappel slsquoeacutecrit
MOV AL donneacutee1MOV BL donneacutee2CALL 30 le reacutesultat est disponible dans AL
29
Le SSP slsquoeacutecrit ORG 30 directive qui indique que le code qui suit est
situeacute agrave ladresse 30 Ne prend pas de place en meacutemoire
CMP AL BLJNS saut si AL gt= BL (AL-BL gt= 0)PUSH BL sinon eacutechange de AL et BLPOP AL de telle sorte max soit dans AL
saut RET
b) passage par la pileLes valeurs des paramegravetres sont empileacutees Il peut y en avoir un nombre quelconque Le SSP reacutecupegravere les valeurs dans la pileEx le SSP agrave ladresse 40 utilise la pile pour passer les paramegravetres et reccediloit le reacutesultat dans la pile Lappel slsquoeacutecrit
PUSH AX donneacutee1 preacutealablement rangeacutee dans AXPUSH BX donneacutee2 preacutealablement rangeacutee dans BXCALL 40POP AX reacutecupeacuteration du reacutesultat dans AX par exemple
30
Le SSP peut slsquoeacutecrire ORG 40POP CL adresse de retour empileacutee par le CALLPOP BL deuxiegraveme paramegravetrePOP AL premier paramegravetreCMP BL ALJNS saut si AL gt= BLPUSH BL sinon eacutechange de AL et BLPOP AL de telle sorte que le max soit dans AL
saut PUSH AL reacutesultat dans la pilePUSH CL adresse de retour dans la pileRET deacutepile ladresse de retour
Le programme apparaicirct plus complexe Mais il faut noter que dans les langages dassemblage reacuteels on peut acceacuteder aux valeurs de la pile sans deacutepiler ce qui simplifie le deacutebut et la fin du SSP
ad retourdonneacutee 2donneacutee 1
reacutesultat
pile apregraves le CALL
pile apregraves le RET
2
Langage machine = langage directement exeacutecutable par le processeur Donc lieacute agrave son architecture et aux circuits qui le composent Diffeacuterent pour chaque processeur2 versions binaire (langage machine) et codeacutee laquo en clair raquo (langage drsquoassemblage ou langage assembleur)
Langage machine et langage drsquoassemblage (assembleur)
3
Exemples de langages drsquoassemblage reacuteels
4
Lien avec les langages eacutevolueacutes (C C++ COBOL hellip)
Il existe aussi des langages interpreacuteteacutes ndash traduction et exeacutecution immeacutediate des instructions (ex javascript PHP) - et semi compileacutes-semi interpreacuteteacutes (Java)
5
La machine simuleacutee (sms32v50)
Meacutemoire centrale 256 mots de 1 octetAdresses de 0 agrave 255 noteacutee [00] agrave [FF] en hexadeacutecimalLes [ ] distinguent les adresses des constantesEX 1F est la constante 31 alors que [1F] est le mot drsquoadresse 31
Pas un accumulateur mais 4 registres drsquoun octet utilisables indiffeacuteremment et noteacutes AL BL CL DLLe compteur ordinal est initialiseacute agrave 0Les mots peuvent contenir des entiers entre -128 et +127 en compleacutement agrave 2 ou des codes ASCII
6
7
Les instructions de la machine simuleacutee
1 Instruction de transfert (meacutemoire vers registre ou registre vers meacutemoire)
MOV destination source
La source est recopieacutee dans la destination (attention a lordre )Les seules formes autoriseacutees sont les suivantes
MOV AL 1B range 1B (hexa) dans ALMOV BL [C2] copie le mot dadresse C2 dans BLMOV [15] CL copie le registre CL dans le mot dadresse 15
Les transferts de meacutemoire agrave meacutemoire sont interdits car il faudrait 2 adresses meacutemoire pour une seule instruction (cf chapitre sur lUAL)
Les transferts entre registres sont aussi interdits Il faut passer par un mot meacutemoire intermeacutediaire ou par la pile La pile est une zone de meacutemoire ou lon empile et deacutepile des valeurs PUSH AL empile la valeur de AL au sommet de la pilePOP BL deacutepile la valeur et la range dans BL
8
AL BL
12
12
PUSH AL
POP BL
12
Pile
9
2 Instructions de calcul
Il sagit de laddition de la soustraction de la multiplication de la division entiegravere du reste de la division entiegravere ou modulo de lincreacutementation de 1 de la deacutecreacutementation de 1 Elles utilisent des registres et rangent leur reacutesultat dans le premier registre
ADD AL BL AL = AL + BLSUB BL CL BL = BL - CLMUL CL DL CL = CL DLDIV DL AL DL = DL=ALMOD AL BL AL = AL mod BLINC DL DL = DL + 1DEC AL AL = AL 1048576 1
Dans les 5 instructions agrave 2 opeacuterandes lopeacuterande de droite peut aussi ecirctre une constante hexadeacutecimale
10
3 Instructions de comparaison
CMP destination source
Compare la source et la destination soustrait la source agrave la destination et met 1 dans le laquo flag raquo (drapeau) zero (Z) si le reacutesultat est nul et 1 dans le laquo flag raquo sign (S) si le reacutesultat est neacutegatif
CMP AL BL met Z a 1 si AL = BL
met S a 1 si AL lt BL
CMP BL13 met Z a 1 si BL = 13
met S a 1 si BL lt 13
CMP CL [20] met Z a 1 si CL = [20]
met S a 1 si CL lt [20]
11
4 Instructions de branchement inconditionnel
JMP eacutetiquette de destination
Llsquoeacutetiquette vers laquelle se fait le saut occupe une ligne du programme assembleur mais ne prend pas de place en meacutemoire Elle repreacutesente une certaine adresse
JMP FINhelliphellip
FIN (ne pas oublier les )hellip
hellip
Change la valeur du compteur ordinal (IP Instruction pointer)
12
5 Instructions de branchement conditionnel
Suit une instruction de comparaison (CMP) et reacutealise le saut en fonction des drapeaux cest-agrave-dire du reacutesultat de la comparaison Sinon passe agrave linstruction suivante
JZ LABAS saute agrave LABAS si le flag Z est agrave 1JNZ PLACE saute agrave place si le flag Z est agrave 0JS RET saute agrave RET si le flag S est agrave 1 JNS START saute agrave START si le flag S est agrave 0
En jouant sur lordre des registres on peut reacutealiser toutes les comparaisons (gt lt gt= lt= = =) comme nous le deacutetaillerons dans la suite
13
6 Instructions diverses
END fin du programme (une seule sur la derniegravere ligne)
HALT arrecirct de lexeacutecution (eacuteventuellement plusieurs)DB constante deacutefinit une donneacutee (laquo Define Byte raquo)
14
JMP debut occupe les mots 0 et 1 DB 5 mot 2 (donneacutee 1)DB 2 mot 3 (donneacutee 2)DB 0 mot 4 (reacutesultat)
debutMOV AL [2] premiegravere instruction du programmeMOV BL [3]ADD AL BL reacutesultat dans ALMOV [4] ALEND les mots dadresse 2 et 3 ont eacuteteacutes
additionneacutes et le reacutesultat rangeacute dans le mot 4
Exemple de programme
Nous prenons lhabitude de placer les donneacutees en deacutebut de meacutemoire avec un JMP qui les saute pour aller au deacutebut du programme (car le compteur ordinal est initialiseacute agrave 0) En effet si on place les donneacutees apregraves le programme on ne peut connaicirctre leurs adresses quapregraves avoir eacutecrit tout le programme ce qui nest guegravere pratique
Zone des donneacutees etreacutesultats
15
Les conditionnelles
si condition alors cas_vrai
sinon cas_faux
fsi
ougrave condition slsquoeacutecrit op1 opeacuterateur op2 avec gt lt gt= lt= = = comme opeacuterateurs
En assembleur il ny a pas dinstruction conditionnelle si alors sinon Il faut la construire avec des branchements conditionnels et inconditionnels Le scheacutema de traduction standard utiliseacute par les compilateurs pour traduire les conditionnelles en langage machine est le suivant
16
MOV AL op1 MOV BL op2 ou autres registres
CMP AL BL ou BL ALJ vrai instructions du cas_fauxJMP fin
vrai instruction du cas_vrai
finougrave J est un des branchements possibles (JZ JNZ JS ou JNS) en fonction de la condition
condition traduction explicationop1 = op2 CMP AL BL puis JZ op1-op2 = 0op1 = op2 CMP AL BL puis JNZ op1-op2 = 0op1 lt op2 CMP AL BL puis JS op1-op2 lt 0op1 gt op2 CMP BL AL puis JS op2-op1 lt 0op1 gt= op2 CMP AL BL puis JNS op1-op2 gt= 0op1 lt= op2 CMP BL AL puis JNS op2-op1 gt= 0
17
Cas particulier du si sans sinon
si condition alors
cas_vrai
fsiLe scheacutema geacuteneacuteral est inutilement compliqueacute car cas_faux est vide Il est preacutefeacuterable de prendre la neacutegation de la condition et de sauter agrave lrsquoeacutetiquette fin si cette neacutegation est vraie (autrement dit laquo si la conditionest fausse alors je ne fais rien raquo)
Le scheacutema de traduction est le suivant MOV AL op1 MOV BL op2 ou autres registres CMP AL BL ou BL AL J fin instructions_du_cas_vraifin ougrave le choix de J et lrsquoordre des opeacuterandes est donneacutee par le tableau preacuteceacutedent pour la neacutegation de la condition
18
Les iteacuterations (avec compteur ndash pour)
pour i de 1 agrave limite fairebloc_agrave_reacutepeacuteter
fpour
Lrsquoiteacuteration se traduit comme suit
MOV registre1 1 compteur iMOV registre2 limite
reCMP registre2 registre1JS fin limite-compteurlt0 cest agrave dire
compteurgtlimitebloc_agrave_reacutepeacuteterINC registre1 increacutementation de iJMP re
fin
19
Parcours drsquoun ensemble de donneacutees conseacutecutives lrsquoadressage indirect
Si on veut parcourir et traiter un ensemble de donneacutees conseacutecutives en meacutemoire (un tableau de donneacutees) il faut pouvoir deacutesigner successivement tous les eacuteleacutements de cet ensemble dans une iteacuteration Avec laquo lrsquoadressage direct raquo qui donne directement lrsquoadresse du mot voulu (ex [3]) ce nrsquoest pas possible On ne peut qursquoeacutecrire ADD AL [3]ADD AL [4]ADD AL [5] etcLrsquoassembleur offre laquo lrsquoadressage indirect raquo pour reacutesoudre ce problegraveme On utilise la notation [AL] qui signifie laquo le contenu du mot dont ladresse est dans le registre AL raquo Il suffit de mettre dans AL la premiegravere adresse voulue puis dincreacutementer AL de 1 en 1 dans une iteacuteration pour acceacuteder gracircce agrave la notation [AL] successivement agrave toutes les donneacutees de lensemble
20
Cest un des 5 modes dadressage classiques en assembleur - lrsquoadressage immeacutediat 8 (constante 8)- lrsquoadressage direct [8] (mot meacutemoire dadresse 8)- lrsquoadressage indirect [AL] (le registre AL contient ladresse voulue)- lrsquoadressage baseacute [AL+4] (le contenu de AL + 4 est ladresse voulue) Nexiste pas dans la machine simuleacutee- lrsquoadressage indexeacute [AL+BL] (le contenu de AL + le contenu de BL est lrsquoadresse voulue) Nexiste pas dans la machine simuleacutee
Attention dans la machine simuleacutee ladressage indirect nest autoriseacute que dans les instructions MOV ce qui est tregraves restrictif Ex
MOV DL [AL] Copie le mot [AL] dans DLMOV [CL] AL Copie AL dans le mot [CL]
21
Les entreacuteessorties de base srsquoeffectuent via des ports Les ports sont des adresses speacuteciales associeacutees aux peacuteripheacuteriques drsquoentreacuteesortie et repeacutereacutees par des numeacuteros Un octet peut ecirctre lu ou eacutecrit dans ces ports gracircce aux instructions IN et OUT qui utilisent le registre AL
IN 00 entreacutee depuis le port 00 vers ALOUT 01 sortie depuis AL vers le port 01
Dans le simulateur le port de sortie 01 est connecteacute agrave 2 feux tricolores selon la valeur de loctet transmis dans AL ces 2 feux srsquoallument dune certaine maniegravere bits 7 6 5 4 3 2 1 0 rouge orange vert rouge orange vert non utiliseacutes feu de gauche feu de droiteLe port dentreacutee 00 est connecteacute au clavier Le registre AL reccediloit le code ASCII de la touche du clavier enfonceacutee
Les entreacuteessorties
22
Cette forme drsquoentreacuteesortie sans condition correspond aux peacuteripheacuteriques qui sont toujours disponibles comme les interrupteurs les voyants lumineux Dans le cas de peacuteripheacuteriques plus complexes il faut recourir aux entreacuteessorties avec condition il faut connaicirctre lrsquoeacutetat du peacuteripheacuterique avant denvoyer ou de lire des informations (ex reacuteseau disque ) Comme nous lrsquoavons vu dans la partie sur le mateacuteriel il existe deux approches principales lrsquoattente active et les entreacuteessorties avec interruptions
23
Les manipulations de bits
1) Deacutecalage et rotations Ces opeacuterations deacutecalent vers la gauche ou vers la droite les bits
drsquoun registre Elles peuvent ecirctre utiliseacutees pour tester un bit quelconque (on le deacutecale tout agrave droite on annule les autres bits et on teste le mot) ou encore pour diviser ou multiplier rapidement un entier par une puissance de 2
SHL CLDeacutecalage agrave gauche le bit de poids fort est perdule bit de poids faible devient 0 (SHift Left)
SHR DL Deacutecalage agrave droite le bit de poids faible est perdu le bit de poids fort devient 0 (SHift Right)
ROL AL Rotation agrave gauche le bit de poids fort devient le bit de poids faible (ROtate Left)
ROR BL Rotation agrave droite le bit de poids faible devient le bit de poids fort (ROtate Right)
24
2) Les instructions logiquesLes instructions logiques effectuent des opeacuterations logiques bit agrave bit (chaque bit est calculeacute indeacutependamment des autres) ET OU et OU exclusif 0 0 1 1 0 0 1 1 0 0 1 1 OU 0 1 0 1 ET 0 1 0 1 OU EX 0 1 0 1 0 1 1 1 0 0 0 1 0 1 1 0a) Linstruction OR OR AL BL AL = AL OU BL OR est souvent utiliseacute pour forcer certains bits agrave 1 gracircce agrave un laquo masque raquo ayant des 1 agrave ces positions Exemple
MOV BL F0 masque BL 11110000MOV AL 55 AL 01010101OR AL BL 11110101
Les 4ers bits de AL sont forceacutes agrave 1 les 4 autres sont inchangeacutesb) Linstruction AND AND AL BL AL = AL ET BL AND est souvent utiliseacute pour forcer certains bits agrave 0 gracircce agrave un laquo masque raquo ayant des 0 agrave ces positions
25
Exemple MOV BL 0F masque BL 00001111MOV AL 55 AL 01010101AND AL BL 00000101
Les 4ers bits de AL sont forceacutes agrave 0 les 4 autres sont inchangeacutesc) Linstruction XOR XOR AL BL AL = AL OU EXCLUSIF BL XOR est souvent utiliseacute pour inverser certains bits gracircce agrave un laquo masque raquo ayant des 1 agrave ces positions
Exemple MOV BL F0 masque BL 11110000MOV AL 55 AL 01010101XOR AL BL 10100101Les 4ers bits de AL sont inverseacutes les 4 autres sont inchangeacutes
Remarque on na pas besoin de recourir agrave lassembleur pour manipuler des bits ces opeacuterateurs existent dans beaucoup de langages eacutevolueacutes comme Java En Java SHL slsquoeacutecrit gtgt SHR slsquoeacutecrit ltlt OR slsquoeacutecrit j AND slsquoeacutecrit amp et XOR slsquoeacutecrit ^ Exemple short i = 13 i a la valeur 0000000000001101 i = i ltlt 2 i prend la valeur 0000000000110100
26
Les sous programmes (SSP)
Un SSP est une suite dinstructions effectuant un certain traitement et regroupeacutees par commoditeacute deacutecoupage du programme en petits lsquomorceauxrsquo morceau utiliseacute plusieurs fois hellipUn SSP est repeacutereacute par ladresse de sa premiegravere instruction Lexeacutecution du SSP est deacuteclencheacutee par un programme appelant Un SSP peut lui mecircme en appeler un autre et ainsi de suiteLappel du SSP est effectueacute par linstruction CALL
CALL adresse (ex CALL 50)Lexeacutecution se poursuit agrave ladresse indiqueacutee dans le CALL La fin du SSP est marqueacutee par linstruction
RETLe processeur revient implicitement agrave linstruction placeacutee immeacutediatement apregraves le CALL car lrsquoadresse de retour est empileacutee
27
Ladresse de retour utiliseacutee par RET est ajouteacutee sur la pile par linstruction CALL Lorsque le processeur exeacutecute linstruction RET il deacutepile ladresse de la pile et la range dans le compteur ordinalCe meacutecanisme marche mecircme dans le cas des appels imbriqueacutes (un CALL dans un SSP vers un autre SSP) et dans le cas des appels reacutecursifs (un SSP qui sappelle lui mecircme un certain nombre de fois)
CALL 40
CALL 90
RET
RET
0
40
904546
1213
13
4613
13
pile
4613
28
Le plus souvent le SSP effectue un traitement sur des donneacutees (ou paramegravetres) qui sont fournies par le programme appelant et produit un reacutesultat qui est retourneacute agrave ce programmePlusieurs strateacutegies pour passer les paramegravetres a) passage par les registresLes valeurs des paramegravetres et du reacutesultat sont contenues dans des registres bien deacutefinis Meacutethode simple qui ne convient que si le nombre de paramegravetres est faible car il y a peu de registresEx le SSP agrave ladresse hexadeacutecimale 30 calcule le maximum de 2 entiers naturels On convient que les entiers sont passeacutes par les registres AL et BL et que le reacutesultat est placeacute dans le registre AL Lappel slsquoeacutecrit
MOV AL donneacutee1MOV BL donneacutee2CALL 30 le reacutesultat est disponible dans AL
29
Le SSP slsquoeacutecrit ORG 30 directive qui indique que le code qui suit est
situeacute agrave ladresse 30 Ne prend pas de place en meacutemoire
CMP AL BLJNS saut si AL gt= BL (AL-BL gt= 0)PUSH BL sinon eacutechange de AL et BLPOP AL de telle sorte max soit dans AL
saut RET
b) passage par la pileLes valeurs des paramegravetres sont empileacutees Il peut y en avoir un nombre quelconque Le SSP reacutecupegravere les valeurs dans la pileEx le SSP agrave ladresse 40 utilise la pile pour passer les paramegravetres et reccediloit le reacutesultat dans la pile Lappel slsquoeacutecrit
PUSH AX donneacutee1 preacutealablement rangeacutee dans AXPUSH BX donneacutee2 preacutealablement rangeacutee dans BXCALL 40POP AX reacutecupeacuteration du reacutesultat dans AX par exemple
30
Le SSP peut slsquoeacutecrire ORG 40POP CL adresse de retour empileacutee par le CALLPOP BL deuxiegraveme paramegravetrePOP AL premier paramegravetreCMP BL ALJNS saut si AL gt= BLPUSH BL sinon eacutechange de AL et BLPOP AL de telle sorte que le max soit dans AL
saut PUSH AL reacutesultat dans la pilePUSH CL adresse de retour dans la pileRET deacutepile ladresse de retour
Le programme apparaicirct plus complexe Mais il faut noter que dans les langages dassemblage reacuteels on peut acceacuteder aux valeurs de la pile sans deacutepiler ce qui simplifie le deacutebut et la fin du SSP
ad retourdonneacutee 2donneacutee 1
reacutesultat
pile apregraves le CALL
pile apregraves le RET
3
Exemples de langages drsquoassemblage reacuteels
4
Lien avec les langages eacutevolueacutes (C C++ COBOL hellip)
Il existe aussi des langages interpreacuteteacutes ndash traduction et exeacutecution immeacutediate des instructions (ex javascript PHP) - et semi compileacutes-semi interpreacuteteacutes (Java)
5
La machine simuleacutee (sms32v50)
Meacutemoire centrale 256 mots de 1 octetAdresses de 0 agrave 255 noteacutee [00] agrave [FF] en hexadeacutecimalLes [ ] distinguent les adresses des constantesEX 1F est la constante 31 alors que [1F] est le mot drsquoadresse 31
Pas un accumulateur mais 4 registres drsquoun octet utilisables indiffeacuteremment et noteacutes AL BL CL DLLe compteur ordinal est initialiseacute agrave 0Les mots peuvent contenir des entiers entre -128 et +127 en compleacutement agrave 2 ou des codes ASCII
6
7
Les instructions de la machine simuleacutee
1 Instruction de transfert (meacutemoire vers registre ou registre vers meacutemoire)
MOV destination source
La source est recopieacutee dans la destination (attention a lordre )Les seules formes autoriseacutees sont les suivantes
MOV AL 1B range 1B (hexa) dans ALMOV BL [C2] copie le mot dadresse C2 dans BLMOV [15] CL copie le registre CL dans le mot dadresse 15
Les transferts de meacutemoire agrave meacutemoire sont interdits car il faudrait 2 adresses meacutemoire pour une seule instruction (cf chapitre sur lUAL)
Les transferts entre registres sont aussi interdits Il faut passer par un mot meacutemoire intermeacutediaire ou par la pile La pile est une zone de meacutemoire ou lon empile et deacutepile des valeurs PUSH AL empile la valeur de AL au sommet de la pilePOP BL deacutepile la valeur et la range dans BL
8
AL BL
12
12
PUSH AL
POP BL
12
Pile
9
2 Instructions de calcul
Il sagit de laddition de la soustraction de la multiplication de la division entiegravere du reste de la division entiegravere ou modulo de lincreacutementation de 1 de la deacutecreacutementation de 1 Elles utilisent des registres et rangent leur reacutesultat dans le premier registre
ADD AL BL AL = AL + BLSUB BL CL BL = BL - CLMUL CL DL CL = CL DLDIV DL AL DL = DL=ALMOD AL BL AL = AL mod BLINC DL DL = DL + 1DEC AL AL = AL 1048576 1
Dans les 5 instructions agrave 2 opeacuterandes lopeacuterande de droite peut aussi ecirctre une constante hexadeacutecimale
10
3 Instructions de comparaison
CMP destination source
Compare la source et la destination soustrait la source agrave la destination et met 1 dans le laquo flag raquo (drapeau) zero (Z) si le reacutesultat est nul et 1 dans le laquo flag raquo sign (S) si le reacutesultat est neacutegatif
CMP AL BL met Z a 1 si AL = BL
met S a 1 si AL lt BL
CMP BL13 met Z a 1 si BL = 13
met S a 1 si BL lt 13
CMP CL [20] met Z a 1 si CL = [20]
met S a 1 si CL lt [20]
11
4 Instructions de branchement inconditionnel
JMP eacutetiquette de destination
Llsquoeacutetiquette vers laquelle se fait le saut occupe une ligne du programme assembleur mais ne prend pas de place en meacutemoire Elle repreacutesente une certaine adresse
JMP FINhelliphellip
FIN (ne pas oublier les )hellip
hellip
Change la valeur du compteur ordinal (IP Instruction pointer)
12
5 Instructions de branchement conditionnel
Suit une instruction de comparaison (CMP) et reacutealise le saut en fonction des drapeaux cest-agrave-dire du reacutesultat de la comparaison Sinon passe agrave linstruction suivante
JZ LABAS saute agrave LABAS si le flag Z est agrave 1JNZ PLACE saute agrave place si le flag Z est agrave 0JS RET saute agrave RET si le flag S est agrave 1 JNS START saute agrave START si le flag S est agrave 0
En jouant sur lordre des registres on peut reacutealiser toutes les comparaisons (gt lt gt= lt= = =) comme nous le deacutetaillerons dans la suite
13
6 Instructions diverses
END fin du programme (une seule sur la derniegravere ligne)
HALT arrecirct de lexeacutecution (eacuteventuellement plusieurs)DB constante deacutefinit une donneacutee (laquo Define Byte raquo)
14
JMP debut occupe les mots 0 et 1 DB 5 mot 2 (donneacutee 1)DB 2 mot 3 (donneacutee 2)DB 0 mot 4 (reacutesultat)
debutMOV AL [2] premiegravere instruction du programmeMOV BL [3]ADD AL BL reacutesultat dans ALMOV [4] ALEND les mots dadresse 2 et 3 ont eacuteteacutes
additionneacutes et le reacutesultat rangeacute dans le mot 4
Exemple de programme
Nous prenons lhabitude de placer les donneacutees en deacutebut de meacutemoire avec un JMP qui les saute pour aller au deacutebut du programme (car le compteur ordinal est initialiseacute agrave 0) En effet si on place les donneacutees apregraves le programme on ne peut connaicirctre leurs adresses quapregraves avoir eacutecrit tout le programme ce qui nest guegravere pratique
Zone des donneacutees etreacutesultats
15
Les conditionnelles
si condition alors cas_vrai
sinon cas_faux
fsi
ougrave condition slsquoeacutecrit op1 opeacuterateur op2 avec gt lt gt= lt= = = comme opeacuterateurs
En assembleur il ny a pas dinstruction conditionnelle si alors sinon Il faut la construire avec des branchements conditionnels et inconditionnels Le scheacutema de traduction standard utiliseacute par les compilateurs pour traduire les conditionnelles en langage machine est le suivant
16
MOV AL op1 MOV BL op2 ou autres registres
CMP AL BL ou BL ALJ vrai instructions du cas_fauxJMP fin
vrai instruction du cas_vrai
finougrave J est un des branchements possibles (JZ JNZ JS ou JNS) en fonction de la condition
condition traduction explicationop1 = op2 CMP AL BL puis JZ op1-op2 = 0op1 = op2 CMP AL BL puis JNZ op1-op2 = 0op1 lt op2 CMP AL BL puis JS op1-op2 lt 0op1 gt op2 CMP BL AL puis JS op2-op1 lt 0op1 gt= op2 CMP AL BL puis JNS op1-op2 gt= 0op1 lt= op2 CMP BL AL puis JNS op2-op1 gt= 0
17
Cas particulier du si sans sinon
si condition alors
cas_vrai
fsiLe scheacutema geacuteneacuteral est inutilement compliqueacute car cas_faux est vide Il est preacutefeacuterable de prendre la neacutegation de la condition et de sauter agrave lrsquoeacutetiquette fin si cette neacutegation est vraie (autrement dit laquo si la conditionest fausse alors je ne fais rien raquo)
Le scheacutema de traduction est le suivant MOV AL op1 MOV BL op2 ou autres registres CMP AL BL ou BL AL J fin instructions_du_cas_vraifin ougrave le choix de J et lrsquoordre des opeacuterandes est donneacutee par le tableau preacuteceacutedent pour la neacutegation de la condition
18
Les iteacuterations (avec compteur ndash pour)
pour i de 1 agrave limite fairebloc_agrave_reacutepeacuteter
fpour
Lrsquoiteacuteration se traduit comme suit
MOV registre1 1 compteur iMOV registre2 limite
reCMP registre2 registre1JS fin limite-compteurlt0 cest agrave dire
compteurgtlimitebloc_agrave_reacutepeacuteterINC registre1 increacutementation de iJMP re
fin
19
Parcours drsquoun ensemble de donneacutees conseacutecutives lrsquoadressage indirect
Si on veut parcourir et traiter un ensemble de donneacutees conseacutecutives en meacutemoire (un tableau de donneacutees) il faut pouvoir deacutesigner successivement tous les eacuteleacutements de cet ensemble dans une iteacuteration Avec laquo lrsquoadressage direct raquo qui donne directement lrsquoadresse du mot voulu (ex [3]) ce nrsquoest pas possible On ne peut qursquoeacutecrire ADD AL [3]ADD AL [4]ADD AL [5] etcLrsquoassembleur offre laquo lrsquoadressage indirect raquo pour reacutesoudre ce problegraveme On utilise la notation [AL] qui signifie laquo le contenu du mot dont ladresse est dans le registre AL raquo Il suffit de mettre dans AL la premiegravere adresse voulue puis dincreacutementer AL de 1 en 1 dans une iteacuteration pour acceacuteder gracircce agrave la notation [AL] successivement agrave toutes les donneacutees de lensemble
20
Cest un des 5 modes dadressage classiques en assembleur - lrsquoadressage immeacutediat 8 (constante 8)- lrsquoadressage direct [8] (mot meacutemoire dadresse 8)- lrsquoadressage indirect [AL] (le registre AL contient ladresse voulue)- lrsquoadressage baseacute [AL+4] (le contenu de AL + 4 est ladresse voulue) Nexiste pas dans la machine simuleacutee- lrsquoadressage indexeacute [AL+BL] (le contenu de AL + le contenu de BL est lrsquoadresse voulue) Nexiste pas dans la machine simuleacutee
Attention dans la machine simuleacutee ladressage indirect nest autoriseacute que dans les instructions MOV ce qui est tregraves restrictif Ex
MOV DL [AL] Copie le mot [AL] dans DLMOV [CL] AL Copie AL dans le mot [CL]
21
Les entreacuteessorties de base srsquoeffectuent via des ports Les ports sont des adresses speacuteciales associeacutees aux peacuteripheacuteriques drsquoentreacuteesortie et repeacutereacutees par des numeacuteros Un octet peut ecirctre lu ou eacutecrit dans ces ports gracircce aux instructions IN et OUT qui utilisent le registre AL
IN 00 entreacutee depuis le port 00 vers ALOUT 01 sortie depuis AL vers le port 01
Dans le simulateur le port de sortie 01 est connecteacute agrave 2 feux tricolores selon la valeur de loctet transmis dans AL ces 2 feux srsquoallument dune certaine maniegravere bits 7 6 5 4 3 2 1 0 rouge orange vert rouge orange vert non utiliseacutes feu de gauche feu de droiteLe port dentreacutee 00 est connecteacute au clavier Le registre AL reccediloit le code ASCII de la touche du clavier enfonceacutee
Les entreacuteessorties
22
Cette forme drsquoentreacuteesortie sans condition correspond aux peacuteripheacuteriques qui sont toujours disponibles comme les interrupteurs les voyants lumineux Dans le cas de peacuteripheacuteriques plus complexes il faut recourir aux entreacuteessorties avec condition il faut connaicirctre lrsquoeacutetat du peacuteripheacuterique avant denvoyer ou de lire des informations (ex reacuteseau disque ) Comme nous lrsquoavons vu dans la partie sur le mateacuteriel il existe deux approches principales lrsquoattente active et les entreacuteessorties avec interruptions
23
Les manipulations de bits
1) Deacutecalage et rotations Ces opeacuterations deacutecalent vers la gauche ou vers la droite les bits
drsquoun registre Elles peuvent ecirctre utiliseacutees pour tester un bit quelconque (on le deacutecale tout agrave droite on annule les autres bits et on teste le mot) ou encore pour diviser ou multiplier rapidement un entier par une puissance de 2
SHL CLDeacutecalage agrave gauche le bit de poids fort est perdule bit de poids faible devient 0 (SHift Left)
SHR DL Deacutecalage agrave droite le bit de poids faible est perdu le bit de poids fort devient 0 (SHift Right)
ROL AL Rotation agrave gauche le bit de poids fort devient le bit de poids faible (ROtate Left)
ROR BL Rotation agrave droite le bit de poids faible devient le bit de poids fort (ROtate Right)
24
2) Les instructions logiquesLes instructions logiques effectuent des opeacuterations logiques bit agrave bit (chaque bit est calculeacute indeacutependamment des autres) ET OU et OU exclusif 0 0 1 1 0 0 1 1 0 0 1 1 OU 0 1 0 1 ET 0 1 0 1 OU EX 0 1 0 1 0 1 1 1 0 0 0 1 0 1 1 0a) Linstruction OR OR AL BL AL = AL OU BL OR est souvent utiliseacute pour forcer certains bits agrave 1 gracircce agrave un laquo masque raquo ayant des 1 agrave ces positions Exemple
MOV BL F0 masque BL 11110000MOV AL 55 AL 01010101OR AL BL 11110101
Les 4ers bits de AL sont forceacutes agrave 1 les 4 autres sont inchangeacutesb) Linstruction AND AND AL BL AL = AL ET BL AND est souvent utiliseacute pour forcer certains bits agrave 0 gracircce agrave un laquo masque raquo ayant des 0 agrave ces positions
25
Exemple MOV BL 0F masque BL 00001111MOV AL 55 AL 01010101AND AL BL 00000101
Les 4ers bits de AL sont forceacutes agrave 0 les 4 autres sont inchangeacutesc) Linstruction XOR XOR AL BL AL = AL OU EXCLUSIF BL XOR est souvent utiliseacute pour inverser certains bits gracircce agrave un laquo masque raquo ayant des 1 agrave ces positions
Exemple MOV BL F0 masque BL 11110000MOV AL 55 AL 01010101XOR AL BL 10100101Les 4ers bits de AL sont inverseacutes les 4 autres sont inchangeacutes
Remarque on na pas besoin de recourir agrave lassembleur pour manipuler des bits ces opeacuterateurs existent dans beaucoup de langages eacutevolueacutes comme Java En Java SHL slsquoeacutecrit gtgt SHR slsquoeacutecrit ltlt OR slsquoeacutecrit j AND slsquoeacutecrit amp et XOR slsquoeacutecrit ^ Exemple short i = 13 i a la valeur 0000000000001101 i = i ltlt 2 i prend la valeur 0000000000110100
26
Les sous programmes (SSP)
Un SSP est une suite dinstructions effectuant un certain traitement et regroupeacutees par commoditeacute deacutecoupage du programme en petits lsquomorceauxrsquo morceau utiliseacute plusieurs fois hellipUn SSP est repeacutereacute par ladresse de sa premiegravere instruction Lexeacutecution du SSP est deacuteclencheacutee par un programme appelant Un SSP peut lui mecircme en appeler un autre et ainsi de suiteLappel du SSP est effectueacute par linstruction CALL
CALL adresse (ex CALL 50)Lexeacutecution se poursuit agrave ladresse indiqueacutee dans le CALL La fin du SSP est marqueacutee par linstruction
RETLe processeur revient implicitement agrave linstruction placeacutee immeacutediatement apregraves le CALL car lrsquoadresse de retour est empileacutee
27
Ladresse de retour utiliseacutee par RET est ajouteacutee sur la pile par linstruction CALL Lorsque le processeur exeacutecute linstruction RET il deacutepile ladresse de la pile et la range dans le compteur ordinalCe meacutecanisme marche mecircme dans le cas des appels imbriqueacutes (un CALL dans un SSP vers un autre SSP) et dans le cas des appels reacutecursifs (un SSP qui sappelle lui mecircme un certain nombre de fois)
CALL 40
CALL 90
RET
RET
0
40
904546
1213
13
4613
13
pile
4613
28
Le plus souvent le SSP effectue un traitement sur des donneacutees (ou paramegravetres) qui sont fournies par le programme appelant et produit un reacutesultat qui est retourneacute agrave ce programmePlusieurs strateacutegies pour passer les paramegravetres a) passage par les registresLes valeurs des paramegravetres et du reacutesultat sont contenues dans des registres bien deacutefinis Meacutethode simple qui ne convient que si le nombre de paramegravetres est faible car il y a peu de registresEx le SSP agrave ladresse hexadeacutecimale 30 calcule le maximum de 2 entiers naturels On convient que les entiers sont passeacutes par les registres AL et BL et que le reacutesultat est placeacute dans le registre AL Lappel slsquoeacutecrit
MOV AL donneacutee1MOV BL donneacutee2CALL 30 le reacutesultat est disponible dans AL
29
Le SSP slsquoeacutecrit ORG 30 directive qui indique que le code qui suit est
situeacute agrave ladresse 30 Ne prend pas de place en meacutemoire
CMP AL BLJNS saut si AL gt= BL (AL-BL gt= 0)PUSH BL sinon eacutechange de AL et BLPOP AL de telle sorte max soit dans AL
saut RET
b) passage par la pileLes valeurs des paramegravetres sont empileacutees Il peut y en avoir un nombre quelconque Le SSP reacutecupegravere les valeurs dans la pileEx le SSP agrave ladresse 40 utilise la pile pour passer les paramegravetres et reccediloit le reacutesultat dans la pile Lappel slsquoeacutecrit
PUSH AX donneacutee1 preacutealablement rangeacutee dans AXPUSH BX donneacutee2 preacutealablement rangeacutee dans BXCALL 40POP AX reacutecupeacuteration du reacutesultat dans AX par exemple
30
Le SSP peut slsquoeacutecrire ORG 40POP CL adresse de retour empileacutee par le CALLPOP BL deuxiegraveme paramegravetrePOP AL premier paramegravetreCMP BL ALJNS saut si AL gt= BLPUSH BL sinon eacutechange de AL et BLPOP AL de telle sorte que le max soit dans AL
saut PUSH AL reacutesultat dans la pilePUSH CL adresse de retour dans la pileRET deacutepile ladresse de retour
Le programme apparaicirct plus complexe Mais il faut noter que dans les langages dassemblage reacuteels on peut acceacuteder aux valeurs de la pile sans deacutepiler ce qui simplifie le deacutebut et la fin du SSP
ad retourdonneacutee 2donneacutee 1
reacutesultat
pile apregraves le CALL
pile apregraves le RET
4
Lien avec les langages eacutevolueacutes (C C++ COBOL hellip)
Il existe aussi des langages interpreacuteteacutes ndash traduction et exeacutecution immeacutediate des instructions (ex javascript PHP) - et semi compileacutes-semi interpreacuteteacutes (Java)
5
La machine simuleacutee (sms32v50)
Meacutemoire centrale 256 mots de 1 octetAdresses de 0 agrave 255 noteacutee [00] agrave [FF] en hexadeacutecimalLes [ ] distinguent les adresses des constantesEX 1F est la constante 31 alors que [1F] est le mot drsquoadresse 31
Pas un accumulateur mais 4 registres drsquoun octet utilisables indiffeacuteremment et noteacutes AL BL CL DLLe compteur ordinal est initialiseacute agrave 0Les mots peuvent contenir des entiers entre -128 et +127 en compleacutement agrave 2 ou des codes ASCII
6
7
Les instructions de la machine simuleacutee
1 Instruction de transfert (meacutemoire vers registre ou registre vers meacutemoire)
MOV destination source
La source est recopieacutee dans la destination (attention a lordre )Les seules formes autoriseacutees sont les suivantes
MOV AL 1B range 1B (hexa) dans ALMOV BL [C2] copie le mot dadresse C2 dans BLMOV [15] CL copie le registre CL dans le mot dadresse 15
Les transferts de meacutemoire agrave meacutemoire sont interdits car il faudrait 2 adresses meacutemoire pour une seule instruction (cf chapitre sur lUAL)
Les transferts entre registres sont aussi interdits Il faut passer par un mot meacutemoire intermeacutediaire ou par la pile La pile est une zone de meacutemoire ou lon empile et deacutepile des valeurs PUSH AL empile la valeur de AL au sommet de la pilePOP BL deacutepile la valeur et la range dans BL
8
AL BL
12
12
PUSH AL
POP BL
12
Pile
9
2 Instructions de calcul
Il sagit de laddition de la soustraction de la multiplication de la division entiegravere du reste de la division entiegravere ou modulo de lincreacutementation de 1 de la deacutecreacutementation de 1 Elles utilisent des registres et rangent leur reacutesultat dans le premier registre
ADD AL BL AL = AL + BLSUB BL CL BL = BL - CLMUL CL DL CL = CL DLDIV DL AL DL = DL=ALMOD AL BL AL = AL mod BLINC DL DL = DL + 1DEC AL AL = AL 1048576 1
Dans les 5 instructions agrave 2 opeacuterandes lopeacuterande de droite peut aussi ecirctre une constante hexadeacutecimale
10
3 Instructions de comparaison
CMP destination source
Compare la source et la destination soustrait la source agrave la destination et met 1 dans le laquo flag raquo (drapeau) zero (Z) si le reacutesultat est nul et 1 dans le laquo flag raquo sign (S) si le reacutesultat est neacutegatif
CMP AL BL met Z a 1 si AL = BL
met S a 1 si AL lt BL
CMP BL13 met Z a 1 si BL = 13
met S a 1 si BL lt 13
CMP CL [20] met Z a 1 si CL = [20]
met S a 1 si CL lt [20]
11
4 Instructions de branchement inconditionnel
JMP eacutetiquette de destination
Llsquoeacutetiquette vers laquelle se fait le saut occupe une ligne du programme assembleur mais ne prend pas de place en meacutemoire Elle repreacutesente une certaine adresse
JMP FINhelliphellip
FIN (ne pas oublier les )hellip
hellip
Change la valeur du compteur ordinal (IP Instruction pointer)
12
5 Instructions de branchement conditionnel
Suit une instruction de comparaison (CMP) et reacutealise le saut en fonction des drapeaux cest-agrave-dire du reacutesultat de la comparaison Sinon passe agrave linstruction suivante
JZ LABAS saute agrave LABAS si le flag Z est agrave 1JNZ PLACE saute agrave place si le flag Z est agrave 0JS RET saute agrave RET si le flag S est agrave 1 JNS START saute agrave START si le flag S est agrave 0
En jouant sur lordre des registres on peut reacutealiser toutes les comparaisons (gt lt gt= lt= = =) comme nous le deacutetaillerons dans la suite
13
6 Instructions diverses
END fin du programme (une seule sur la derniegravere ligne)
HALT arrecirct de lexeacutecution (eacuteventuellement plusieurs)DB constante deacutefinit une donneacutee (laquo Define Byte raquo)
14
JMP debut occupe les mots 0 et 1 DB 5 mot 2 (donneacutee 1)DB 2 mot 3 (donneacutee 2)DB 0 mot 4 (reacutesultat)
debutMOV AL [2] premiegravere instruction du programmeMOV BL [3]ADD AL BL reacutesultat dans ALMOV [4] ALEND les mots dadresse 2 et 3 ont eacuteteacutes
additionneacutes et le reacutesultat rangeacute dans le mot 4
Exemple de programme
Nous prenons lhabitude de placer les donneacutees en deacutebut de meacutemoire avec un JMP qui les saute pour aller au deacutebut du programme (car le compteur ordinal est initialiseacute agrave 0) En effet si on place les donneacutees apregraves le programme on ne peut connaicirctre leurs adresses quapregraves avoir eacutecrit tout le programme ce qui nest guegravere pratique
Zone des donneacutees etreacutesultats
15
Les conditionnelles
si condition alors cas_vrai
sinon cas_faux
fsi
ougrave condition slsquoeacutecrit op1 opeacuterateur op2 avec gt lt gt= lt= = = comme opeacuterateurs
En assembleur il ny a pas dinstruction conditionnelle si alors sinon Il faut la construire avec des branchements conditionnels et inconditionnels Le scheacutema de traduction standard utiliseacute par les compilateurs pour traduire les conditionnelles en langage machine est le suivant
16
MOV AL op1 MOV BL op2 ou autres registres
CMP AL BL ou BL ALJ vrai instructions du cas_fauxJMP fin
vrai instruction du cas_vrai
finougrave J est un des branchements possibles (JZ JNZ JS ou JNS) en fonction de la condition
condition traduction explicationop1 = op2 CMP AL BL puis JZ op1-op2 = 0op1 = op2 CMP AL BL puis JNZ op1-op2 = 0op1 lt op2 CMP AL BL puis JS op1-op2 lt 0op1 gt op2 CMP BL AL puis JS op2-op1 lt 0op1 gt= op2 CMP AL BL puis JNS op1-op2 gt= 0op1 lt= op2 CMP BL AL puis JNS op2-op1 gt= 0
17
Cas particulier du si sans sinon
si condition alors
cas_vrai
fsiLe scheacutema geacuteneacuteral est inutilement compliqueacute car cas_faux est vide Il est preacutefeacuterable de prendre la neacutegation de la condition et de sauter agrave lrsquoeacutetiquette fin si cette neacutegation est vraie (autrement dit laquo si la conditionest fausse alors je ne fais rien raquo)
Le scheacutema de traduction est le suivant MOV AL op1 MOV BL op2 ou autres registres CMP AL BL ou BL AL J fin instructions_du_cas_vraifin ougrave le choix de J et lrsquoordre des opeacuterandes est donneacutee par le tableau preacuteceacutedent pour la neacutegation de la condition
18
Les iteacuterations (avec compteur ndash pour)
pour i de 1 agrave limite fairebloc_agrave_reacutepeacuteter
fpour
Lrsquoiteacuteration se traduit comme suit
MOV registre1 1 compteur iMOV registre2 limite
reCMP registre2 registre1JS fin limite-compteurlt0 cest agrave dire
compteurgtlimitebloc_agrave_reacutepeacuteterINC registre1 increacutementation de iJMP re
fin
19
Parcours drsquoun ensemble de donneacutees conseacutecutives lrsquoadressage indirect
Si on veut parcourir et traiter un ensemble de donneacutees conseacutecutives en meacutemoire (un tableau de donneacutees) il faut pouvoir deacutesigner successivement tous les eacuteleacutements de cet ensemble dans une iteacuteration Avec laquo lrsquoadressage direct raquo qui donne directement lrsquoadresse du mot voulu (ex [3]) ce nrsquoest pas possible On ne peut qursquoeacutecrire ADD AL [3]ADD AL [4]ADD AL [5] etcLrsquoassembleur offre laquo lrsquoadressage indirect raquo pour reacutesoudre ce problegraveme On utilise la notation [AL] qui signifie laquo le contenu du mot dont ladresse est dans le registre AL raquo Il suffit de mettre dans AL la premiegravere adresse voulue puis dincreacutementer AL de 1 en 1 dans une iteacuteration pour acceacuteder gracircce agrave la notation [AL] successivement agrave toutes les donneacutees de lensemble
20
Cest un des 5 modes dadressage classiques en assembleur - lrsquoadressage immeacutediat 8 (constante 8)- lrsquoadressage direct [8] (mot meacutemoire dadresse 8)- lrsquoadressage indirect [AL] (le registre AL contient ladresse voulue)- lrsquoadressage baseacute [AL+4] (le contenu de AL + 4 est ladresse voulue) Nexiste pas dans la machine simuleacutee- lrsquoadressage indexeacute [AL+BL] (le contenu de AL + le contenu de BL est lrsquoadresse voulue) Nexiste pas dans la machine simuleacutee
Attention dans la machine simuleacutee ladressage indirect nest autoriseacute que dans les instructions MOV ce qui est tregraves restrictif Ex
MOV DL [AL] Copie le mot [AL] dans DLMOV [CL] AL Copie AL dans le mot [CL]
21
Les entreacuteessorties de base srsquoeffectuent via des ports Les ports sont des adresses speacuteciales associeacutees aux peacuteripheacuteriques drsquoentreacuteesortie et repeacutereacutees par des numeacuteros Un octet peut ecirctre lu ou eacutecrit dans ces ports gracircce aux instructions IN et OUT qui utilisent le registre AL
IN 00 entreacutee depuis le port 00 vers ALOUT 01 sortie depuis AL vers le port 01
Dans le simulateur le port de sortie 01 est connecteacute agrave 2 feux tricolores selon la valeur de loctet transmis dans AL ces 2 feux srsquoallument dune certaine maniegravere bits 7 6 5 4 3 2 1 0 rouge orange vert rouge orange vert non utiliseacutes feu de gauche feu de droiteLe port dentreacutee 00 est connecteacute au clavier Le registre AL reccediloit le code ASCII de la touche du clavier enfonceacutee
Les entreacuteessorties
22
Cette forme drsquoentreacuteesortie sans condition correspond aux peacuteripheacuteriques qui sont toujours disponibles comme les interrupteurs les voyants lumineux Dans le cas de peacuteripheacuteriques plus complexes il faut recourir aux entreacuteessorties avec condition il faut connaicirctre lrsquoeacutetat du peacuteripheacuterique avant denvoyer ou de lire des informations (ex reacuteseau disque ) Comme nous lrsquoavons vu dans la partie sur le mateacuteriel il existe deux approches principales lrsquoattente active et les entreacuteessorties avec interruptions
23
Les manipulations de bits
1) Deacutecalage et rotations Ces opeacuterations deacutecalent vers la gauche ou vers la droite les bits
drsquoun registre Elles peuvent ecirctre utiliseacutees pour tester un bit quelconque (on le deacutecale tout agrave droite on annule les autres bits et on teste le mot) ou encore pour diviser ou multiplier rapidement un entier par une puissance de 2
SHL CLDeacutecalage agrave gauche le bit de poids fort est perdule bit de poids faible devient 0 (SHift Left)
SHR DL Deacutecalage agrave droite le bit de poids faible est perdu le bit de poids fort devient 0 (SHift Right)
ROL AL Rotation agrave gauche le bit de poids fort devient le bit de poids faible (ROtate Left)
ROR BL Rotation agrave droite le bit de poids faible devient le bit de poids fort (ROtate Right)
24
2) Les instructions logiquesLes instructions logiques effectuent des opeacuterations logiques bit agrave bit (chaque bit est calculeacute indeacutependamment des autres) ET OU et OU exclusif 0 0 1 1 0 0 1 1 0 0 1 1 OU 0 1 0 1 ET 0 1 0 1 OU EX 0 1 0 1 0 1 1 1 0 0 0 1 0 1 1 0a) Linstruction OR OR AL BL AL = AL OU BL OR est souvent utiliseacute pour forcer certains bits agrave 1 gracircce agrave un laquo masque raquo ayant des 1 agrave ces positions Exemple
MOV BL F0 masque BL 11110000MOV AL 55 AL 01010101OR AL BL 11110101
Les 4ers bits de AL sont forceacutes agrave 1 les 4 autres sont inchangeacutesb) Linstruction AND AND AL BL AL = AL ET BL AND est souvent utiliseacute pour forcer certains bits agrave 0 gracircce agrave un laquo masque raquo ayant des 0 agrave ces positions
25
Exemple MOV BL 0F masque BL 00001111MOV AL 55 AL 01010101AND AL BL 00000101
Les 4ers bits de AL sont forceacutes agrave 0 les 4 autres sont inchangeacutesc) Linstruction XOR XOR AL BL AL = AL OU EXCLUSIF BL XOR est souvent utiliseacute pour inverser certains bits gracircce agrave un laquo masque raquo ayant des 1 agrave ces positions
Exemple MOV BL F0 masque BL 11110000MOV AL 55 AL 01010101XOR AL BL 10100101Les 4ers bits de AL sont inverseacutes les 4 autres sont inchangeacutes
Remarque on na pas besoin de recourir agrave lassembleur pour manipuler des bits ces opeacuterateurs existent dans beaucoup de langages eacutevolueacutes comme Java En Java SHL slsquoeacutecrit gtgt SHR slsquoeacutecrit ltlt OR slsquoeacutecrit j AND slsquoeacutecrit amp et XOR slsquoeacutecrit ^ Exemple short i = 13 i a la valeur 0000000000001101 i = i ltlt 2 i prend la valeur 0000000000110100
26
Les sous programmes (SSP)
Un SSP est une suite dinstructions effectuant un certain traitement et regroupeacutees par commoditeacute deacutecoupage du programme en petits lsquomorceauxrsquo morceau utiliseacute plusieurs fois hellipUn SSP est repeacutereacute par ladresse de sa premiegravere instruction Lexeacutecution du SSP est deacuteclencheacutee par un programme appelant Un SSP peut lui mecircme en appeler un autre et ainsi de suiteLappel du SSP est effectueacute par linstruction CALL
CALL adresse (ex CALL 50)Lexeacutecution se poursuit agrave ladresse indiqueacutee dans le CALL La fin du SSP est marqueacutee par linstruction
RETLe processeur revient implicitement agrave linstruction placeacutee immeacutediatement apregraves le CALL car lrsquoadresse de retour est empileacutee
27
Ladresse de retour utiliseacutee par RET est ajouteacutee sur la pile par linstruction CALL Lorsque le processeur exeacutecute linstruction RET il deacutepile ladresse de la pile et la range dans le compteur ordinalCe meacutecanisme marche mecircme dans le cas des appels imbriqueacutes (un CALL dans un SSP vers un autre SSP) et dans le cas des appels reacutecursifs (un SSP qui sappelle lui mecircme un certain nombre de fois)
CALL 40
CALL 90
RET
RET
0
40
904546
1213
13
4613
13
pile
4613
28
Le plus souvent le SSP effectue un traitement sur des donneacutees (ou paramegravetres) qui sont fournies par le programme appelant et produit un reacutesultat qui est retourneacute agrave ce programmePlusieurs strateacutegies pour passer les paramegravetres a) passage par les registresLes valeurs des paramegravetres et du reacutesultat sont contenues dans des registres bien deacutefinis Meacutethode simple qui ne convient que si le nombre de paramegravetres est faible car il y a peu de registresEx le SSP agrave ladresse hexadeacutecimale 30 calcule le maximum de 2 entiers naturels On convient que les entiers sont passeacutes par les registres AL et BL et que le reacutesultat est placeacute dans le registre AL Lappel slsquoeacutecrit
MOV AL donneacutee1MOV BL donneacutee2CALL 30 le reacutesultat est disponible dans AL
29
Le SSP slsquoeacutecrit ORG 30 directive qui indique que le code qui suit est
situeacute agrave ladresse 30 Ne prend pas de place en meacutemoire
CMP AL BLJNS saut si AL gt= BL (AL-BL gt= 0)PUSH BL sinon eacutechange de AL et BLPOP AL de telle sorte max soit dans AL
saut RET
b) passage par la pileLes valeurs des paramegravetres sont empileacutees Il peut y en avoir un nombre quelconque Le SSP reacutecupegravere les valeurs dans la pileEx le SSP agrave ladresse 40 utilise la pile pour passer les paramegravetres et reccediloit le reacutesultat dans la pile Lappel slsquoeacutecrit
PUSH AX donneacutee1 preacutealablement rangeacutee dans AXPUSH BX donneacutee2 preacutealablement rangeacutee dans BXCALL 40POP AX reacutecupeacuteration du reacutesultat dans AX par exemple
30
Le SSP peut slsquoeacutecrire ORG 40POP CL adresse de retour empileacutee par le CALLPOP BL deuxiegraveme paramegravetrePOP AL premier paramegravetreCMP BL ALJNS saut si AL gt= BLPUSH BL sinon eacutechange de AL et BLPOP AL de telle sorte que le max soit dans AL
saut PUSH AL reacutesultat dans la pilePUSH CL adresse de retour dans la pileRET deacutepile ladresse de retour
Le programme apparaicirct plus complexe Mais il faut noter que dans les langages dassemblage reacuteels on peut acceacuteder aux valeurs de la pile sans deacutepiler ce qui simplifie le deacutebut et la fin du SSP
ad retourdonneacutee 2donneacutee 1
reacutesultat
pile apregraves le CALL
pile apregraves le RET
5
La machine simuleacutee (sms32v50)
Meacutemoire centrale 256 mots de 1 octetAdresses de 0 agrave 255 noteacutee [00] agrave [FF] en hexadeacutecimalLes [ ] distinguent les adresses des constantesEX 1F est la constante 31 alors que [1F] est le mot drsquoadresse 31
Pas un accumulateur mais 4 registres drsquoun octet utilisables indiffeacuteremment et noteacutes AL BL CL DLLe compteur ordinal est initialiseacute agrave 0Les mots peuvent contenir des entiers entre -128 et +127 en compleacutement agrave 2 ou des codes ASCII
6
7
Les instructions de la machine simuleacutee
1 Instruction de transfert (meacutemoire vers registre ou registre vers meacutemoire)
MOV destination source
La source est recopieacutee dans la destination (attention a lordre )Les seules formes autoriseacutees sont les suivantes
MOV AL 1B range 1B (hexa) dans ALMOV BL [C2] copie le mot dadresse C2 dans BLMOV [15] CL copie le registre CL dans le mot dadresse 15
Les transferts de meacutemoire agrave meacutemoire sont interdits car il faudrait 2 adresses meacutemoire pour une seule instruction (cf chapitre sur lUAL)
Les transferts entre registres sont aussi interdits Il faut passer par un mot meacutemoire intermeacutediaire ou par la pile La pile est une zone de meacutemoire ou lon empile et deacutepile des valeurs PUSH AL empile la valeur de AL au sommet de la pilePOP BL deacutepile la valeur et la range dans BL
8
AL BL
12
12
PUSH AL
POP BL
12
Pile
9
2 Instructions de calcul
Il sagit de laddition de la soustraction de la multiplication de la division entiegravere du reste de la division entiegravere ou modulo de lincreacutementation de 1 de la deacutecreacutementation de 1 Elles utilisent des registres et rangent leur reacutesultat dans le premier registre
ADD AL BL AL = AL + BLSUB BL CL BL = BL - CLMUL CL DL CL = CL DLDIV DL AL DL = DL=ALMOD AL BL AL = AL mod BLINC DL DL = DL + 1DEC AL AL = AL 1048576 1
Dans les 5 instructions agrave 2 opeacuterandes lopeacuterande de droite peut aussi ecirctre une constante hexadeacutecimale
10
3 Instructions de comparaison
CMP destination source
Compare la source et la destination soustrait la source agrave la destination et met 1 dans le laquo flag raquo (drapeau) zero (Z) si le reacutesultat est nul et 1 dans le laquo flag raquo sign (S) si le reacutesultat est neacutegatif
CMP AL BL met Z a 1 si AL = BL
met S a 1 si AL lt BL
CMP BL13 met Z a 1 si BL = 13
met S a 1 si BL lt 13
CMP CL [20] met Z a 1 si CL = [20]
met S a 1 si CL lt [20]
11
4 Instructions de branchement inconditionnel
JMP eacutetiquette de destination
Llsquoeacutetiquette vers laquelle se fait le saut occupe une ligne du programme assembleur mais ne prend pas de place en meacutemoire Elle repreacutesente une certaine adresse
JMP FINhelliphellip
FIN (ne pas oublier les )hellip
hellip
Change la valeur du compteur ordinal (IP Instruction pointer)
12
5 Instructions de branchement conditionnel
Suit une instruction de comparaison (CMP) et reacutealise le saut en fonction des drapeaux cest-agrave-dire du reacutesultat de la comparaison Sinon passe agrave linstruction suivante
JZ LABAS saute agrave LABAS si le flag Z est agrave 1JNZ PLACE saute agrave place si le flag Z est agrave 0JS RET saute agrave RET si le flag S est agrave 1 JNS START saute agrave START si le flag S est agrave 0
En jouant sur lordre des registres on peut reacutealiser toutes les comparaisons (gt lt gt= lt= = =) comme nous le deacutetaillerons dans la suite
13
6 Instructions diverses
END fin du programme (une seule sur la derniegravere ligne)
HALT arrecirct de lexeacutecution (eacuteventuellement plusieurs)DB constante deacutefinit une donneacutee (laquo Define Byte raquo)
14
JMP debut occupe les mots 0 et 1 DB 5 mot 2 (donneacutee 1)DB 2 mot 3 (donneacutee 2)DB 0 mot 4 (reacutesultat)
debutMOV AL [2] premiegravere instruction du programmeMOV BL [3]ADD AL BL reacutesultat dans ALMOV [4] ALEND les mots dadresse 2 et 3 ont eacuteteacutes
additionneacutes et le reacutesultat rangeacute dans le mot 4
Exemple de programme
Nous prenons lhabitude de placer les donneacutees en deacutebut de meacutemoire avec un JMP qui les saute pour aller au deacutebut du programme (car le compteur ordinal est initialiseacute agrave 0) En effet si on place les donneacutees apregraves le programme on ne peut connaicirctre leurs adresses quapregraves avoir eacutecrit tout le programme ce qui nest guegravere pratique
Zone des donneacutees etreacutesultats
15
Les conditionnelles
si condition alors cas_vrai
sinon cas_faux
fsi
ougrave condition slsquoeacutecrit op1 opeacuterateur op2 avec gt lt gt= lt= = = comme opeacuterateurs
En assembleur il ny a pas dinstruction conditionnelle si alors sinon Il faut la construire avec des branchements conditionnels et inconditionnels Le scheacutema de traduction standard utiliseacute par les compilateurs pour traduire les conditionnelles en langage machine est le suivant
16
MOV AL op1 MOV BL op2 ou autres registres
CMP AL BL ou BL ALJ vrai instructions du cas_fauxJMP fin
vrai instruction du cas_vrai
finougrave J est un des branchements possibles (JZ JNZ JS ou JNS) en fonction de la condition
condition traduction explicationop1 = op2 CMP AL BL puis JZ op1-op2 = 0op1 = op2 CMP AL BL puis JNZ op1-op2 = 0op1 lt op2 CMP AL BL puis JS op1-op2 lt 0op1 gt op2 CMP BL AL puis JS op2-op1 lt 0op1 gt= op2 CMP AL BL puis JNS op1-op2 gt= 0op1 lt= op2 CMP BL AL puis JNS op2-op1 gt= 0
17
Cas particulier du si sans sinon
si condition alors
cas_vrai
fsiLe scheacutema geacuteneacuteral est inutilement compliqueacute car cas_faux est vide Il est preacutefeacuterable de prendre la neacutegation de la condition et de sauter agrave lrsquoeacutetiquette fin si cette neacutegation est vraie (autrement dit laquo si la conditionest fausse alors je ne fais rien raquo)
Le scheacutema de traduction est le suivant MOV AL op1 MOV BL op2 ou autres registres CMP AL BL ou BL AL J fin instructions_du_cas_vraifin ougrave le choix de J et lrsquoordre des opeacuterandes est donneacutee par le tableau preacuteceacutedent pour la neacutegation de la condition
18
Les iteacuterations (avec compteur ndash pour)
pour i de 1 agrave limite fairebloc_agrave_reacutepeacuteter
fpour
Lrsquoiteacuteration se traduit comme suit
MOV registre1 1 compteur iMOV registre2 limite
reCMP registre2 registre1JS fin limite-compteurlt0 cest agrave dire
compteurgtlimitebloc_agrave_reacutepeacuteterINC registre1 increacutementation de iJMP re
fin
19
Parcours drsquoun ensemble de donneacutees conseacutecutives lrsquoadressage indirect
Si on veut parcourir et traiter un ensemble de donneacutees conseacutecutives en meacutemoire (un tableau de donneacutees) il faut pouvoir deacutesigner successivement tous les eacuteleacutements de cet ensemble dans une iteacuteration Avec laquo lrsquoadressage direct raquo qui donne directement lrsquoadresse du mot voulu (ex [3]) ce nrsquoest pas possible On ne peut qursquoeacutecrire ADD AL [3]ADD AL [4]ADD AL [5] etcLrsquoassembleur offre laquo lrsquoadressage indirect raquo pour reacutesoudre ce problegraveme On utilise la notation [AL] qui signifie laquo le contenu du mot dont ladresse est dans le registre AL raquo Il suffit de mettre dans AL la premiegravere adresse voulue puis dincreacutementer AL de 1 en 1 dans une iteacuteration pour acceacuteder gracircce agrave la notation [AL] successivement agrave toutes les donneacutees de lensemble
20
Cest un des 5 modes dadressage classiques en assembleur - lrsquoadressage immeacutediat 8 (constante 8)- lrsquoadressage direct [8] (mot meacutemoire dadresse 8)- lrsquoadressage indirect [AL] (le registre AL contient ladresse voulue)- lrsquoadressage baseacute [AL+4] (le contenu de AL + 4 est ladresse voulue) Nexiste pas dans la machine simuleacutee- lrsquoadressage indexeacute [AL+BL] (le contenu de AL + le contenu de BL est lrsquoadresse voulue) Nexiste pas dans la machine simuleacutee
Attention dans la machine simuleacutee ladressage indirect nest autoriseacute que dans les instructions MOV ce qui est tregraves restrictif Ex
MOV DL [AL] Copie le mot [AL] dans DLMOV [CL] AL Copie AL dans le mot [CL]
21
Les entreacuteessorties de base srsquoeffectuent via des ports Les ports sont des adresses speacuteciales associeacutees aux peacuteripheacuteriques drsquoentreacuteesortie et repeacutereacutees par des numeacuteros Un octet peut ecirctre lu ou eacutecrit dans ces ports gracircce aux instructions IN et OUT qui utilisent le registre AL
IN 00 entreacutee depuis le port 00 vers ALOUT 01 sortie depuis AL vers le port 01
Dans le simulateur le port de sortie 01 est connecteacute agrave 2 feux tricolores selon la valeur de loctet transmis dans AL ces 2 feux srsquoallument dune certaine maniegravere bits 7 6 5 4 3 2 1 0 rouge orange vert rouge orange vert non utiliseacutes feu de gauche feu de droiteLe port dentreacutee 00 est connecteacute au clavier Le registre AL reccediloit le code ASCII de la touche du clavier enfonceacutee
Les entreacuteessorties
22
Cette forme drsquoentreacuteesortie sans condition correspond aux peacuteripheacuteriques qui sont toujours disponibles comme les interrupteurs les voyants lumineux Dans le cas de peacuteripheacuteriques plus complexes il faut recourir aux entreacuteessorties avec condition il faut connaicirctre lrsquoeacutetat du peacuteripheacuterique avant denvoyer ou de lire des informations (ex reacuteseau disque ) Comme nous lrsquoavons vu dans la partie sur le mateacuteriel il existe deux approches principales lrsquoattente active et les entreacuteessorties avec interruptions
23
Les manipulations de bits
1) Deacutecalage et rotations Ces opeacuterations deacutecalent vers la gauche ou vers la droite les bits
drsquoun registre Elles peuvent ecirctre utiliseacutees pour tester un bit quelconque (on le deacutecale tout agrave droite on annule les autres bits et on teste le mot) ou encore pour diviser ou multiplier rapidement un entier par une puissance de 2
SHL CLDeacutecalage agrave gauche le bit de poids fort est perdule bit de poids faible devient 0 (SHift Left)
SHR DL Deacutecalage agrave droite le bit de poids faible est perdu le bit de poids fort devient 0 (SHift Right)
ROL AL Rotation agrave gauche le bit de poids fort devient le bit de poids faible (ROtate Left)
ROR BL Rotation agrave droite le bit de poids faible devient le bit de poids fort (ROtate Right)
24
2) Les instructions logiquesLes instructions logiques effectuent des opeacuterations logiques bit agrave bit (chaque bit est calculeacute indeacutependamment des autres) ET OU et OU exclusif 0 0 1 1 0 0 1 1 0 0 1 1 OU 0 1 0 1 ET 0 1 0 1 OU EX 0 1 0 1 0 1 1 1 0 0 0 1 0 1 1 0a) Linstruction OR OR AL BL AL = AL OU BL OR est souvent utiliseacute pour forcer certains bits agrave 1 gracircce agrave un laquo masque raquo ayant des 1 agrave ces positions Exemple
MOV BL F0 masque BL 11110000MOV AL 55 AL 01010101OR AL BL 11110101
Les 4ers bits de AL sont forceacutes agrave 1 les 4 autres sont inchangeacutesb) Linstruction AND AND AL BL AL = AL ET BL AND est souvent utiliseacute pour forcer certains bits agrave 0 gracircce agrave un laquo masque raquo ayant des 0 agrave ces positions
25
Exemple MOV BL 0F masque BL 00001111MOV AL 55 AL 01010101AND AL BL 00000101
Les 4ers bits de AL sont forceacutes agrave 0 les 4 autres sont inchangeacutesc) Linstruction XOR XOR AL BL AL = AL OU EXCLUSIF BL XOR est souvent utiliseacute pour inverser certains bits gracircce agrave un laquo masque raquo ayant des 1 agrave ces positions
Exemple MOV BL F0 masque BL 11110000MOV AL 55 AL 01010101XOR AL BL 10100101Les 4ers bits de AL sont inverseacutes les 4 autres sont inchangeacutes
Remarque on na pas besoin de recourir agrave lassembleur pour manipuler des bits ces opeacuterateurs existent dans beaucoup de langages eacutevolueacutes comme Java En Java SHL slsquoeacutecrit gtgt SHR slsquoeacutecrit ltlt OR slsquoeacutecrit j AND slsquoeacutecrit amp et XOR slsquoeacutecrit ^ Exemple short i = 13 i a la valeur 0000000000001101 i = i ltlt 2 i prend la valeur 0000000000110100
26
Les sous programmes (SSP)
Un SSP est une suite dinstructions effectuant un certain traitement et regroupeacutees par commoditeacute deacutecoupage du programme en petits lsquomorceauxrsquo morceau utiliseacute plusieurs fois hellipUn SSP est repeacutereacute par ladresse de sa premiegravere instruction Lexeacutecution du SSP est deacuteclencheacutee par un programme appelant Un SSP peut lui mecircme en appeler un autre et ainsi de suiteLappel du SSP est effectueacute par linstruction CALL
CALL adresse (ex CALL 50)Lexeacutecution se poursuit agrave ladresse indiqueacutee dans le CALL La fin du SSP est marqueacutee par linstruction
RETLe processeur revient implicitement agrave linstruction placeacutee immeacutediatement apregraves le CALL car lrsquoadresse de retour est empileacutee
27
Ladresse de retour utiliseacutee par RET est ajouteacutee sur la pile par linstruction CALL Lorsque le processeur exeacutecute linstruction RET il deacutepile ladresse de la pile et la range dans le compteur ordinalCe meacutecanisme marche mecircme dans le cas des appels imbriqueacutes (un CALL dans un SSP vers un autre SSP) et dans le cas des appels reacutecursifs (un SSP qui sappelle lui mecircme un certain nombre de fois)
CALL 40
CALL 90
RET
RET
0
40
904546
1213
13
4613
13
pile
4613
28
Le plus souvent le SSP effectue un traitement sur des donneacutees (ou paramegravetres) qui sont fournies par le programme appelant et produit un reacutesultat qui est retourneacute agrave ce programmePlusieurs strateacutegies pour passer les paramegravetres a) passage par les registresLes valeurs des paramegravetres et du reacutesultat sont contenues dans des registres bien deacutefinis Meacutethode simple qui ne convient que si le nombre de paramegravetres est faible car il y a peu de registresEx le SSP agrave ladresse hexadeacutecimale 30 calcule le maximum de 2 entiers naturels On convient que les entiers sont passeacutes par les registres AL et BL et que le reacutesultat est placeacute dans le registre AL Lappel slsquoeacutecrit
MOV AL donneacutee1MOV BL donneacutee2CALL 30 le reacutesultat est disponible dans AL
29
Le SSP slsquoeacutecrit ORG 30 directive qui indique que le code qui suit est
situeacute agrave ladresse 30 Ne prend pas de place en meacutemoire
CMP AL BLJNS saut si AL gt= BL (AL-BL gt= 0)PUSH BL sinon eacutechange de AL et BLPOP AL de telle sorte max soit dans AL
saut RET
b) passage par la pileLes valeurs des paramegravetres sont empileacutees Il peut y en avoir un nombre quelconque Le SSP reacutecupegravere les valeurs dans la pileEx le SSP agrave ladresse 40 utilise la pile pour passer les paramegravetres et reccediloit le reacutesultat dans la pile Lappel slsquoeacutecrit
PUSH AX donneacutee1 preacutealablement rangeacutee dans AXPUSH BX donneacutee2 preacutealablement rangeacutee dans BXCALL 40POP AX reacutecupeacuteration du reacutesultat dans AX par exemple
30
Le SSP peut slsquoeacutecrire ORG 40POP CL adresse de retour empileacutee par le CALLPOP BL deuxiegraveme paramegravetrePOP AL premier paramegravetreCMP BL ALJNS saut si AL gt= BLPUSH BL sinon eacutechange de AL et BLPOP AL de telle sorte que le max soit dans AL
saut PUSH AL reacutesultat dans la pilePUSH CL adresse de retour dans la pileRET deacutepile ladresse de retour
Le programme apparaicirct plus complexe Mais il faut noter que dans les langages dassemblage reacuteels on peut acceacuteder aux valeurs de la pile sans deacutepiler ce qui simplifie le deacutebut et la fin du SSP
ad retourdonneacutee 2donneacutee 1
reacutesultat
pile apregraves le CALL
pile apregraves le RET
6
7
Les instructions de la machine simuleacutee
1 Instruction de transfert (meacutemoire vers registre ou registre vers meacutemoire)
MOV destination source
La source est recopieacutee dans la destination (attention a lordre )Les seules formes autoriseacutees sont les suivantes
MOV AL 1B range 1B (hexa) dans ALMOV BL [C2] copie le mot dadresse C2 dans BLMOV [15] CL copie le registre CL dans le mot dadresse 15
Les transferts de meacutemoire agrave meacutemoire sont interdits car il faudrait 2 adresses meacutemoire pour une seule instruction (cf chapitre sur lUAL)
Les transferts entre registres sont aussi interdits Il faut passer par un mot meacutemoire intermeacutediaire ou par la pile La pile est une zone de meacutemoire ou lon empile et deacutepile des valeurs PUSH AL empile la valeur de AL au sommet de la pilePOP BL deacutepile la valeur et la range dans BL
8
AL BL
12
12
PUSH AL
POP BL
12
Pile
9
2 Instructions de calcul
Il sagit de laddition de la soustraction de la multiplication de la division entiegravere du reste de la division entiegravere ou modulo de lincreacutementation de 1 de la deacutecreacutementation de 1 Elles utilisent des registres et rangent leur reacutesultat dans le premier registre
ADD AL BL AL = AL + BLSUB BL CL BL = BL - CLMUL CL DL CL = CL DLDIV DL AL DL = DL=ALMOD AL BL AL = AL mod BLINC DL DL = DL + 1DEC AL AL = AL 1048576 1
Dans les 5 instructions agrave 2 opeacuterandes lopeacuterande de droite peut aussi ecirctre une constante hexadeacutecimale
10
3 Instructions de comparaison
CMP destination source
Compare la source et la destination soustrait la source agrave la destination et met 1 dans le laquo flag raquo (drapeau) zero (Z) si le reacutesultat est nul et 1 dans le laquo flag raquo sign (S) si le reacutesultat est neacutegatif
CMP AL BL met Z a 1 si AL = BL
met S a 1 si AL lt BL
CMP BL13 met Z a 1 si BL = 13
met S a 1 si BL lt 13
CMP CL [20] met Z a 1 si CL = [20]
met S a 1 si CL lt [20]
11
4 Instructions de branchement inconditionnel
JMP eacutetiquette de destination
Llsquoeacutetiquette vers laquelle se fait le saut occupe une ligne du programme assembleur mais ne prend pas de place en meacutemoire Elle repreacutesente une certaine adresse
JMP FINhelliphellip
FIN (ne pas oublier les )hellip
hellip
Change la valeur du compteur ordinal (IP Instruction pointer)
12
5 Instructions de branchement conditionnel
Suit une instruction de comparaison (CMP) et reacutealise le saut en fonction des drapeaux cest-agrave-dire du reacutesultat de la comparaison Sinon passe agrave linstruction suivante
JZ LABAS saute agrave LABAS si le flag Z est agrave 1JNZ PLACE saute agrave place si le flag Z est agrave 0JS RET saute agrave RET si le flag S est agrave 1 JNS START saute agrave START si le flag S est agrave 0
En jouant sur lordre des registres on peut reacutealiser toutes les comparaisons (gt lt gt= lt= = =) comme nous le deacutetaillerons dans la suite
13
6 Instructions diverses
END fin du programme (une seule sur la derniegravere ligne)
HALT arrecirct de lexeacutecution (eacuteventuellement plusieurs)DB constante deacutefinit une donneacutee (laquo Define Byte raquo)
14
JMP debut occupe les mots 0 et 1 DB 5 mot 2 (donneacutee 1)DB 2 mot 3 (donneacutee 2)DB 0 mot 4 (reacutesultat)
debutMOV AL [2] premiegravere instruction du programmeMOV BL [3]ADD AL BL reacutesultat dans ALMOV [4] ALEND les mots dadresse 2 et 3 ont eacuteteacutes
additionneacutes et le reacutesultat rangeacute dans le mot 4
Exemple de programme
Nous prenons lhabitude de placer les donneacutees en deacutebut de meacutemoire avec un JMP qui les saute pour aller au deacutebut du programme (car le compteur ordinal est initialiseacute agrave 0) En effet si on place les donneacutees apregraves le programme on ne peut connaicirctre leurs adresses quapregraves avoir eacutecrit tout le programme ce qui nest guegravere pratique
Zone des donneacutees etreacutesultats
15
Les conditionnelles
si condition alors cas_vrai
sinon cas_faux
fsi
ougrave condition slsquoeacutecrit op1 opeacuterateur op2 avec gt lt gt= lt= = = comme opeacuterateurs
En assembleur il ny a pas dinstruction conditionnelle si alors sinon Il faut la construire avec des branchements conditionnels et inconditionnels Le scheacutema de traduction standard utiliseacute par les compilateurs pour traduire les conditionnelles en langage machine est le suivant
16
MOV AL op1 MOV BL op2 ou autres registres
CMP AL BL ou BL ALJ vrai instructions du cas_fauxJMP fin
vrai instruction du cas_vrai
finougrave J est un des branchements possibles (JZ JNZ JS ou JNS) en fonction de la condition
condition traduction explicationop1 = op2 CMP AL BL puis JZ op1-op2 = 0op1 = op2 CMP AL BL puis JNZ op1-op2 = 0op1 lt op2 CMP AL BL puis JS op1-op2 lt 0op1 gt op2 CMP BL AL puis JS op2-op1 lt 0op1 gt= op2 CMP AL BL puis JNS op1-op2 gt= 0op1 lt= op2 CMP BL AL puis JNS op2-op1 gt= 0
17
Cas particulier du si sans sinon
si condition alors
cas_vrai
fsiLe scheacutema geacuteneacuteral est inutilement compliqueacute car cas_faux est vide Il est preacutefeacuterable de prendre la neacutegation de la condition et de sauter agrave lrsquoeacutetiquette fin si cette neacutegation est vraie (autrement dit laquo si la conditionest fausse alors je ne fais rien raquo)
Le scheacutema de traduction est le suivant MOV AL op1 MOV BL op2 ou autres registres CMP AL BL ou BL AL J fin instructions_du_cas_vraifin ougrave le choix de J et lrsquoordre des opeacuterandes est donneacutee par le tableau preacuteceacutedent pour la neacutegation de la condition
18
Les iteacuterations (avec compteur ndash pour)
pour i de 1 agrave limite fairebloc_agrave_reacutepeacuteter
fpour
Lrsquoiteacuteration se traduit comme suit
MOV registre1 1 compteur iMOV registre2 limite
reCMP registre2 registre1JS fin limite-compteurlt0 cest agrave dire
compteurgtlimitebloc_agrave_reacutepeacuteterINC registre1 increacutementation de iJMP re
fin
19
Parcours drsquoun ensemble de donneacutees conseacutecutives lrsquoadressage indirect
Si on veut parcourir et traiter un ensemble de donneacutees conseacutecutives en meacutemoire (un tableau de donneacutees) il faut pouvoir deacutesigner successivement tous les eacuteleacutements de cet ensemble dans une iteacuteration Avec laquo lrsquoadressage direct raquo qui donne directement lrsquoadresse du mot voulu (ex [3]) ce nrsquoest pas possible On ne peut qursquoeacutecrire ADD AL [3]ADD AL [4]ADD AL [5] etcLrsquoassembleur offre laquo lrsquoadressage indirect raquo pour reacutesoudre ce problegraveme On utilise la notation [AL] qui signifie laquo le contenu du mot dont ladresse est dans le registre AL raquo Il suffit de mettre dans AL la premiegravere adresse voulue puis dincreacutementer AL de 1 en 1 dans une iteacuteration pour acceacuteder gracircce agrave la notation [AL] successivement agrave toutes les donneacutees de lensemble
20
Cest un des 5 modes dadressage classiques en assembleur - lrsquoadressage immeacutediat 8 (constante 8)- lrsquoadressage direct [8] (mot meacutemoire dadresse 8)- lrsquoadressage indirect [AL] (le registre AL contient ladresse voulue)- lrsquoadressage baseacute [AL+4] (le contenu de AL + 4 est ladresse voulue) Nexiste pas dans la machine simuleacutee- lrsquoadressage indexeacute [AL+BL] (le contenu de AL + le contenu de BL est lrsquoadresse voulue) Nexiste pas dans la machine simuleacutee
Attention dans la machine simuleacutee ladressage indirect nest autoriseacute que dans les instructions MOV ce qui est tregraves restrictif Ex
MOV DL [AL] Copie le mot [AL] dans DLMOV [CL] AL Copie AL dans le mot [CL]
21
Les entreacuteessorties de base srsquoeffectuent via des ports Les ports sont des adresses speacuteciales associeacutees aux peacuteripheacuteriques drsquoentreacuteesortie et repeacutereacutees par des numeacuteros Un octet peut ecirctre lu ou eacutecrit dans ces ports gracircce aux instructions IN et OUT qui utilisent le registre AL
IN 00 entreacutee depuis le port 00 vers ALOUT 01 sortie depuis AL vers le port 01
Dans le simulateur le port de sortie 01 est connecteacute agrave 2 feux tricolores selon la valeur de loctet transmis dans AL ces 2 feux srsquoallument dune certaine maniegravere bits 7 6 5 4 3 2 1 0 rouge orange vert rouge orange vert non utiliseacutes feu de gauche feu de droiteLe port dentreacutee 00 est connecteacute au clavier Le registre AL reccediloit le code ASCII de la touche du clavier enfonceacutee
Les entreacuteessorties
22
Cette forme drsquoentreacuteesortie sans condition correspond aux peacuteripheacuteriques qui sont toujours disponibles comme les interrupteurs les voyants lumineux Dans le cas de peacuteripheacuteriques plus complexes il faut recourir aux entreacuteessorties avec condition il faut connaicirctre lrsquoeacutetat du peacuteripheacuterique avant denvoyer ou de lire des informations (ex reacuteseau disque ) Comme nous lrsquoavons vu dans la partie sur le mateacuteriel il existe deux approches principales lrsquoattente active et les entreacuteessorties avec interruptions
23
Les manipulations de bits
1) Deacutecalage et rotations Ces opeacuterations deacutecalent vers la gauche ou vers la droite les bits
drsquoun registre Elles peuvent ecirctre utiliseacutees pour tester un bit quelconque (on le deacutecale tout agrave droite on annule les autres bits et on teste le mot) ou encore pour diviser ou multiplier rapidement un entier par une puissance de 2
SHL CLDeacutecalage agrave gauche le bit de poids fort est perdule bit de poids faible devient 0 (SHift Left)
SHR DL Deacutecalage agrave droite le bit de poids faible est perdu le bit de poids fort devient 0 (SHift Right)
ROL AL Rotation agrave gauche le bit de poids fort devient le bit de poids faible (ROtate Left)
ROR BL Rotation agrave droite le bit de poids faible devient le bit de poids fort (ROtate Right)
24
2) Les instructions logiquesLes instructions logiques effectuent des opeacuterations logiques bit agrave bit (chaque bit est calculeacute indeacutependamment des autres) ET OU et OU exclusif 0 0 1 1 0 0 1 1 0 0 1 1 OU 0 1 0 1 ET 0 1 0 1 OU EX 0 1 0 1 0 1 1 1 0 0 0 1 0 1 1 0a) Linstruction OR OR AL BL AL = AL OU BL OR est souvent utiliseacute pour forcer certains bits agrave 1 gracircce agrave un laquo masque raquo ayant des 1 agrave ces positions Exemple
MOV BL F0 masque BL 11110000MOV AL 55 AL 01010101OR AL BL 11110101
Les 4ers bits de AL sont forceacutes agrave 1 les 4 autres sont inchangeacutesb) Linstruction AND AND AL BL AL = AL ET BL AND est souvent utiliseacute pour forcer certains bits agrave 0 gracircce agrave un laquo masque raquo ayant des 0 agrave ces positions
25
Exemple MOV BL 0F masque BL 00001111MOV AL 55 AL 01010101AND AL BL 00000101
Les 4ers bits de AL sont forceacutes agrave 0 les 4 autres sont inchangeacutesc) Linstruction XOR XOR AL BL AL = AL OU EXCLUSIF BL XOR est souvent utiliseacute pour inverser certains bits gracircce agrave un laquo masque raquo ayant des 1 agrave ces positions
Exemple MOV BL F0 masque BL 11110000MOV AL 55 AL 01010101XOR AL BL 10100101Les 4ers bits de AL sont inverseacutes les 4 autres sont inchangeacutes
Remarque on na pas besoin de recourir agrave lassembleur pour manipuler des bits ces opeacuterateurs existent dans beaucoup de langages eacutevolueacutes comme Java En Java SHL slsquoeacutecrit gtgt SHR slsquoeacutecrit ltlt OR slsquoeacutecrit j AND slsquoeacutecrit amp et XOR slsquoeacutecrit ^ Exemple short i = 13 i a la valeur 0000000000001101 i = i ltlt 2 i prend la valeur 0000000000110100
26
Les sous programmes (SSP)
Un SSP est une suite dinstructions effectuant un certain traitement et regroupeacutees par commoditeacute deacutecoupage du programme en petits lsquomorceauxrsquo morceau utiliseacute plusieurs fois hellipUn SSP est repeacutereacute par ladresse de sa premiegravere instruction Lexeacutecution du SSP est deacuteclencheacutee par un programme appelant Un SSP peut lui mecircme en appeler un autre et ainsi de suiteLappel du SSP est effectueacute par linstruction CALL
CALL adresse (ex CALL 50)Lexeacutecution se poursuit agrave ladresse indiqueacutee dans le CALL La fin du SSP est marqueacutee par linstruction
RETLe processeur revient implicitement agrave linstruction placeacutee immeacutediatement apregraves le CALL car lrsquoadresse de retour est empileacutee
27
Ladresse de retour utiliseacutee par RET est ajouteacutee sur la pile par linstruction CALL Lorsque le processeur exeacutecute linstruction RET il deacutepile ladresse de la pile et la range dans le compteur ordinalCe meacutecanisme marche mecircme dans le cas des appels imbriqueacutes (un CALL dans un SSP vers un autre SSP) et dans le cas des appels reacutecursifs (un SSP qui sappelle lui mecircme un certain nombre de fois)
CALL 40
CALL 90
RET
RET
0
40
904546
1213
13
4613
13
pile
4613
28
Le plus souvent le SSP effectue un traitement sur des donneacutees (ou paramegravetres) qui sont fournies par le programme appelant et produit un reacutesultat qui est retourneacute agrave ce programmePlusieurs strateacutegies pour passer les paramegravetres a) passage par les registresLes valeurs des paramegravetres et du reacutesultat sont contenues dans des registres bien deacutefinis Meacutethode simple qui ne convient que si le nombre de paramegravetres est faible car il y a peu de registresEx le SSP agrave ladresse hexadeacutecimale 30 calcule le maximum de 2 entiers naturels On convient que les entiers sont passeacutes par les registres AL et BL et que le reacutesultat est placeacute dans le registre AL Lappel slsquoeacutecrit
MOV AL donneacutee1MOV BL donneacutee2CALL 30 le reacutesultat est disponible dans AL
29
Le SSP slsquoeacutecrit ORG 30 directive qui indique que le code qui suit est
situeacute agrave ladresse 30 Ne prend pas de place en meacutemoire
CMP AL BLJNS saut si AL gt= BL (AL-BL gt= 0)PUSH BL sinon eacutechange de AL et BLPOP AL de telle sorte max soit dans AL
saut RET
b) passage par la pileLes valeurs des paramegravetres sont empileacutees Il peut y en avoir un nombre quelconque Le SSP reacutecupegravere les valeurs dans la pileEx le SSP agrave ladresse 40 utilise la pile pour passer les paramegravetres et reccediloit le reacutesultat dans la pile Lappel slsquoeacutecrit
PUSH AX donneacutee1 preacutealablement rangeacutee dans AXPUSH BX donneacutee2 preacutealablement rangeacutee dans BXCALL 40POP AX reacutecupeacuteration du reacutesultat dans AX par exemple
30
Le SSP peut slsquoeacutecrire ORG 40POP CL adresse de retour empileacutee par le CALLPOP BL deuxiegraveme paramegravetrePOP AL premier paramegravetreCMP BL ALJNS saut si AL gt= BLPUSH BL sinon eacutechange de AL et BLPOP AL de telle sorte que le max soit dans AL
saut PUSH AL reacutesultat dans la pilePUSH CL adresse de retour dans la pileRET deacutepile ladresse de retour
Le programme apparaicirct plus complexe Mais il faut noter que dans les langages dassemblage reacuteels on peut acceacuteder aux valeurs de la pile sans deacutepiler ce qui simplifie le deacutebut et la fin du SSP
ad retourdonneacutee 2donneacutee 1
reacutesultat
pile apregraves le CALL
pile apregraves le RET
7
Les instructions de la machine simuleacutee
1 Instruction de transfert (meacutemoire vers registre ou registre vers meacutemoire)
MOV destination source
La source est recopieacutee dans la destination (attention a lordre )Les seules formes autoriseacutees sont les suivantes
MOV AL 1B range 1B (hexa) dans ALMOV BL [C2] copie le mot dadresse C2 dans BLMOV [15] CL copie le registre CL dans le mot dadresse 15
Les transferts de meacutemoire agrave meacutemoire sont interdits car il faudrait 2 adresses meacutemoire pour une seule instruction (cf chapitre sur lUAL)
Les transferts entre registres sont aussi interdits Il faut passer par un mot meacutemoire intermeacutediaire ou par la pile La pile est une zone de meacutemoire ou lon empile et deacutepile des valeurs PUSH AL empile la valeur de AL au sommet de la pilePOP BL deacutepile la valeur et la range dans BL
8
AL BL
12
12
PUSH AL
POP BL
12
Pile
9
2 Instructions de calcul
Il sagit de laddition de la soustraction de la multiplication de la division entiegravere du reste de la division entiegravere ou modulo de lincreacutementation de 1 de la deacutecreacutementation de 1 Elles utilisent des registres et rangent leur reacutesultat dans le premier registre
ADD AL BL AL = AL + BLSUB BL CL BL = BL - CLMUL CL DL CL = CL DLDIV DL AL DL = DL=ALMOD AL BL AL = AL mod BLINC DL DL = DL + 1DEC AL AL = AL 1048576 1
Dans les 5 instructions agrave 2 opeacuterandes lopeacuterande de droite peut aussi ecirctre une constante hexadeacutecimale
10
3 Instructions de comparaison
CMP destination source
Compare la source et la destination soustrait la source agrave la destination et met 1 dans le laquo flag raquo (drapeau) zero (Z) si le reacutesultat est nul et 1 dans le laquo flag raquo sign (S) si le reacutesultat est neacutegatif
CMP AL BL met Z a 1 si AL = BL
met S a 1 si AL lt BL
CMP BL13 met Z a 1 si BL = 13
met S a 1 si BL lt 13
CMP CL [20] met Z a 1 si CL = [20]
met S a 1 si CL lt [20]
11
4 Instructions de branchement inconditionnel
JMP eacutetiquette de destination
Llsquoeacutetiquette vers laquelle se fait le saut occupe une ligne du programme assembleur mais ne prend pas de place en meacutemoire Elle repreacutesente une certaine adresse
JMP FINhelliphellip
FIN (ne pas oublier les )hellip
hellip
Change la valeur du compteur ordinal (IP Instruction pointer)
12
5 Instructions de branchement conditionnel
Suit une instruction de comparaison (CMP) et reacutealise le saut en fonction des drapeaux cest-agrave-dire du reacutesultat de la comparaison Sinon passe agrave linstruction suivante
JZ LABAS saute agrave LABAS si le flag Z est agrave 1JNZ PLACE saute agrave place si le flag Z est agrave 0JS RET saute agrave RET si le flag S est agrave 1 JNS START saute agrave START si le flag S est agrave 0
En jouant sur lordre des registres on peut reacutealiser toutes les comparaisons (gt lt gt= lt= = =) comme nous le deacutetaillerons dans la suite
13
6 Instructions diverses
END fin du programme (une seule sur la derniegravere ligne)
HALT arrecirct de lexeacutecution (eacuteventuellement plusieurs)DB constante deacutefinit une donneacutee (laquo Define Byte raquo)
14
JMP debut occupe les mots 0 et 1 DB 5 mot 2 (donneacutee 1)DB 2 mot 3 (donneacutee 2)DB 0 mot 4 (reacutesultat)
debutMOV AL [2] premiegravere instruction du programmeMOV BL [3]ADD AL BL reacutesultat dans ALMOV [4] ALEND les mots dadresse 2 et 3 ont eacuteteacutes
additionneacutes et le reacutesultat rangeacute dans le mot 4
Exemple de programme
Nous prenons lhabitude de placer les donneacutees en deacutebut de meacutemoire avec un JMP qui les saute pour aller au deacutebut du programme (car le compteur ordinal est initialiseacute agrave 0) En effet si on place les donneacutees apregraves le programme on ne peut connaicirctre leurs adresses quapregraves avoir eacutecrit tout le programme ce qui nest guegravere pratique
Zone des donneacutees etreacutesultats
15
Les conditionnelles
si condition alors cas_vrai
sinon cas_faux
fsi
ougrave condition slsquoeacutecrit op1 opeacuterateur op2 avec gt lt gt= lt= = = comme opeacuterateurs
En assembleur il ny a pas dinstruction conditionnelle si alors sinon Il faut la construire avec des branchements conditionnels et inconditionnels Le scheacutema de traduction standard utiliseacute par les compilateurs pour traduire les conditionnelles en langage machine est le suivant
16
MOV AL op1 MOV BL op2 ou autres registres
CMP AL BL ou BL ALJ vrai instructions du cas_fauxJMP fin
vrai instruction du cas_vrai
finougrave J est un des branchements possibles (JZ JNZ JS ou JNS) en fonction de la condition
condition traduction explicationop1 = op2 CMP AL BL puis JZ op1-op2 = 0op1 = op2 CMP AL BL puis JNZ op1-op2 = 0op1 lt op2 CMP AL BL puis JS op1-op2 lt 0op1 gt op2 CMP BL AL puis JS op2-op1 lt 0op1 gt= op2 CMP AL BL puis JNS op1-op2 gt= 0op1 lt= op2 CMP BL AL puis JNS op2-op1 gt= 0
17
Cas particulier du si sans sinon
si condition alors
cas_vrai
fsiLe scheacutema geacuteneacuteral est inutilement compliqueacute car cas_faux est vide Il est preacutefeacuterable de prendre la neacutegation de la condition et de sauter agrave lrsquoeacutetiquette fin si cette neacutegation est vraie (autrement dit laquo si la conditionest fausse alors je ne fais rien raquo)
Le scheacutema de traduction est le suivant MOV AL op1 MOV BL op2 ou autres registres CMP AL BL ou BL AL J fin instructions_du_cas_vraifin ougrave le choix de J et lrsquoordre des opeacuterandes est donneacutee par le tableau preacuteceacutedent pour la neacutegation de la condition
18
Les iteacuterations (avec compteur ndash pour)
pour i de 1 agrave limite fairebloc_agrave_reacutepeacuteter
fpour
Lrsquoiteacuteration se traduit comme suit
MOV registre1 1 compteur iMOV registre2 limite
reCMP registre2 registre1JS fin limite-compteurlt0 cest agrave dire
compteurgtlimitebloc_agrave_reacutepeacuteterINC registre1 increacutementation de iJMP re
fin
19
Parcours drsquoun ensemble de donneacutees conseacutecutives lrsquoadressage indirect
Si on veut parcourir et traiter un ensemble de donneacutees conseacutecutives en meacutemoire (un tableau de donneacutees) il faut pouvoir deacutesigner successivement tous les eacuteleacutements de cet ensemble dans une iteacuteration Avec laquo lrsquoadressage direct raquo qui donne directement lrsquoadresse du mot voulu (ex [3]) ce nrsquoest pas possible On ne peut qursquoeacutecrire ADD AL [3]ADD AL [4]ADD AL [5] etcLrsquoassembleur offre laquo lrsquoadressage indirect raquo pour reacutesoudre ce problegraveme On utilise la notation [AL] qui signifie laquo le contenu du mot dont ladresse est dans le registre AL raquo Il suffit de mettre dans AL la premiegravere adresse voulue puis dincreacutementer AL de 1 en 1 dans une iteacuteration pour acceacuteder gracircce agrave la notation [AL] successivement agrave toutes les donneacutees de lensemble
20
Cest un des 5 modes dadressage classiques en assembleur - lrsquoadressage immeacutediat 8 (constante 8)- lrsquoadressage direct [8] (mot meacutemoire dadresse 8)- lrsquoadressage indirect [AL] (le registre AL contient ladresse voulue)- lrsquoadressage baseacute [AL+4] (le contenu de AL + 4 est ladresse voulue) Nexiste pas dans la machine simuleacutee- lrsquoadressage indexeacute [AL+BL] (le contenu de AL + le contenu de BL est lrsquoadresse voulue) Nexiste pas dans la machine simuleacutee
Attention dans la machine simuleacutee ladressage indirect nest autoriseacute que dans les instructions MOV ce qui est tregraves restrictif Ex
MOV DL [AL] Copie le mot [AL] dans DLMOV [CL] AL Copie AL dans le mot [CL]
21
Les entreacuteessorties de base srsquoeffectuent via des ports Les ports sont des adresses speacuteciales associeacutees aux peacuteripheacuteriques drsquoentreacuteesortie et repeacutereacutees par des numeacuteros Un octet peut ecirctre lu ou eacutecrit dans ces ports gracircce aux instructions IN et OUT qui utilisent le registre AL
IN 00 entreacutee depuis le port 00 vers ALOUT 01 sortie depuis AL vers le port 01
Dans le simulateur le port de sortie 01 est connecteacute agrave 2 feux tricolores selon la valeur de loctet transmis dans AL ces 2 feux srsquoallument dune certaine maniegravere bits 7 6 5 4 3 2 1 0 rouge orange vert rouge orange vert non utiliseacutes feu de gauche feu de droiteLe port dentreacutee 00 est connecteacute au clavier Le registre AL reccediloit le code ASCII de la touche du clavier enfonceacutee
Les entreacuteessorties
22
Cette forme drsquoentreacuteesortie sans condition correspond aux peacuteripheacuteriques qui sont toujours disponibles comme les interrupteurs les voyants lumineux Dans le cas de peacuteripheacuteriques plus complexes il faut recourir aux entreacuteessorties avec condition il faut connaicirctre lrsquoeacutetat du peacuteripheacuterique avant denvoyer ou de lire des informations (ex reacuteseau disque ) Comme nous lrsquoavons vu dans la partie sur le mateacuteriel il existe deux approches principales lrsquoattente active et les entreacuteessorties avec interruptions
23
Les manipulations de bits
1) Deacutecalage et rotations Ces opeacuterations deacutecalent vers la gauche ou vers la droite les bits
drsquoun registre Elles peuvent ecirctre utiliseacutees pour tester un bit quelconque (on le deacutecale tout agrave droite on annule les autres bits et on teste le mot) ou encore pour diviser ou multiplier rapidement un entier par une puissance de 2
SHL CLDeacutecalage agrave gauche le bit de poids fort est perdule bit de poids faible devient 0 (SHift Left)
SHR DL Deacutecalage agrave droite le bit de poids faible est perdu le bit de poids fort devient 0 (SHift Right)
ROL AL Rotation agrave gauche le bit de poids fort devient le bit de poids faible (ROtate Left)
ROR BL Rotation agrave droite le bit de poids faible devient le bit de poids fort (ROtate Right)
24
2) Les instructions logiquesLes instructions logiques effectuent des opeacuterations logiques bit agrave bit (chaque bit est calculeacute indeacutependamment des autres) ET OU et OU exclusif 0 0 1 1 0 0 1 1 0 0 1 1 OU 0 1 0 1 ET 0 1 0 1 OU EX 0 1 0 1 0 1 1 1 0 0 0 1 0 1 1 0a) Linstruction OR OR AL BL AL = AL OU BL OR est souvent utiliseacute pour forcer certains bits agrave 1 gracircce agrave un laquo masque raquo ayant des 1 agrave ces positions Exemple
MOV BL F0 masque BL 11110000MOV AL 55 AL 01010101OR AL BL 11110101
Les 4ers bits de AL sont forceacutes agrave 1 les 4 autres sont inchangeacutesb) Linstruction AND AND AL BL AL = AL ET BL AND est souvent utiliseacute pour forcer certains bits agrave 0 gracircce agrave un laquo masque raquo ayant des 0 agrave ces positions
25
Exemple MOV BL 0F masque BL 00001111MOV AL 55 AL 01010101AND AL BL 00000101
Les 4ers bits de AL sont forceacutes agrave 0 les 4 autres sont inchangeacutesc) Linstruction XOR XOR AL BL AL = AL OU EXCLUSIF BL XOR est souvent utiliseacute pour inverser certains bits gracircce agrave un laquo masque raquo ayant des 1 agrave ces positions
Exemple MOV BL F0 masque BL 11110000MOV AL 55 AL 01010101XOR AL BL 10100101Les 4ers bits de AL sont inverseacutes les 4 autres sont inchangeacutes
Remarque on na pas besoin de recourir agrave lassembleur pour manipuler des bits ces opeacuterateurs existent dans beaucoup de langages eacutevolueacutes comme Java En Java SHL slsquoeacutecrit gtgt SHR slsquoeacutecrit ltlt OR slsquoeacutecrit j AND slsquoeacutecrit amp et XOR slsquoeacutecrit ^ Exemple short i = 13 i a la valeur 0000000000001101 i = i ltlt 2 i prend la valeur 0000000000110100
26
Les sous programmes (SSP)
Un SSP est une suite dinstructions effectuant un certain traitement et regroupeacutees par commoditeacute deacutecoupage du programme en petits lsquomorceauxrsquo morceau utiliseacute plusieurs fois hellipUn SSP est repeacutereacute par ladresse de sa premiegravere instruction Lexeacutecution du SSP est deacuteclencheacutee par un programme appelant Un SSP peut lui mecircme en appeler un autre et ainsi de suiteLappel du SSP est effectueacute par linstruction CALL
CALL adresse (ex CALL 50)Lexeacutecution se poursuit agrave ladresse indiqueacutee dans le CALL La fin du SSP est marqueacutee par linstruction
RETLe processeur revient implicitement agrave linstruction placeacutee immeacutediatement apregraves le CALL car lrsquoadresse de retour est empileacutee
27
Ladresse de retour utiliseacutee par RET est ajouteacutee sur la pile par linstruction CALL Lorsque le processeur exeacutecute linstruction RET il deacutepile ladresse de la pile et la range dans le compteur ordinalCe meacutecanisme marche mecircme dans le cas des appels imbriqueacutes (un CALL dans un SSP vers un autre SSP) et dans le cas des appels reacutecursifs (un SSP qui sappelle lui mecircme un certain nombre de fois)
CALL 40
CALL 90
RET
RET
0
40
904546
1213
13
4613
13
pile
4613
28
Le plus souvent le SSP effectue un traitement sur des donneacutees (ou paramegravetres) qui sont fournies par le programme appelant et produit un reacutesultat qui est retourneacute agrave ce programmePlusieurs strateacutegies pour passer les paramegravetres a) passage par les registresLes valeurs des paramegravetres et du reacutesultat sont contenues dans des registres bien deacutefinis Meacutethode simple qui ne convient que si le nombre de paramegravetres est faible car il y a peu de registresEx le SSP agrave ladresse hexadeacutecimale 30 calcule le maximum de 2 entiers naturels On convient que les entiers sont passeacutes par les registres AL et BL et que le reacutesultat est placeacute dans le registre AL Lappel slsquoeacutecrit
MOV AL donneacutee1MOV BL donneacutee2CALL 30 le reacutesultat est disponible dans AL
29
Le SSP slsquoeacutecrit ORG 30 directive qui indique que le code qui suit est
situeacute agrave ladresse 30 Ne prend pas de place en meacutemoire
CMP AL BLJNS saut si AL gt= BL (AL-BL gt= 0)PUSH BL sinon eacutechange de AL et BLPOP AL de telle sorte max soit dans AL
saut RET
b) passage par la pileLes valeurs des paramegravetres sont empileacutees Il peut y en avoir un nombre quelconque Le SSP reacutecupegravere les valeurs dans la pileEx le SSP agrave ladresse 40 utilise la pile pour passer les paramegravetres et reccediloit le reacutesultat dans la pile Lappel slsquoeacutecrit
PUSH AX donneacutee1 preacutealablement rangeacutee dans AXPUSH BX donneacutee2 preacutealablement rangeacutee dans BXCALL 40POP AX reacutecupeacuteration du reacutesultat dans AX par exemple
30
Le SSP peut slsquoeacutecrire ORG 40POP CL adresse de retour empileacutee par le CALLPOP BL deuxiegraveme paramegravetrePOP AL premier paramegravetreCMP BL ALJNS saut si AL gt= BLPUSH BL sinon eacutechange de AL et BLPOP AL de telle sorte que le max soit dans AL
saut PUSH AL reacutesultat dans la pilePUSH CL adresse de retour dans la pileRET deacutepile ladresse de retour
Le programme apparaicirct plus complexe Mais il faut noter que dans les langages dassemblage reacuteels on peut acceacuteder aux valeurs de la pile sans deacutepiler ce qui simplifie le deacutebut et la fin du SSP
ad retourdonneacutee 2donneacutee 1
reacutesultat
pile apregraves le CALL
pile apregraves le RET
8
AL BL
12
12
PUSH AL
POP BL
12
Pile
9
2 Instructions de calcul
Il sagit de laddition de la soustraction de la multiplication de la division entiegravere du reste de la division entiegravere ou modulo de lincreacutementation de 1 de la deacutecreacutementation de 1 Elles utilisent des registres et rangent leur reacutesultat dans le premier registre
ADD AL BL AL = AL + BLSUB BL CL BL = BL - CLMUL CL DL CL = CL DLDIV DL AL DL = DL=ALMOD AL BL AL = AL mod BLINC DL DL = DL + 1DEC AL AL = AL 1048576 1
Dans les 5 instructions agrave 2 opeacuterandes lopeacuterande de droite peut aussi ecirctre une constante hexadeacutecimale
10
3 Instructions de comparaison
CMP destination source
Compare la source et la destination soustrait la source agrave la destination et met 1 dans le laquo flag raquo (drapeau) zero (Z) si le reacutesultat est nul et 1 dans le laquo flag raquo sign (S) si le reacutesultat est neacutegatif
CMP AL BL met Z a 1 si AL = BL
met S a 1 si AL lt BL
CMP BL13 met Z a 1 si BL = 13
met S a 1 si BL lt 13
CMP CL [20] met Z a 1 si CL = [20]
met S a 1 si CL lt [20]
11
4 Instructions de branchement inconditionnel
JMP eacutetiquette de destination
Llsquoeacutetiquette vers laquelle se fait le saut occupe une ligne du programme assembleur mais ne prend pas de place en meacutemoire Elle repreacutesente une certaine adresse
JMP FINhelliphellip
FIN (ne pas oublier les )hellip
hellip
Change la valeur du compteur ordinal (IP Instruction pointer)
12
5 Instructions de branchement conditionnel
Suit une instruction de comparaison (CMP) et reacutealise le saut en fonction des drapeaux cest-agrave-dire du reacutesultat de la comparaison Sinon passe agrave linstruction suivante
JZ LABAS saute agrave LABAS si le flag Z est agrave 1JNZ PLACE saute agrave place si le flag Z est agrave 0JS RET saute agrave RET si le flag S est agrave 1 JNS START saute agrave START si le flag S est agrave 0
En jouant sur lordre des registres on peut reacutealiser toutes les comparaisons (gt lt gt= lt= = =) comme nous le deacutetaillerons dans la suite
13
6 Instructions diverses
END fin du programme (une seule sur la derniegravere ligne)
HALT arrecirct de lexeacutecution (eacuteventuellement plusieurs)DB constante deacutefinit une donneacutee (laquo Define Byte raquo)
14
JMP debut occupe les mots 0 et 1 DB 5 mot 2 (donneacutee 1)DB 2 mot 3 (donneacutee 2)DB 0 mot 4 (reacutesultat)
debutMOV AL [2] premiegravere instruction du programmeMOV BL [3]ADD AL BL reacutesultat dans ALMOV [4] ALEND les mots dadresse 2 et 3 ont eacuteteacutes
additionneacutes et le reacutesultat rangeacute dans le mot 4
Exemple de programme
Nous prenons lhabitude de placer les donneacutees en deacutebut de meacutemoire avec un JMP qui les saute pour aller au deacutebut du programme (car le compteur ordinal est initialiseacute agrave 0) En effet si on place les donneacutees apregraves le programme on ne peut connaicirctre leurs adresses quapregraves avoir eacutecrit tout le programme ce qui nest guegravere pratique
Zone des donneacutees etreacutesultats
15
Les conditionnelles
si condition alors cas_vrai
sinon cas_faux
fsi
ougrave condition slsquoeacutecrit op1 opeacuterateur op2 avec gt lt gt= lt= = = comme opeacuterateurs
En assembleur il ny a pas dinstruction conditionnelle si alors sinon Il faut la construire avec des branchements conditionnels et inconditionnels Le scheacutema de traduction standard utiliseacute par les compilateurs pour traduire les conditionnelles en langage machine est le suivant
16
MOV AL op1 MOV BL op2 ou autres registres
CMP AL BL ou BL ALJ vrai instructions du cas_fauxJMP fin
vrai instruction du cas_vrai
finougrave J est un des branchements possibles (JZ JNZ JS ou JNS) en fonction de la condition
condition traduction explicationop1 = op2 CMP AL BL puis JZ op1-op2 = 0op1 = op2 CMP AL BL puis JNZ op1-op2 = 0op1 lt op2 CMP AL BL puis JS op1-op2 lt 0op1 gt op2 CMP BL AL puis JS op2-op1 lt 0op1 gt= op2 CMP AL BL puis JNS op1-op2 gt= 0op1 lt= op2 CMP BL AL puis JNS op2-op1 gt= 0
17
Cas particulier du si sans sinon
si condition alors
cas_vrai
fsiLe scheacutema geacuteneacuteral est inutilement compliqueacute car cas_faux est vide Il est preacutefeacuterable de prendre la neacutegation de la condition et de sauter agrave lrsquoeacutetiquette fin si cette neacutegation est vraie (autrement dit laquo si la conditionest fausse alors je ne fais rien raquo)
Le scheacutema de traduction est le suivant MOV AL op1 MOV BL op2 ou autres registres CMP AL BL ou BL AL J fin instructions_du_cas_vraifin ougrave le choix de J et lrsquoordre des opeacuterandes est donneacutee par le tableau preacuteceacutedent pour la neacutegation de la condition
18
Les iteacuterations (avec compteur ndash pour)
pour i de 1 agrave limite fairebloc_agrave_reacutepeacuteter
fpour
Lrsquoiteacuteration se traduit comme suit
MOV registre1 1 compteur iMOV registre2 limite
reCMP registre2 registre1JS fin limite-compteurlt0 cest agrave dire
compteurgtlimitebloc_agrave_reacutepeacuteterINC registre1 increacutementation de iJMP re
fin
19
Parcours drsquoun ensemble de donneacutees conseacutecutives lrsquoadressage indirect
Si on veut parcourir et traiter un ensemble de donneacutees conseacutecutives en meacutemoire (un tableau de donneacutees) il faut pouvoir deacutesigner successivement tous les eacuteleacutements de cet ensemble dans une iteacuteration Avec laquo lrsquoadressage direct raquo qui donne directement lrsquoadresse du mot voulu (ex [3]) ce nrsquoest pas possible On ne peut qursquoeacutecrire ADD AL [3]ADD AL [4]ADD AL [5] etcLrsquoassembleur offre laquo lrsquoadressage indirect raquo pour reacutesoudre ce problegraveme On utilise la notation [AL] qui signifie laquo le contenu du mot dont ladresse est dans le registre AL raquo Il suffit de mettre dans AL la premiegravere adresse voulue puis dincreacutementer AL de 1 en 1 dans une iteacuteration pour acceacuteder gracircce agrave la notation [AL] successivement agrave toutes les donneacutees de lensemble
20
Cest un des 5 modes dadressage classiques en assembleur - lrsquoadressage immeacutediat 8 (constante 8)- lrsquoadressage direct [8] (mot meacutemoire dadresse 8)- lrsquoadressage indirect [AL] (le registre AL contient ladresse voulue)- lrsquoadressage baseacute [AL+4] (le contenu de AL + 4 est ladresse voulue) Nexiste pas dans la machine simuleacutee- lrsquoadressage indexeacute [AL+BL] (le contenu de AL + le contenu de BL est lrsquoadresse voulue) Nexiste pas dans la machine simuleacutee
Attention dans la machine simuleacutee ladressage indirect nest autoriseacute que dans les instructions MOV ce qui est tregraves restrictif Ex
MOV DL [AL] Copie le mot [AL] dans DLMOV [CL] AL Copie AL dans le mot [CL]
21
Les entreacuteessorties de base srsquoeffectuent via des ports Les ports sont des adresses speacuteciales associeacutees aux peacuteripheacuteriques drsquoentreacuteesortie et repeacutereacutees par des numeacuteros Un octet peut ecirctre lu ou eacutecrit dans ces ports gracircce aux instructions IN et OUT qui utilisent le registre AL
IN 00 entreacutee depuis le port 00 vers ALOUT 01 sortie depuis AL vers le port 01
Dans le simulateur le port de sortie 01 est connecteacute agrave 2 feux tricolores selon la valeur de loctet transmis dans AL ces 2 feux srsquoallument dune certaine maniegravere bits 7 6 5 4 3 2 1 0 rouge orange vert rouge orange vert non utiliseacutes feu de gauche feu de droiteLe port dentreacutee 00 est connecteacute au clavier Le registre AL reccediloit le code ASCII de la touche du clavier enfonceacutee
Les entreacuteessorties
22
Cette forme drsquoentreacuteesortie sans condition correspond aux peacuteripheacuteriques qui sont toujours disponibles comme les interrupteurs les voyants lumineux Dans le cas de peacuteripheacuteriques plus complexes il faut recourir aux entreacuteessorties avec condition il faut connaicirctre lrsquoeacutetat du peacuteripheacuterique avant denvoyer ou de lire des informations (ex reacuteseau disque ) Comme nous lrsquoavons vu dans la partie sur le mateacuteriel il existe deux approches principales lrsquoattente active et les entreacuteessorties avec interruptions
23
Les manipulations de bits
1) Deacutecalage et rotations Ces opeacuterations deacutecalent vers la gauche ou vers la droite les bits
drsquoun registre Elles peuvent ecirctre utiliseacutees pour tester un bit quelconque (on le deacutecale tout agrave droite on annule les autres bits et on teste le mot) ou encore pour diviser ou multiplier rapidement un entier par une puissance de 2
SHL CLDeacutecalage agrave gauche le bit de poids fort est perdule bit de poids faible devient 0 (SHift Left)
SHR DL Deacutecalage agrave droite le bit de poids faible est perdu le bit de poids fort devient 0 (SHift Right)
ROL AL Rotation agrave gauche le bit de poids fort devient le bit de poids faible (ROtate Left)
ROR BL Rotation agrave droite le bit de poids faible devient le bit de poids fort (ROtate Right)
24
2) Les instructions logiquesLes instructions logiques effectuent des opeacuterations logiques bit agrave bit (chaque bit est calculeacute indeacutependamment des autres) ET OU et OU exclusif 0 0 1 1 0 0 1 1 0 0 1 1 OU 0 1 0 1 ET 0 1 0 1 OU EX 0 1 0 1 0 1 1 1 0 0 0 1 0 1 1 0a) Linstruction OR OR AL BL AL = AL OU BL OR est souvent utiliseacute pour forcer certains bits agrave 1 gracircce agrave un laquo masque raquo ayant des 1 agrave ces positions Exemple
MOV BL F0 masque BL 11110000MOV AL 55 AL 01010101OR AL BL 11110101
Les 4ers bits de AL sont forceacutes agrave 1 les 4 autres sont inchangeacutesb) Linstruction AND AND AL BL AL = AL ET BL AND est souvent utiliseacute pour forcer certains bits agrave 0 gracircce agrave un laquo masque raquo ayant des 0 agrave ces positions
25
Exemple MOV BL 0F masque BL 00001111MOV AL 55 AL 01010101AND AL BL 00000101
Les 4ers bits de AL sont forceacutes agrave 0 les 4 autres sont inchangeacutesc) Linstruction XOR XOR AL BL AL = AL OU EXCLUSIF BL XOR est souvent utiliseacute pour inverser certains bits gracircce agrave un laquo masque raquo ayant des 1 agrave ces positions
Exemple MOV BL F0 masque BL 11110000MOV AL 55 AL 01010101XOR AL BL 10100101Les 4ers bits de AL sont inverseacutes les 4 autres sont inchangeacutes
Remarque on na pas besoin de recourir agrave lassembleur pour manipuler des bits ces opeacuterateurs existent dans beaucoup de langages eacutevolueacutes comme Java En Java SHL slsquoeacutecrit gtgt SHR slsquoeacutecrit ltlt OR slsquoeacutecrit j AND slsquoeacutecrit amp et XOR slsquoeacutecrit ^ Exemple short i = 13 i a la valeur 0000000000001101 i = i ltlt 2 i prend la valeur 0000000000110100
26
Les sous programmes (SSP)
Un SSP est une suite dinstructions effectuant un certain traitement et regroupeacutees par commoditeacute deacutecoupage du programme en petits lsquomorceauxrsquo morceau utiliseacute plusieurs fois hellipUn SSP est repeacutereacute par ladresse de sa premiegravere instruction Lexeacutecution du SSP est deacuteclencheacutee par un programme appelant Un SSP peut lui mecircme en appeler un autre et ainsi de suiteLappel du SSP est effectueacute par linstruction CALL
CALL adresse (ex CALL 50)Lexeacutecution se poursuit agrave ladresse indiqueacutee dans le CALL La fin du SSP est marqueacutee par linstruction
RETLe processeur revient implicitement agrave linstruction placeacutee immeacutediatement apregraves le CALL car lrsquoadresse de retour est empileacutee
27
Ladresse de retour utiliseacutee par RET est ajouteacutee sur la pile par linstruction CALL Lorsque le processeur exeacutecute linstruction RET il deacutepile ladresse de la pile et la range dans le compteur ordinalCe meacutecanisme marche mecircme dans le cas des appels imbriqueacutes (un CALL dans un SSP vers un autre SSP) et dans le cas des appels reacutecursifs (un SSP qui sappelle lui mecircme un certain nombre de fois)
CALL 40
CALL 90
RET
RET
0
40
904546
1213
13
4613
13
pile
4613
28
Le plus souvent le SSP effectue un traitement sur des donneacutees (ou paramegravetres) qui sont fournies par le programme appelant et produit un reacutesultat qui est retourneacute agrave ce programmePlusieurs strateacutegies pour passer les paramegravetres a) passage par les registresLes valeurs des paramegravetres et du reacutesultat sont contenues dans des registres bien deacutefinis Meacutethode simple qui ne convient que si le nombre de paramegravetres est faible car il y a peu de registresEx le SSP agrave ladresse hexadeacutecimale 30 calcule le maximum de 2 entiers naturels On convient que les entiers sont passeacutes par les registres AL et BL et que le reacutesultat est placeacute dans le registre AL Lappel slsquoeacutecrit
MOV AL donneacutee1MOV BL donneacutee2CALL 30 le reacutesultat est disponible dans AL
29
Le SSP slsquoeacutecrit ORG 30 directive qui indique que le code qui suit est
situeacute agrave ladresse 30 Ne prend pas de place en meacutemoire
CMP AL BLJNS saut si AL gt= BL (AL-BL gt= 0)PUSH BL sinon eacutechange de AL et BLPOP AL de telle sorte max soit dans AL
saut RET
b) passage par la pileLes valeurs des paramegravetres sont empileacutees Il peut y en avoir un nombre quelconque Le SSP reacutecupegravere les valeurs dans la pileEx le SSP agrave ladresse 40 utilise la pile pour passer les paramegravetres et reccediloit le reacutesultat dans la pile Lappel slsquoeacutecrit
PUSH AX donneacutee1 preacutealablement rangeacutee dans AXPUSH BX donneacutee2 preacutealablement rangeacutee dans BXCALL 40POP AX reacutecupeacuteration du reacutesultat dans AX par exemple
30
Le SSP peut slsquoeacutecrire ORG 40POP CL adresse de retour empileacutee par le CALLPOP BL deuxiegraveme paramegravetrePOP AL premier paramegravetreCMP BL ALJNS saut si AL gt= BLPUSH BL sinon eacutechange de AL et BLPOP AL de telle sorte que le max soit dans AL
saut PUSH AL reacutesultat dans la pilePUSH CL adresse de retour dans la pileRET deacutepile ladresse de retour
Le programme apparaicirct plus complexe Mais il faut noter que dans les langages dassemblage reacuteels on peut acceacuteder aux valeurs de la pile sans deacutepiler ce qui simplifie le deacutebut et la fin du SSP
ad retourdonneacutee 2donneacutee 1
reacutesultat
pile apregraves le CALL
pile apregraves le RET
9
2 Instructions de calcul
Il sagit de laddition de la soustraction de la multiplication de la division entiegravere du reste de la division entiegravere ou modulo de lincreacutementation de 1 de la deacutecreacutementation de 1 Elles utilisent des registres et rangent leur reacutesultat dans le premier registre
ADD AL BL AL = AL + BLSUB BL CL BL = BL - CLMUL CL DL CL = CL DLDIV DL AL DL = DL=ALMOD AL BL AL = AL mod BLINC DL DL = DL + 1DEC AL AL = AL 1048576 1
Dans les 5 instructions agrave 2 opeacuterandes lopeacuterande de droite peut aussi ecirctre une constante hexadeacutecimale
10
3 Instructions de comparaison
CMP destination source
Compare la source et la destination soustrait la source agrave la destination et met 1 dans le laquo flag raquo (drapeau) zero (Z) si le reacutesultat est nul et 1 dans le laquo flag raquo sign (S) si le reacutesultat est neacutegatif
CMP AL BL met Z a 1 si AL = BL
met S a 1 si AL lt BL
CMP BL13 met Z a 1 si BL = 13
met S a 1 si BL lt 13
CMP CL [20] met Z a 1 si CL = [20]
met S a 1 si CL lt [20]
11
4 Instructions de branchement inconditionnel
JMP eacutetiquette de destination
Llsquoeacutetiquette vers laquelle se fait le saut occupe une ligne du programme assembleur mais ne prend pas de place en meacutemoire Elle repreacutesente une certaine adresse
JMP FINhelliphellip
FIN (ne pas oublier les )hellip
hellip
Change la valeur du compteur ordinal (IP Instruction pointer)
12
5 Instructions de branchement conditionnel
Suit une instruction de comparaison (CMP) et reacutealise le saut en fonction des drapeaux cest-agrave-dire du reacutesultat de la comparaison Sinon passe agrave linstruction suivante
JZ LABAS saute agrave LABAS si le flag Z est agrave 1JNZ PLACE saute agrave place si le flag Z est agrave 0JS RET saute agrave RET si le flag S est agrave 1 JNS START saute agrave START si le flag S est agrave 0
En jouant sur lordre des registres on peut reacutealiser toutes les comparaisons (gt lt gt= lt= = =) comme nous le deacutetaillerons dans la suite
13
6 Instructions diverses
END fin du programme (une seule sur la derniegravere ligne)
HALT arrecirct de lexeacutecution (eacuteventuellement plusieurs)DB constante deacutefinit une donneacutee (laquo Define Byte raquo)
14
JMP debut occupe les mots 0 et 1 DB 5 mot 2 (donneacutee 1)DB 2 mot 3 (donneacutee 2)DB 0 mot 4 (reacutesultat)
debutMOV AL [2] premiegravere instruction du programmeMOV BL [3]ADD AL BL reacutesultat dans ALMOV [4] ALEND les mots dadresse 2 et 3 ont eacuteteacutes
additionneacutes et le reacutesultat rangeacute dans le mot 4
Exemple de programme
Nous prenons lhabitude de placer les donneacutees en deacutebut de meacutemoire avec un JMP qui les saute pour aller au deacutebut du programme (car le compteur ordinal est initialiseacute agrave 0) En effet si on place les donneacutees apregraves le programme on ne peut connaicirctre leurs adresses quapregraves avoir eacutecrit tout le programme ce qui nest guegravere pratique
Zone des donneacutees etreacutesultats
15
Les conditionnelles
si condition alors cas_vrai
sinon cas_faux
fsi
ougrave condition slsquoeacutecrit op1 opeacuterateur op2 avec gt lt gt= lt= = = comme opeacuterateurs
En assembleur il ny a pas dinstruction conditionnelle si alors sinon Il faut la construire avec des branchements conditionnels et inconditionnels Le scheacutema de traduction standard utiliseacute par les compilateurs pour traduire les conditionnelles en langage machine est le suivant
16
MOV AL op1 MOV BL op2 ou autres registres
CMP AL BL ou BL ALJ vrai instructions du cas_fauxJMP fin
vrai instruction du cas_vrai
finougrave J est un des branchements possibles (JZ JNZ JS ou JNS) en fonction de la condition
condition traduction explicationop1 = op2 CMP AL BL puis JZ op1-op2 = 0op1 = op2 CMP AL BL puis JNZ op1-op2 = 0op1 lt op2 CMP AL BL puis JS op1-op2 lt 0op1 gt op2 CMP BL AL puis JS op2-op1 lt 0op1 gt= op2 CMP AL BL puis JNS op1-op2 gt= 0op1 lt= op2 CMP BL AL puis JNS op2-op1 gt= 0
17
Cas particulier du si sans sinon
si condition alors
cas_vrai
fsiLe scheacutema geacuteneacuteral est inutilement compliqueacute car cas_faux est vide Il est preacutefeacuterable de prendre la neacutegation de la condition et de sauter agrave lrsquoeacutetiquette fin si cette neacutegation est vraie (autrement dit laquo si la conditionest fausse alors je ne fais rien raquo)
Le scheacutema de traduction est le suivant MOV AL op1 MOV BL op2 ou autres registres CMP AL BL ou BL AL J fin instructions_du_cas_vraifin ougrave le choix de J et lrsquoordre des opeacuterandes est donneacutee par le tableau preacuteceacutedent pour la neacutegation de la condition
18
Les iteacuterations (avec compteur ndash pour)
pour i de 1 agrave limite fairebloc_agrave_reacutepeacuteter
fpour
Lrsquoiteacuteration se traduit comme suit
MOV registre1 1 compteur iMOV registre2 limite
reCMP registre2 registre1JS fin limite-compteurlt0 cest agrave dire
compteurgtlimitebloc_agrave_reacutepeacuteterINC registre1 increacutementation de iJMP re
fin
19
Parcours drsquoun ensemble de donneacutees conseacutecutives lrsquoadressage indirect
Si on veut parcourir et traiter un ensemble de donneacutees conseacutecutives en meacutemoire (un tableau de donneacutees) il faut pouvoir deacutesigner successivement tous les eacuteleacutements de cet ensemble dans une iteacuteration Avec laquo lrsquoadressage direct raquo qui donne directement lrsquoadresse du mot voulu (ex [3]) ce nrsquoest pas possible On ne peut qursquoeacutecrire ADD AL [3]ADD AL [4]ADD AL [5] etcLrsquoassembleur offre laquo lrsquoadressage indirect raquo pour reacutesoudre ce problegraveme On utilise la notation [AL] qui signifie laquo le contenu du mot dont ladresse est dans le registre AL raquo Il suffit de mettre dans AL la premiegravere adresse voulue puis dincreacutementer AL de 1 en 1 dans une iteacuteration pour acceacuteder gracircce agrave la notation [AL] successivement agrave toutes les donneacutees de lensemble
20
Cest un des 5 modes dadressage classiques en assembleur - lrsquoadressage immeacutediat 8 (constante 8)- lrsquoadressage direct [8] (mot meacutemoire dadresse 8)- lrsquoadressage indirect [AL] (le registre AL contient ladresse voulue)- lrsquoadressage baseacute [AL+4] (le contenu de AL + 4 est ladresse voulue) Nexiste pas dans la machine simuleacutee- lrsquoadressage indexeacute [AL+BL] (le contenu de AL + le contenu de BL est lrsquoadresse voulue) Nexiste pas dans la machine simuleacutee
Attention dans la machine simuleacutee ladressage indirect nest autoriseacute que dans les instructions MOV ce qui est tregraves restrictif Ex
MOV DL [AL] Copie le mot [AL] dans DLMOV [CL] AL Copie AL dans le mot [CL]
21
Les entreacuteessorties de base srsquoeffectuent via des ports Les ports sont des adresses speacuteciales associeacutees aux peacuteripheacuteriques drsquoentreacuteesortie et repeacutereacutees par des numeacuteros Un octet peut ecirctre lu ou eacutecrit dans ces ports gracircce aux instructions IN et OUT qui utilisent le registre AL
IN 00 entreacutee depuis le port 00 vers ALOUT 01 sortie depuis AL vers le port 01
Dans le simulateur le port de sortie 01 est connecteacute agrave 2 feux tricolores selon la valeur de loctet transmis dans AL ces 2 feux srsquoallument dune certaine maniegravere bits 7 6 5 4 3 2 1 0 rouge orange vert rouge orange vert non utiliseacutes feu de gauche feu de droiteLe port dentreacutee 00 est connecteacute au clavier Le registre AL reccediloit le code ASCII de la touche du clavier enfonceacutee
Les entreacuteessorties
22
Cette forme drsquoentreacuteesortie sans condition correspond aux peacuteripheacuteriques qui sont toujours disponibles comme les interrupteurs les voyants lumineux Dans le cas de peacuteripheacuteriques plus complexes il faut recourir aux entreacuteessorties avec condition il faut connaicirctre lrsquoeacutetat du peacuteripheacuterique avant denvoyer ou de lire des informations (ex reacuteseau disque ) Comme nous lrsquoavons vu dans la partie sur le mateacuteriel il existe deux approches principales lrsquoattente active et les entreacuteessorties avec interruptions
23
Les manipulations de bits
1) Deacutecalage et rotations Ces opeacuterations deacutecalent vers la gauche ou vers la droite les bits
drsquoun registre Elles peuvent ecirctre utiliseacutees pour tester un bit quelconque (on le deacutecale tout agrave droite on annule les autres bits et on teste le mot) ou encore pour diviser ou multiplier rapidement un entier par une puissance de 2
SHL CLDeacutecalage agrave gauche le bit de poids fort est perdule bit de poids faible devient 0 (SHift Left)
SHR DL Deacutecalage agrave droite le bit de poids faible est perdu le bit de poids fort devient 0 (SHift Right)
ROL AL Rotation agrave gauche le bit de poids fort devient le bit de poids faible (ROtate Left)
ROR BL Rotation agrave droite le bit de poids faible devient le bit de poids fort (ROtate Right)
24
2) Les instructions logiquesLes instructions logiques effectuent des opeacuterations logiques bit agrave bit (chaque bit est calculeacute indeacutependamment des autres) ET OU et OU exclusif 0 0 1 1 0 0 1 1 0 0 1 1 OU 0 1 0 1 ET 0 1 0 1 OU EX 0 1 0 1 0 1 1 1 0 0 0 1 0 1 1 0a) Linstruction OR OR AL BL AL = AL OU BL OR est souvent utiliseacute pour forcer certains bits agrave 1 gracircce agrave un laquo masque raquo ayant des 1 agrave ces positions Exemple
MOV BL F0 masque BL 11110000MOV AL 55 AL 01010101OR AL BL 11110101
Les 4ers bits de AL sont forceacutes agrave 1 les 4 autres sont inchangeacutesb) Linstruction AND AND AL BL AL = AL ET BL AND est souvent utiliseacute pour forcer certains bits agrave 0 gracircce agrave un laquo masque raquo ayant des 0 agrave ces positions
25
Exemple MOV BL 0F masque BL 00001111MOV AL 55 AL 01010101AND AL BL 00000101
Les 4ers bits de AL sont forceacutes agrave 0 les 4 autres sont inchangeacutesc) Linstruction XOR XOR AL BL AL = AL OU EXCLUSIF BL XOR est souvent utiliseacute pour inverser certains bits gracircce agrave un laquo masque raquo ayant des 1 agrave ces positions
Exemple MOV BL F0 masque BL 11110000MOV AL 55 AL 01010101XOR AL BL 10100101Les 4ers bits de AL sont inverseacutes les 4 autres sont inchangeacutes
Remarque on na pas besoin de recourir agrave lassembleur pour manipuler des bits ces opeacuterateurs existent dans beaucoup de langages eacutevolueacutes comme Java En Java SHL slsquoeacutecrit gtgt SHR slsquoeacutecrit ltlt OR slsquoeacutecrit j AND slsquoeacutecrit amp et XOR slsquoeacutecrit ^ Exemple short i = 13 i a la valeur 0000000000001101 i = i ltlt 2 i prend la valeur 0000000000110100
26
Les sous programmes (SSP)
Un SSP est une suite dinstructions effectuant un certain traitement et regroupeacutees par commoditeacute deacutecoupage du programme en petits lsquomorceauxrsquo morceau utiliseacute plusieurs fois hellipUn SSP est repeacutereacute par ladresse de sa premiegravere instruction Lexeacutecution du SSP est deacuteclencheacutee par un programme appelant Un SSP peut lui mecircme en appeler un autre et ainsi de suiteLappel du SSP est effectueacute par linstruction CALL
CALL adresse (ex CALL 50)Lexeacutecution se poursuit agrave ladresse indiqueacutee dans le CALL La fin du SSP est marqueacutee par linstruction
RETLe processeur revient implicitement agrave linstruction placeacutee immeacutediatement apregraves le CALL car lrsquoadresse de retour est empileacutee
27
Ladresse de retour utiliseacutee par RET est ajouteacutee sur la pile par linstruction CALL Lorsque le processeur exeacutecute linstruction RET il deacutepile ladresse de la pile et la range dans le compteur ordinalCe meacutecanisme marche mecircme dans le cas des appels imbriqueacutes (un CALL dans un SSP vers un autre SSP) et dans le cas des appels reacutecursifs (un SSP qui sappelle lui mecircme un certain nombre de fois)
CALL 40
CALL 90
RET
RET
0
40
904546
1213
13
4613
13
pile
4613
28
Le plus souvent le SSP effectue un traitement sur des donneacutees (ou paramegravetres) qui sont fournies par le programme appelant et produit un reacutesultat qui est retourneacute agrave ce programmePlusieurs strateacutegies pour passer les paramegravetres a) passage par les registresLes valeurs des paramegravetres et du reacutesultat sont contenues dans des registres bien deacutefinis Meacutethode simple qui ne convient que si le nombre de paramegravetres est faible car il y a peu de registresEx le SSP agrave ladresse hexadeacutecimale 30 calcule le maximum de 2 entiers naturels On convient que les entiers sont passeacutes par les registres AL et BL et que le reacutesultat est placeacute dans le registre AL Lappel slsquoeacutecrit
MOV AL donneacutee1MOV BL donneacutee2CALL 30 le reacutesultat est disponible dans AL
29
Le SSP slsquoeacutecrit ORG 30 directive qui indique que le code qui suit est
situeacute agrave ladresse 30 Ne prend pas de place en meacutemoire
CMP AL BLJNS saut si AL gt= BL (AL-BL gt= 0)PUSH BL sinon eacutechange de AL et BLPOP AL de telle sorte max soit dans AL
saut RET
b) passage par la pileLes valeurs des paramegravetres sont empileacutees Il peut y en avoir un nombre quelconque Le SSP reacutecupegravere les valeurs dans la pileEx le SSP agrave ladresse 40 utilise la pile pour passer les paramegravetres et reccediloit le reacutesultat dans la pile Lappel slsquoeacutecrit
PUSH AX donneacutee1 preacutealablement rangeacutee dans AXPUSH BX donneacutee2 preacutealablement rangeacutee dans BXCALL 40POP AX reacutecupeacuteration du reacutesultat dans AX par exemple
30
Le SSP peut slsquoeacutecrire ORG 40POP CL adresse de retour empileacutee par le CALLPOP BL deuxiegraveme paramegravetrePOP AL premier paramegravetreCMP BL ALJNS saut si AL gt= BLPUSH BL sinon eacutechange de AL et BLPOP AL de telle sorte que le max soit dans AL
saut PUSH AL reacutesultat dans la pilePUSH CL adresse de retour dans la pileRET deacutepile ladresse de retour
Le programme apparaicirct plus complexe Mais il faut noter que dans les langages dassemblage reacuteels on peut acceacuteder aux valeurs de la pile sans deacutepiler ce qui simplifie le deacutebut et la fin du SSP
ad retourdonneacutee 2donneacutee 1
reacutesultat
pile apregraves le CALL
pile apregraves le RET
10
3 Instructions de comparaison
CMP destination source
Compare la source et la destination soustrait la source agrave la destination et met 1 dans le laquo flag raquo (drapeau) zero (Z) si le reacutesultat est nul et 1 dans le laquo flag raquo sign (S) si le reacutesultat est neacutegatif
CMP AL BL met Z a 1 si AL = BL
met S a 1 si AL lt BL
CMP BL13 met Z a 1 si BL = 13
met S a 1 si BL lt 13
CMP CL [20] met Z a 1 si CL = [20]
met S a 1 si CL lt [20]
11
4 Instructions de branchement inconditionnel
JMP eacutetiquette de destination
Llsquoeacutetiquette vers laquelle se fait le saut occupe une ligne du programme assembleur mais ne prend pas de place en meacutemoire Elle repreacutesente une certaine adresse
JMP FINhelliphellip
FIN (ne pas oublier les )hellip
hellip
Change la valeur du compteur ordinal (IP Instruction pointer)
12
5 Instructions de branchement conditionnel
Suit une instruction de comparaison (CMP) et reacutealise le saut en fonction des drapeaux cest-agrave-dire du reacutesultat de la comparaison Sinon passe agrave linstruction suivante
JZ LABAS saute agrave LABAS si le flag Z est agrave 1JNZ PLACE saute agrave place si le flag Z est agrave 0JS RET saute agrave RET si le flag S est agrave 1 JNS START saute agrave START si le flag S est agrave 0
En jouant sur lordre des registres on peut reacutealiser toutes les comparaisons (gt lt gt= lt= = =) comme nous le deacutetaillerons dans la suite
13
6 Instructions diverses
END fin du programme (une seule sur la derniegravere ligne)
HALT arrecirct de lexeacutecution (eacuteventuellement plusieurs)DB constante deacutefinit une donneacutee (laquo Define Byte raquo)
14
JMP debut occupe les mots 0 et 1 DB 5 mot 2 (donneacutee 1)DB 2 mot 3 (donneacutee 2)DB 0 mot 4 (reacutesultat)
debutMOV AL [2] premiegravere instruction du programmeMOV BL [3]ADD AL BL reacutesultat dans ALMOV [4] ALEND les mots dadresse 2 et 3 ont eacuteteacutes
additionneacutes et le reacutesultat rangeacute dans le mot 4
Exemple de programme
Nous prenons lhabitude de placer les donneacutees en deacutebut de meacutemoire avec un JMP qui les saute pour aller au deacutebut du programme (car le compteur ordinal est initialiseacute agrave 0) En effet si on place les donneacutees apregraves le programme on ne peut connaicirctre leurs adresses quapregraves avoir eacutecrit tout le programme ce qui nest guegravere pratique
Zone des donneacutees etreacutesultats
15
Les conditionnelles
si condition alors cas_vrai
sinon cas_faux
fsi
ougrave condition slsquoeacutecrit op1 opeacuterateur op2 avec gt lt gt= lt= = = comme opeacuterateurs
En assembleur il ny a pas dinstruction conditionnelle si alors sinon Il faut la construire avec des branchements conditionnels et inconditionnels Le scheacutema de traduction standard utiliseacute par les compilateurs pour traduire les conditionnelles en langage machine est le suivant
16
MOV AL op1 MOV BL op2 ou autres registres
CMP AL BL ou BL ALJ vrai instructions du cas_fauxJMP fin
vrai instruction du cas_vrai
finougrave J est un des branchements possibles (JZ JNZ JS ou JNS) en fonction de la condition
condition traduction explicationop1 = op2 CMP AL BL puis JZ op1-op2 = 0op1 = op2 CMP AL BL puis JNZ op1-op2 = 0op1 lt op2 CMP AL BL puis JS op1-op2 lt 0op1 gt op2 CMP BL AL puis JS op2-op1 lt 0op1 gt= op2 CMP AL BL puis JNS op1-op2 gt= 0op1 lt= op2 CMP BL AL puis JNS op2-op1 gt= 0
17
Cas particulier du si sans sinon
si condition alors
cas_vrai
fsiLe scheacutema geacuteneacuteral est inutilement compliqueacute car cas_faux est vide Il est preacutefeacuterable de prendre la neacutegation de la condition et de sauter agrave lrsquoeacutetiquette fin si cette neacutegation est vraie (autrement dit laquo si la conditionest fausse alors je ne fais rien raquo)
Le scheacutema de traduction est le suivant MOV AL op1 MOV BL op2 ou autres registres CMP AL BL ou BL AL J fin instructions_du_cas_vraifin ougrave le choix de J et lrsquoordre des opeacuterandes est donneacutee par le tableau preacuteceacutedent pour la neacutegation de la condition
18
Les iteacuterations (avec compteur ndash pour)
pour i de 1 agrave limite fairebloc_agrave_reacutepeacuteter
fpour
Lrsquoiteacuteration se traduit comme suit
MOV registre1 1 compteur iMOV registre2 limite
reCMP registre2 registre1JS fin limite-compteurlt0 cest agrave dire
compteurgtlimitebloc_agrave_reacutepeacuteterINC registre1 increacutementation de iJMP re
fin
19
Parcours drsquoun ensemble de donneacutees conseacutecutives lrsquoadressage indirect
Si on veut parcourir et traiter un ensemble de donneacutees conseacutecutives en meacutemoire (un tableau de donneacutees) il faut pouvoir deacutesigner successivement tous les eacuteleacutements de cet ensemble dans une iteacuteration Avec laquo lrsquoadressage direct raquo qui donne directement lrsquoadresse du mot voulu (ex [3]) ce nrsquoest pas possible On ne peut qursquoeacutecrire ADD AL [3]ADD AL [4]ADD AL [5] etcLrsquoassembleur offre laquo lrsquoadressage indirect raquo pour reacutesoudre ce problegraveme On utilise la notation [AL] qui signifie laquo le contenu du mot dont ladresse est dans le registre AL raquo Il suffit de mettre dans AL la premiegravere adresse voulue puis dincreacutementer AL de 1 en 1 dans une iteacuteration pour acceacuteder gracircce agrave la notation [AL] successivement agrave toutes les donneacutees de lensemble
20
Cest un des 5 modes dadressage classiques en assembleur - lrsquoadressage immeacutediat 8 (constante 8)- lrsquoadressage direct [8] (mot meacutemoire dadresse 8)- lrsquoadressage indirect [AL] (le registre AL contient ladresse voulue)- lrsquoadressage baseacute [AL+4] (le contenu de AL + 4 est ladresse voulue) Nexiste pas dans la machine simuleacutee- lrsquoadressage indexeacute [AL+BL] (le contenu de AL + le contenu de BL est lrsquoadresse voulue) Nexiste pas dans la machine simuleacutee
Attention dans la machine simuleacutee ladressage indirect nest autoriseacute que dans les instructions MOV ce qui est tregraves restrictif Ex
MOV DL [AL] Copie le mot [AL] dans DLMOV [CL] AL Copie AL dans le mot [CL]
21
Les entreacuteessorties de base srsquoeffectuent via des ports Les ports sont des adresses speacuteciales associeacutees aux peacuteripheacuteriques drsquoentreacuteesortie et repeacutereacutees par des numeacuteros Un octet peut ecirctre lu ou eacutecrit dans ces ports gracircce aux instructions IN et OUT qui utilisent le registre AL
IN 00 entreacutee depuis le port 00 vers ALOUT 01 sortie depuis AL vers le port 01
Dans le simulateur le port de sortie 01 est connecteacute agrave 2 feux tricolores selon la valeur de loctet transmis dans AL ces 2 feux srsquoallument dune certaine maniegravere bits 7 6 5 4 3 2 1 0 rouge orange vert rouge orange vert non utiliseacutes feu de gauche feu de droiteLe port dentreacutee 00 est connecteacute au clavier Le registre AL reccediloit le code ASCII de la touche du clavier enfonceacutee
Les entreacuteessorties
22
Cette forme drsquoentreacuteesortie sans condition correspond aux peacuteripheacuteriques qui sont toujours disponibles comme les interrupteurs les voyants lumineux Dans le cas de peacuteripheacuteriques plus complexes il faut recourir aux entreacuteessorties avec condition il faut connaicirctre lrsquoeacutetat du peacuteripheacuterique avant denvoyer ou de lire des informations (ex reacuteseau disque ) Comme nous lrsquoavons vu dans la partie sur le mateacuteriel il existe deux approches principales lrsquoattente active et les entreacuteessorties avec interruptions
23
Les manipulations de bits
1) Deacutecalage et rotations Ces opeacuterations deacutecalent vers la gauche ou vers la droite les bits
drsquoun registre Elles peuvent ecirctre utiliseacutees pour tester un bit quelconque (on le deacutecale tout agrave droite on annule les autres bits et on teste le mot) ou encore pour diviser ou multiplier rapidement un entier par une puissance de 2
SHL CLDeacutecalage agrave gauche le bit de poids fort est perdule bit de poids faible devient 0 (SHift Left)
SHR DL Deacutecalage agrave droite le bit de poids faible est perdu le bit de poids fort devient 0 (SHift Right)
ROL AL Rotation agrave gauche le bit de poids fort devient le bit de poids faible (ROtate Left)
ROR BL Rotation agrave droite le bit de poids faible devient le bit de poids fort (ROtate Right)
24
2) Les instructions logiquesLes instructions logiques effectuent des opeacuterations logiques bit agrave bit (chaque bit est calculeacute indeacutependamment des autres) ET OU et OU exclusif 0 0 1 1 0 0 1 1 0 0 1 1 OU 0 1 0 1 ET 0 1 0 1 OU EX 0 1 0 1 0 1 1 1 0 0 0 1 0 1 1 0a) Linstruction OR OR AL BL AL = AL OU BL OR est souvent utiliseacute pour forcer certains bits agrave 1 gracircce agrave un laquo masque raquo ayant des 1 agrave ces positions Exemple
MOV BL F0 masque BL 11110000MOV AL 55 AL 01010101OR AL BL 11110101
Les 4ers bits de AL sont forceacutes agrave 1 les 4 autres sont inchangeacutesb) Linstruction AND AND AL BL AL = AL ET BL AND est souvent utiliseacute pour forcer certains bits agrave 0 gracircce agrave un laquo masque raquo ayant des 0 agrave ces positions
25
Exemple MOV BL 0F masque BL 00001111MOV AL 55 AL 01010101AND AL BL 00000101
Les 4ers bits de AL sont forceacutes agrave 0 les 4 autres sont inchangeacutesc) Linstruction XOR XOR AL BL AL = AL OU EXCLUSIF BL XOR est souvent utiliseacute pour inverser certains bits gracircce agrave un laquo masque raquo ayant des 1 agrave ces positions
Exemple MOV BL F0 masque BL 11110000MOV AL 55 AL 01010101XOR AL BL 10100101Les 4ers bits de AL sont inverseacutes les 4 autres sont inchangeacutes
Remarque on na pas besoin de recourir agrave lassembleur pour manipuler des bits ces opeacuterateurs existent dans beaucoup de langages eacutevolueacutes comme Java En Java SHL slsquoeacutecrit gtgt SHR slsquoeacutecrit ltlt OR slsquoeacutecrit j AND slsquoeacutecrit amp et XOR slsquoeacutecrit ^ Exemple short i = 13 i a la valeur 0000000000001101 i = i ltlt 2 i prend la valeur 0000000000110100
26
Les sous programmes (SSP)
Un SSP est une suite dinstructions effectuant un certain traitement et regroupeacutees par commoditeacute deacutecoupage du programme en petits lsquomorceauxrsquo morceau utiliseacute plusieurs fois hellipUn SSP est repeacutereacute par ladresse de sa premiegravere instruction Lexeacutecution du SSP est deacuteclencheacutee par un programme appelant Un SSP peut lui mecircme en appeler un autre et ainsi de suiteLappel du SSP est effectueacute par linstruction CALL
CALL adresse (ex CALL 50)Lexeacutecution se poursuit agrave ladresse indiqueacutee dans le CALL La fin du SSP est marqueacutee par linstruction
RETLe processeur revient implicitement agrave linstruction placeacutee immeacutediatement apregraves le CALL car lrsquoadresse de retour est empileacutee
27
Ladresse de retour utiliseacutee par RET est ajouteacutee sur la pile par linstruction CALL Lorsque le processeur exeacutecute linstruction RET il deacutepile ladresse de la pile et la range dans le compteur ordinalCe meacutecanisme marche mecircme dans le cas des appels imbriqueacutes (un CALL dans un SSP vers un autre SSP) et dans le cas des appels reacutecursifs (un SSP qui sappelle lui mecircme un certain nombre de fois)
CALL 40
CALL 90
RET
RET
0
40
904546
1213
13
4613
13
pile
4613
28
Le plus souvent le SSP effectue un traitement sur des donneacutees (ou paramegravetres) qui sont fournies par le programme appelant et produit un reacutesultat qui est retourneacute agrave ce programmePlusieurs strateacutegies pour passer les paramegravetres a) passage par les registresLes valeurs des paramegravetres et du reacutesultat sont contenues dans des registres bien deacutefinis Meacutethode simple qui ne convient que si le nombre de paramegravetres est faible car il y a peu de registresEx le SSP agrave ladresse hexadeacutecimale 30 calcule le maximum de 2 entiers naturels On convient que les entiers sont passeacutes par les registres AL et BL et que le reacutesultat est placeacute dans le registre AL Lappel slsquoeacutecrit
MOV AL donneacutee1MOV BL donneacutee2CALL 30 le reacutesultat est disponible dans AL
29
Le SSP slsquoeacutecrit ORG 30 directive qui indique que le code qui suit est
situeacute agrave ladresse 30 Ne prend pas de place en meacutemoire
CMP AL BLJNS saut si AL gt= BL (AL-BL gt= 0)PUSH BL sinon eacutechange de AL et BLPOP AL de telle sorte max soit dans AL
saut RET
b) passage par la pileLes valeurs des paramegravetres sont empileacutees Il peut y en avoir un nombre quelconque Le SSP reacutecupegravere les valeurs dans la pileEx le SSP agrave ladresse 40 utilise la pile pour passer les paramegravetres et reccediloit le reacutesultat dans la pile Lappel slsquoeacutecrit
PUSH AX donneacutee1 preacutealablement rangeacutee dans AXPUSH BX donneacutee2 preacutealablement rangeacutee dans BXCALL 40POP AX reacutecupeacuteration du reacutesultat dans AX par exemple
30
Le SSP peut slsquoeacutecrire ORG 40POP CL adresse de retour empileacutee par le CALLPOP BL deuxiegraveme paramegravetrePOP AL premier paramegravetreCMP BL ALJNS saut si AL gt= BLPUSH BL sinon eacutechange de AL et BLPOP AL de telle sorte que le max soit dans AL
saut PUSH AL reacutesultat dans la pilePUSH CL adresse de retour dans la pileRET deacutepile ladresse de retour
Le programme apparaicirct plus complexe Mais il faut noter que dans les langages dassemblage reacuteels on peut acceacuteder aux valeurs de la pile sans deacutepiler ce qui simplifie le deacutebut et la fin du SSP
ad retourdonneacutee 2donneacutee 1
reacutesultat
pile apregraves le CALL
pile apregraves le RET
11
4 Instructions de branchement inconditionnel
JMP eacutetiquette de destination
Llsquoeacutetiquette vers laquelle se fait le saut occupe une ligne du programme assembleur mais ne prend pas de place en meacutemoire Elle repreacutesente une certaine adresse
JMP FINhelliphellip
FIN (ne pas oublier les )hellip
hellip
Change la valeur du compteur ordinal (IP Instruction pointer)
12
5 Instructions de branchement conditionnel
Suit une instruction de comparaison (CMP) et reacutealise le saut en fonction des drapeaux cest-agrave-dire du reacutesultat de la comparaison Sinon passe agrave linstruction suivante
JZ LABAS saute agrave LABAS si le flag Z est agrave 1JNZ PLACE saute agrave place si le flag Z est agrave 0JS RET saute agrave RET si le flag S est agrave 1 JNS START saute agrave START si le flag S est agrave 0
En jouant sur lordre des registres on peut reacutealiser toutes les comparaisons (gt lt gt= lt= = =) comme nous le deacutetaillerons dans la suite
13
6 Instructions diverses
END fin du programme (une seule sur la derniegravere ligne)
HALT arrecirct de lexeacutecution (eacuteventuellement plusieurs)DB constante deacutefinit une donneacutee (laquo Define Byte raquo)
14
JMP debut occupe les mots 0 et 1 DB 5 mot 2 (donneacutee 1)DB 2 mot 3 (donneacutee 2)DB 0 mot 4 (reacutesultat)
debutMOV AL [2] premiegravere instruction du programmeMOV BL [3]ADD AL BL reacutesultat dans ALMOV [4] ALEND les mots dadresse 2 et 3 ont eacuteteacutes
additionneacutes et le reacutesultat rangeacute dans le mot 4
Exemple de programme
Nous prenons lhabitude de placer les donneacutees en deacutebut de meacutemoire avec un JMP qui les saute pour aller au deacutebut du programme (car le compteur ordinal est initialiseacute agrave 0) En effet si on place les donneacutees apregraves le programme on ne peut connaicirctre leurs adresses quapregraves avoir eacutecrit tout le programme ce qui nest guegravere pratique
Zone des donneacutees etreacutesultats
15
Les conditionnelles
si condition alors cas_vrai
sinon cas_faux
fsi
ougrave condition slsquoeacutecrit op1 opeacuterateur op2 avec gt lt gt= lt= = = comme opeacuterateurs
En assembleur il ny a pas dinstruction conditionnelle si alors sinon Il faut la construire avec des branchements conditionnels et inconditionnels Le scheacutema de traduction standard utiliseacute par les compilateurs pour traduire les conditionnelles en langage machine est le suivant
16
MOV AL op1 MOV BL op2 ou autres registres
CMP AL BL ou BL ALJ vrai instructions du cas_fauxJMP fin
vrai instruction du cas_vrai
finougrave J est un des branchements possibles (JZ JNZ JS ou JNS) en fonction de la condition
condition traduction explicationop1 = op2 CMP AL BL puis JZ op1-op2 = 0op1 = op2 CMP AL BL puis JNZ op1-op2 = 0op1 lt op2 CMP AL BL puis JS op1-op2 lt 0op1 gt op2 CMP BL AL puis JS op2-op1 lt 0op1 gt= op2 CMP AL BL puis JNS op1-op2 gt= 0op1 lt= op2 CMP BL AL puis JNS op2-op1 gt= 0
17
Cas particulier du si sans sinon
si condition alors
cas_vrai
fsiLe scheacutema geacuteneacuteral est inutilement compliqueacute car cas_faux est vide Il est preacutefeacuterable de prendre la neacutegation de la condition et de sauter agrave lrsquoeacutetiquette fin si cette neacutegation est vraie (autrement dit laquo si la conditionest fausse alors je ne fais rien raquo)
Le scheacutema de traduction est le suivant MOV AL op1 MOV BL op2 ou autres registres CMP AL BL ou BL AL J fin instructions_du_cas_vraifin ougrave le choix de J et lrsquoordre des opeacuterandes est donneacutee par le tableau preacuteceacutedent pour la neacutegation de la condition
18
Les iteacuterations (avec compteur ndash pour)
pour i de 1 agrave limite fairebloc_agrave_reacutepeacuteter
fpour
Lrsquoiteacuteration se traduit comme suit
MOV registre1 1 compteur iMOV registre2 limite
reCMP registre2 registre1JS fin limite-compteurlt0 cest agrave dire
compteurgtlimitebloc_agrave_reacutepeacuteterINC registre1 increacutementation de iJMP re
fin
19
Parcours drsquoun ensemble de donneacutees conseacutecutives lrsquoadressage indirect
Si on veut parcourir et traiter un ensemble de donneacutees conseacutecutives en meacutemoire (un tableau de donneacutees) il faut pouvoir deacutesigner successivement tous les eacuteleacutements de cet ensemble dans une iteacuteration Avec laquo lrsquoadressage direct raquo qui donne directement lrsquoadresse du mot voulu (ex [3]) ce nrsquoest pas possible On ne peut qursquoeacutecrire ADD AL [3]ADD AL [4]ADD AL [5] etcLrsquoassembleur offre laquo lrsquoadressage indirect raquo pour reacutesoudre ce problegraveme On utilise la notation [AL] qui signifie laquo le contenu du mot dont ladresse est dans le registre AL raquo Il suffit de mettre dans AL la premiegravere adresse voulue puis dincreacutementer AL de 1 en 1 dans une iteacuteration pour acceacuteder gracircce agrave la notation [AL] successivement agrave toutes les donneacutees de lensemble
20
Cest un des 5 modes dadressage classiques en assembleur - lrsquoadressage immeacutediat 8 (constante 8)- lrsquoadressage direct [8] (mot meacutemoire dadresse 8)- lrsquoadressage indirect [AL] (le registre AL contient ladresse voulue)- lrsquoadressage baseacute [AL+4] (le contenu de AL + 4 est ladresse voulue) Nexiste pas dans la machine simuleacutee- lrsquoadressage indexeacute [AL+BL] (le contenu de AL + le contenu de BL est lrsquoadresse voulue) Nexiste pas dans la machine simuleacutee
Attention dans la machine simuleacutee ladressage indirect nest autoriseacute que dans les instructions MOV ce qui est tregraves restrictif Ex
MOV DL [AL] Copie le mot [AL] dans DLMOV [CL] AL Copie AL dans le mot [CL]
21
Les entreacuteessorties de base srsquoeffectuent via des ports Les ports sont des adresses speacuteciales associeacutees aux peacuteripheacuteriques drsquoentreacuteesortie et repeacutereacutees par des numeacuteros Un octet peut ecirctre lu ou eacutecrit dans ces ports gracircce aux instructions IN et OUT qui utilisent le registre AL
IN 00 entreacutee depuis le port 00 vers ALOUT 01 sortie depuis AL vers le port 01
Dans le simulateur le port de sortie 01 est connecteacute agrave 2 feux tricolores selon la valeur de loctet transmis dans AL ces 2 feux srsquoallument dune certaine maniegravere bits 7 6 5 4 3 2 1 0 rouge orange vert rouge orange vert non utiliseacutes feu de gauche feu de droiteLe port dentreacutee 00 est connecteacute au clavier Le registre AL reccediloit le code ASCII de la touche du clavier enfonceacutee
Les entreacuteessorties
22
Cette forme drsquoentreacuteesortie sans condition correspond aux peacuteripheacuteriques qui sont toujours disponibles comme les interrupteurs les voyants lumineux Dans le cas de peacuteripheacuteriques plus complexes il faut recourir aux entreacuteessorties avec condition il faut connaicirctre lrsquoeacutetat du peacuteripheacuterique avant denvoyer ou de lire des informations (ex reacuteseau disque ) Comme nous lrsquoavons vu dans la partie sur le mateacuteriel il existe deux approches principales lrsquoattente active et les entreacuteessorties avec interruptions
23
Les manipulations de bits
1) Deacutecalage et rotations Ces opeacuterations deacutecalent vers la gauche ou vers la droite les bits
drsquoun registre Elles peuvent ecirctre utiliseacutees pour tester un bit quelconque (on le deacutecale tout agrave droite on annule les autres bits et on teste le mot) ou encore pour diviser ou multiplier rapidement un entier par une puissance de 2
SHL CLDeacutecalage agrave gauche le bit de poids fort est perdule bit de poids faible devient 0 (SHift Left)
SHR DL Deacutecalage agrave droite le bit de poids faible est perdu le bit de poids fort devient 0 (SHift Right)
ROL AL Rotation agrave gauche le bit de poids fort devient le bit de poids faible (ROtate Left)
ROR BL Rotation agrave droite le bit de poids faible devient le bit de poids fort (ROtate Right)
24
2) Les instructions logiquesLes instructions logiques effectuent des opeacuterations logiques bit agrave bit (chaque bit est calculeacute indeacutependamment des autres) ET OU et OU exclusif 0 0 1 1 0 0 1 1 0 0 1 1 OU 0 1 0 1 ET 0 1 0 1 OU EX 0 1 0 1 0 1 1 1 0 0 0 1 0 1 1 0a) Linstruction OR OR AL BL AL = AL OU BL OR est souvent utiliseacute pour forcer certains bits agrave 1 gracircce agrave un laquo masque raquo ayant des 1 agrave ces positions Exemple
MOV BL F0 masque BL 11110000MOV AL 55 AL 01010101OR AL BL 11110101
Les 4ers bits de AL sont forceacutes agrave 1 les 4 autres sont inchangeacutesb) Linstruction AND AND AL BL AL = AL ET BL AND est souvent utiliseacute pour forcer certains bits agrave 0 gracircce agrave un laquo masque raquo ayant des 0 agrave ces positions
25
Exemple MOV BL 0F masque BL 00001111MOV AL 55 AL 01010101AND AL BL 00000101
Les 4ers bits de AL sont forceacutes agrave 0 les 4 autres sont inchangeacutesc) Linstruction XOR XOR AL BL AL = AL OU EXCLUSIF BL XOR est souvent utiliseacute pour inverser certains bits gracircce agrave un laquo masque raquo ayant des 1 agrave ces positions
Exemple MOV BL F0 masque BL 11110000MOV AL 55 AL 01010101XOR AL BL 10100101Les 4ers bits de AL sont inverseacutes les 4 autres sont inchangeacutes
Remarque on na pas besoin de recourir agrave lassembleur pour manipuler des bits ces opeacuterateurs existent dans beaucoup de langages eacutevolueacutes comme Java En Java SHL slsquoeacutecrit gtgt SHR slsquoeacutecrit ltlt OR slsquoeacutecrit j AND slsquoeacutecrit amp et XOR slsquoeacutecrit ^ Exemple short i = 13 i a la valeur 0000000000001101 i = i ltlt 2 i prend la valeur 0000000000110100
26
Les sous programmes (SSP)
Un SSP est une suite dinstructions effectuant un certain traitement et regroupeacutees par commoditeacute deacutecoupage du programme en petits lsquomorceauxrsquo morceau utiliseacute plusieurs fois hellipUn SSP est repeacutereacute par ladresse de sa premiegravere instruction Lexeacutecution du SSP est deacuteclencheacutee par un programme appelant Un SSP peut lui mecircme en appeler un autre et ainsi de suiteLappel du SSP est effectueacute par linstruction CALL
CALL adresse (ex CALL 50)Lexeacutecution se poursuit agrave ladresse indiqueacutee dans le CALL La fin du SSP est marqueacutee par linstruction
RETLe processeur revient implicitement agrave linstruction placeacutee immeacutediatement apregraves le CALL car lrsquoadresse de retour est empileacutee
27
Ladresse de retour utiliseacutee par RET est ajouteacutee sur la pile par linstruction CALL Lorsque le processeur exeacutecute linstruction RET il deacutepile ladresse de la pile et la range dans le compteur ordinalCe meacutecanisme marche mecircme dans le cas des appels imbriqueacutes (un CALL dans un SSP vers un autre SSP) et dans le cas des appels reacutecursifs (un SSP qui sappelle lui mecircme un certain nombre de fois)
CALL 40
CALL 90
RET
RET
0
40
904546
1213
13
4613
13
pile
4613
28
Le plus souvent le SSP effectue un traitement sur des donneacutees (ou paramegravetres) qui sont fournies par le programme appelant et produit un reacutesultat qui est retourneacute agrave ce programmePlusieurs strateacutegies pour passer les paramegravetres a) passage par les registresLes valeurs des paramegravetres et du reacutesultat sont contenues dans des registres bien deacutefinis Meacutethode simple qui ne convient que si le nombre de paramegravetres est faible car il y a peu de registresEx le SSP agrave ladresse hexadeacutecimale 30 calcule le maximum de 2 entiers naturels On convient que les entiers sont passeacutes par les registres AL et BL et que le reacutesultat est placeacute dans le registre AL Lappel slsquoeacutecrit
MOV AL donneacutee1MOV BL donneacutee2CALL 30 le reacutesultat est disponible dans AL
29
Le SSP slsquoeacutecrit ORG 30 directive qui indique que le code qui suit est
situeacute agrave ladresse 30 Ne prend pas de place en meacutemoire
CMP AL BLJNS saut si AL gt= BL (AL-BL gt= 0)PUSH BL sinon eacutechange de AL et BLPOP AL de telle sorte max soit dans AL
saut RET
b) passage par la pileLes valeurs des paramegravetres sont empileacutees Il peut y en avoir un nombre quelconque Le SSP reacutecupegravere les valeurs dans la pileEx le SSP agrave ladresse 40 utilise la pile pour passer les paramegravetres et reccediloit le reacutesultat dans la pile Lappel slsquoeacutecrit
PUSH AX donneacutee1 preacutealablement rangeacutee dans AXPUSH BX donneacutee2 preacutealablement rangeacutee dans BXCALL 40POP AX reacutecupeacuteration du reacutesultat dans AX par exemple
30
Le SSP peut slsquoeacutecrire ORG 40POP CL adresse de retour empileacutee par le CALLPOP BL deuxiegraveme paramegravetrePOP AL premier paramegravetreCMP BL ALJNS saut si AL gt= BLPUSH BL sinon eacutechange de AL et BLPOP AL de telle sorte que le max soit dans AL
saut PUSH AL reacutesultat dans la pilePUSH CL adresse de retour dans la pileRET deacutepile ladresse de retour
Le programme apparaicirct plus complexe Mais il faut noter que dans les langages dassemblage reacuteels on peut acceacuteder aux valeurs de la pile sans deacutepiler ce qui simplifie le deacutebut et la fin du SSP
ad retourdonneacutee 2donneacutee 1
reacutesultat
pile apregraves le CALL
pile apregraves le RET
12
5 Instructions de branchement conditionnel
Suit une instruction de comparaison (CMP) et reacutealise le saut en fonction des drapeaux cest-agrave-dire du reacutesultat de la comparaison Sinon passe agrave linstruction suivante
JZ LABAS saute agrave LABAS si le flag Z est agrave 1JNZ PLACE saute agrave place si le flag Z est agrave 0JS RET saute agrave RET si le flag S est agrave 1 JNS START saute agrave START si le flag S est agrave 0
En jouant sur lordre des registres on peut reacutealiser toutes les comparaisons (gt lt gt= lt= = =) comme nous le deacutetaillerons dans la suite
13
6 Instructions diverses
END fin du programme (une seule sur la derniegravere ligne)
HALT arrecirct de lexeacutecution (eacuteventuellement plusieurs)DB constante deacutefinit une donneacutee (laquo Define Byte raquo)
14
JMP debut occupe les mots 0 et 1 DB 5 mot 2 (donneacutee 1)DB 2 mot 3 (donneacutee 2)DB 0 mot 4 (reacutesultat)
debutMOV AL [2] premiegravere instruction du programmeMOV BL [3]ADD AL BL reacutesultat dans ALMOV [4] ALEND les mots dadresse 2 et 3 ont eacuteteacutes
additionneacutes et le reacutesultat rangeacute dans le mot 4
Exemple de programme
Nous prenons lhabitude de placer les donneacutees en deacutebut de meacutemoire avec un JMP qui les saute pour aller au deacutebut du programme (car le compteur ordinal est initialiseacute agrave 0) En effet si on place les donneacutees apregraves le programme on ne peut connaicirctre leurs adresses quapregraves avoir eacutecrit tout le programme ce qui nest guegravere pratique
Zone des donneacutees etreacutesultats
15
Les conditionnelles
si condition alors cas_vrai
sinon cas_faux
fsi
ougrave condition slsquoeacutecrit op1 opeacuterateur op2 avec gt lt gt= lt= = = comme opeacuterateurs
En assembleur il ny a pas dinstruction conditionnelle si alors sinon Il faut la construire avec des branchements conditionnels et inconditionnels Le scheacutema de traduction standard utiliseacute par les compilateurs pour traduire les conditionnelles en langage machine est le suivant
16
MOV AL op1 MOV BL op2 ou autres registres
CMP AL BL ou BL ALJ vrai instructions du cas_fauxJMP fin
vrai instruction du cas_vrai
finougrave J est un des branchements possibles (JZ JNZ JS ou JNS) en fonction de la condition
condition traduction explicationop1 = op2 CMP AL BL puis JZ op1-op2 = 0op1 = op2 CMP AL BL puis JNZ op1-op2 = 0op1 lt op2 CMP AL BL puis JS op1-op2 lt 0op1 gt op2 CMP BL AL puis JS op2-op1 lt 0op1 gt= op2 CMP AL BL puis JNS op1-op2 gt= 0op1 lt= op2 CMP BL AL puis JNS op2-op1 gt= 0
17
Cas particulier du si sans sinon
si condition alors
cas_vrai
fsiLe scheacutema geacuteneacuteral est inutilement compliqueacute car cas_faux est vide Il est preacutefeacuterable de prendre la neacutegation de la condition et de sauter agrave lrsquoeacutetiquette fin si cette neacutegation est vraie (autrement dit laquo si la conditionest fausse alors je ne fais rien raquo)
Le scheacutema de traduction est le suivant MOV AL op1 MOV BL op2 ou autres registres CMP AL BL ou BL AL J fin instructions_du_cas_vraifin ougrave le choix de J et lrsquoordre des opeacuterandes est donneacutee par le tableau preacuteceacutedent pour la neacutegation de la condition
18
Les iteacuterations (avec compteur ndash pour)
pour i de 1 agrave limite fairebloc_agrave_reacutepeacuteter
fpour
Lrsquoiteacuteration se traduit comme suit
MOV registre1 1 compteur iMOV registre2 limite
reCMP registre2 registre1JS fin limite-compteurlt0 cest agrave dire
compteurgtlimitebloc_agrave_reacutepeacuteterINC registre1 increacutementation de iJMP re
fin
19
Parcours drsquoun ensemble de donneacutees conseacutecutives lrsquoadressage indirect
Si on veut parcourir et traiter un ensemble de donneacutees conseacutecutives en meacutemoire (un tableau de donneacutees) il faut pouvoir deacutesigner successivement tous les eacuteleacutements de cet ensemble dans une iteacuteration Avec laquo lrsquoadressage direct raquo qui donne directement lrsquoadresse du mot voulu (ex [3]) ce nrsquoest pas possible On ne peut qursquoeacutecrire ADD AL [3]ADD AL [4]ADD AL [5] etcLrsquoassembleur offre laquo lrsquoadressage indirect raquo pour reacutesoudre ce problegraveme On utilise la notation [AL] qui signifie laquo le contenu du mot dont ladresse est dans le registre AL raquo Il suffit de mettre dans AL la premiegravere adresse voulue puis dincreacutementer AL de 1 en 1 dans une iteacuteration pour acceacuteder gracircce agrave la notation [AL] successivement agrave toutes les donneacutees de lensemble
20
Cest un des 5 modes dadressage classiques en assembleur - lrsquoadressage immeacutediat 8 (constante 8)- lrsquoadressage direct [8] (mot meacutemoire dadresse 8)- lrsquoadressage indirect [AL] (le registre AL contient ladresse voulue)- lrsquoadressage baseacute [AL+4] (le contenu de AL + 4 est ladresse voulue) Nexiste pas dans la machine simuleacutee- lrsquoadressage indexeacute [AL+BL] (le contenu de AL + le contenu de BL est lrsquoadresse voulue) Nexiste pas dans la machine simuleacutee
Attention dans la machine simuleacutee ladressage indirect nest autoriseacute que dans les instructions MOV ce qui est tregraves restrictif Ex
MOV DL [AL] Copie le mot [AL] dans DLMOV [CL] AL Copie AL dans le mot [CL]
21
Les entreacuteessorties de base srsquoeffectuent via des ports Les ports sont des adresses speacuteciales associeacutees aux peacuteripheacuteriques drsquoentreacuteesortie et repeacutereacutees par des numeacuteros Un octet peut ecirctre lu ou eacutecrit dans ces ports gracircce aux instructions IN et OUT qui utilisent le registre AL
IN 00 entreacutee depuis le port 00 vers ALOUT 01 sortie depuis AL vers le port 01
Dans le simulateur le port de sortie 01 est connecteacute agrave 2 feux tricolores selon la valeur de loctet transmis dans AL ces 2 feux srsquoallument dune certaine maniegravere bits 7 6 5 4 3 2 1 0 rouge orange vert rouge orange vert non utiliseacutes feu de gauche feu de droiteLe port dentreacutee 00 est connecteacute au clavier Le registre AL reccediloit le code ASCII de la touche du clavier enfonceacutee
Les entreacuteessorties
22
Cette forme drsquoentreacuteesortie sans condition correspond aux peacuteripheacuteriques qui sont toujours disponibles comme les interrupteurs les voyants lumineux Dans le cas de peacuteripheacuteriques plus complexes il faut recourir aux entreacuteessorties avec condition il faut connaicirctre lrsquoeacutetat du peacuteripheacuterique avant denvoyer ou de lire des informations (ex reacuteseau disque ) Comme nous lrsquoavons vu dans la partie sur le mateacuteriel il existe deux approches principales lrsquoattente active et les entreacuteessorties avec interruptions
23
Les manipulations de bits
1) Deacutecalage et rotations Ces opeacuterations deacutecalent vers la gauche ou vers la droite les bits
drsquoun registre Elles peuvent ecirctre utiliseacutees pour tester un bit quelconque (on le deacutecale tout agrave droite on annule les autres bits et on teste le mot) ou encore pour diviser ou multiplier rapidement un entier par une puissance de 2
SHL CLDeacutecalage agrave gauche le bit de poids fort est perdule bit de poids faible devient 0 (SHift Left)
SHR DL Deacutecalage agrave droite le bit de poids faible est perdu le bit de poids fort devient 0 (SHift Right)
ROL AL Rotation agrave gauche le bit de poids fort devient le bit de poids faible (ROtate Left)
ROR BL Rotation agrave droite le bit de poids faible devient le bit de poids fort (ROtate Right)
24
2) Les instructions logiquesLes instructions logiques effectuent des opeacuterations logiques bit agrave bit (chaque bit est calculeacute indeacutependamment des autres) ET OU et OU exclusif 0 0 1 1 0 0 1 1 0 0 1 1 OU 0 1 0 1 ET 0 1 0 1 OU EX 0 1 0 1 0 1 1 1 0 0 0 1 0 1 1 0a) Linstruction OR OR AL BL AL = AL OU BL OR est souvent utiliseacute pour forcer certains bits agrave 1 gracircce agrave un laquo masque raquo ayant des 1 agrave ces positions Exemple
MOV BL F0 masque BL 11110000MOV AL 55 AL 01010101OR AL BL 11110101
Les 4ers bits de AL sont forceacutes agrave 1 les 4 autres sont inchangeacutesb) Linstruction AND AND AL BL AL = AL ET BL AND est souvent utiliseacute pour forcer certains bits agrave 0 gracircce agrave un laquo masque raquo ayant des 0 agrave ces positions
25
Exemple MOV BL 0F masque BL 00001111MOV AL 55 AL 01010101AND AL BL 00000101
Les 4ers bits de AL sont forceacutes agrave 0 les 4 autres sont inchangeacutesc) Linstruction XOR XOR AL BL AL = AL OU EXCLUSIF BL XOR est souvent utiliseacute pour inverser certains bits gracircce agrave un laquo masque raquo ayant des 1 agrave ces positions
Exemple MOV BL F0 masque BL 11110000MOV AL 55 AL 01010101XOR AL BL 10100101Les 4ers bits de AL sont inverseacutes les 4 autres sont inchangeacutes
Remarque on na pas besoin de recourir agrave lassembleur pour manipuler des bits ces opeacuterateurs existent dans beaucoup de langages eacutevolueacutes comme Java En Java SHL slsquoeacutecrit gtgt SHR slsquoeacutecrit ltlt OR slsquoeacutecrit j AND slsquoeacutecrit amp et XOR slsquoeacutecrit ^ Exemple short i = 13 i a la valeur 0000000000001101 i = i ltlt 2 i prend la valeur 0000000000110100
26
Les sous programmes (SSP)
Un SSP est une suite dinstructions effectuant un certain traitement et regroupeacutees par commoditeacute deacutecoupage du programme en petits lsquomorceauxrsquo morceau utiliseacute plusieurs fois hellipUn SSP est repeacutereacute par ladresse de sa premiegravere instruction Lexeacutecution du SSP est deacuteclencheacutee par un programme appelant Un SSP peut lui mecircme en appeler un autre et ainsi de suiteLappel du SSP est effectueacute par linstruction CALL
CALL adresse (ex CALL 50)Lexeacutecution se poursuit agrave ladresse indiqueacutee dans le CALL La fin du SSP est marqueacutee par linstruction
RETLe processeur revient implicitement agrave linstruction placeacutee immeacutediatement apregraves le CALL car lrsquoadresse de retour est empileacutee
27
Ladresse de retour utiliseacutee par RET est ajouteacutee sur la pile par linstruction CALL Lorsque le processeur exeacutecute linstruction RET il deacutepile ladresse de la pile et la range dans le compteur ordinalCe meacutecanisme marche mecircme dans le cas des appels imbriqueacutes (un CALL dans un SSP vers un autre SSP) et dans le cas des appels reacutecursifs (un SSP qui sappelle lui mecircme un certain nombre de fois)
CALL 40
CALL 90
RET
RET
0
40
904546
1213
13
4613
13
pile
4613
28
Le plus souvent le SSP effectue un traitement sur des donneacutees (ou paramegravetres) qui sont fournies par le programme appelant et produit un reacutesultat qui est retourneacute agrave ce programmePlusieurs strateacutegies pour passer les paramegravetres a) passage par les registresLes valeurs des paramegravetres et du reacutesultat sont contenues dans des registres bien deacutefinis Meacutethode simple qui ne convient que si le nombre de paramegravetres est faible car il y a peu de registresEx le SSP agrave ladresse hexadeacutecimale 30 calcule le maximum de 2 entiers naturels On convient que les entiers sont passeacutes par les registres AL et BL et que le reacutesultat est placeacute dans le registre AL Lappel slsquoeacutecrit
MOV AL donneacutee1MOV BL donneacutee2CALL 30 le reacutesultat est disponible dans AL
29
Le SSP slsquoeacutecrit ORG 30 directive qui indique que le code qui suit est
situeacute agrave ladresse 30 Ne prend pas de place en meacutemoire
CMP AL BLJNS saut si AL gt= BL (AL-BL gt= 0)PUSH BL sinon eacutechange de AL et BLPOP AL de telle sorte max soit dans AL
saut RET
b) passage par la pileLes valeurs des paramegravetres sont empileacutees Il peut y en avoir un nombre quelconque Le SSP reacutecupegravere les valeurs dans la pileEx le SSP agrave ladresse 40 utilise la pile pour passer les paramegravetres et reccediloit le reacutesultat dans la pile Lappel slsquoeacutecrit
PUSH AX donneacutee1 preacutealablement rangeacutee dans AXPUSH BX donneacutee2 preacutealablement rangeacutee dans BXCALL 40POP AX reacutecupeacuteration du reacutesultat dans AX par exemple
30
Le SSP peut slsquoeacutecrire ORG 40POP CL adresse de retour empileacutee par le CALLPOP BL deuxiegraveme paramegravetrePOP AL premier paramegravetreCMP BL ALJNS saut si AL gt= BLPUSH BL sinon eacutechange de AL et BLPOP AL de telle sorte que le max soit dans AL
saut PUSH AL reacutesultat dans la pilePUSH CL adresse de retour dans la pileRET deacutepile ladresse de retour
Le programme apparaicirct plus complexe Mais il faut noter que dans les langages dassemblage reacuteels on peut acceacuteder aux valeurs de la pile sans deacutepiler ce qui simplifie le deacutebut et la fin du SSP
ad retourdonneacutee 2donneacutee 1
reacutesultat
pile apregraves le CALL
pile apregraves le RET
13
6 Instructions diverses
END fin du programme (une seule sur la derniegravere ligne)
HALT arrecirct de lexeacutecution (eacuteventuellement plusieurs)DB constante deacutefinit une donneacutee (laquo Define Byte raquo)
14
JMP debut occupe les mots 0 et 1 DB 5 mot 2 (donneacutee 1)DB 2 mot 3 (donneacutee 2)DB 0 mot 4 (reacutesultat)
debutMOV AL [2] premiegravere instruction du programmeMOV BL [3]ADD AL BL reacutesultat dans ALMOV [4] ALEND les mots dadresse 2 et 3 ont eacuteteacutes
additionneacutes et le reacutesultat rangeacute dans le mot 4
Exemple de programme
Nous prenons lhabitude de placer les donneacutees en deacutebut de meacutemoire avec un JMP qui les saute pour aller au deacutebut du programme (car le compteur ordinal est initialiseacute agrave 0) En effet si on place les donneacutees apregraves le programme on ne peut connaicirctre leurs adresses quapregraves avoir eacutecrit tout le programme ce qui nest guegravere pratique
Zone des donneacutees etreacutesultats
15
Les conditionnelles
si condition alors cas_vrai
sinon cas_faux
fsi
ougrave condition slsquoeacutecrit op1 opeacuterateur op2 avec gt lt gt= lt= = = comme opeacuterateurs
En assembleur il ny a pas dinstruction conditionnelle si alors sinon Il faut la construire avec des branchements conditionnels et inconditionnels Le scheacutema de traduction standard utiliseacute par les compilateurs pour traduire les conditionnelles en langage machine est le suivant
16
MOV AL op1 MOV BL op2 ou autres registres
CMP AL BL ou BL ALJ vrai instructions du cas_fauxJMP fin
vrai instruction du cas_vrai
finougrave J est un des branchements possibles (JZ JNZ JS ou JNS) en fonction de la condition
condition traduction explicationop1 = op2 CMP AL BL puis JZ op1-op2 = 0op1 = op2 CMP AL BL puis JNZ op1-op2 = 0op1 lt op2 CMP AL BL puis JS op1-op2 lt 0op1 gt op2 CMP BL AL puis JS op2-op1 lt 0op1 gt= op2 CMP AL BL puis JNS op1-op2 gt= 0op1 lt= op2 CMP BL AL puis JNS op2-op1 gt= 0
17
Cas particulier du si sans sinon
si condition alors
cas_vrai
fsiLe scheacutema geacuteneacuteral est inutilement compliqueacute car cas_faux est vide Il est preacutefeacuterable de prendre la neacutegation de la condition et de sauter agrave lrsquoeacutetiquette fin si cette neacutegation est vraie (autrement dit laquo si la conditionest fausse alors je ne fais rien raquo)
Le scheacutema de traduction est le suivant MOV AL op1 MOV BL op2 ou autres registres CMP AL BL ou BL AL J fin instructions_du_cas_vraifin ougrave le choix de J et lrsquoordre des opeacuterandes est donneacutee par le tableau preacuteceacutedent pour la neacutegation de la condition
18
Les iteacuterations (avec compteur ndash pour)
pour i de 1 agrave limite fairebloc_agrave_reacutepeacuteter
fpour
Lrsquoiteacuteration se traduit comme suit
MOV registre1 1 compteur iMOV registre2 limite
reCMP registre2 registre1JS fin limite-compteurlt0 cest agrave dire
compteurgtlimitebloc_agrave_reacutepeacuteterINC registre1 increacutementation de iJMP re
fin
19
Parcours drsquoun ensemble de donneacutees conseacutecutives lrsquoadressage indirect
Si on veut parcourir et traiter un ensemble de donneacutees conseacutecutives en meacutemoire (un tableau de donneacutees) il faut pouvoir deacutesigner successivement tous les eacuteleacutements de cet ensemble dans une iteacuteration Avec laquo lrsquoadressage direct raquo qui donne directement lrsquoadresse du mot voulu (ex [3]) ce nrsquoest pas possible On ne peut qursquoeacutecrire ADD AL [3]ADD AL [4]ADD AL [5] etcLrsquoassembleur offre laquo lrsquoadressage indirect raquo pour reacutesoudre ce problegraveme On utilise la notation [AL] qui signifie laquo le contenu du mot dont ladresse est dans le registre AL raquo Il suffit de mettre dans AL la premiegravere adresse voulue puis dincreacutementer AL de 1 en 1 dans une iteacuteration pour acceacuteder gracircce agrave la notation [AL] successivement agrave toutes les donneacutees de lensemble
20
Cest un des 5 modes dadressage classiques en assembleur - lrsquoadressage immeacutediat 8 (constante 8)- lrsquoadressage direct [8] (mot meacutemoire dadresse 8)- lrsquoadressage indirect [AL] (le registre AL contient ladresse voulue)- lrsquoadressage baseacute [AL+4] (le contenu de AL + 4 est ladresse voulue) Nexiste pas dans la machine simuleacutee- lrsquoadressage indexeacute [AL+BL] (le contenu de AL + le contenu de BL est lrsquoadresse voulue) Nexiste pas dans la machine simuleacutee
Attention dans la machine simuleacutee ladressage indirect nest autoriseacute que dans les instructions MOV ce qui est tregraves restrictif Ex
MOV DL [AL] Copie le mot [AL] dans DLMOV [CL] AL Copie AL dans le mot [CL]
21
Les entreacuteessorties de base srsquoeffectuent via des ports Les ports sont des adresses speacuteciales associeacutees aux peacuteripheacuteriques drsquoentreacuteesortie et repeacutereacutees par des numeacuteros Un octet peut ecirctre lu ou eacutecrit dans ces ports gracircce aux instructions IN et OUT qui utilisent le registre AL
IN 00 entreacutee depuis le port 00 vers ALOUT 01 sortie depuis AL vers le port 01
Dans le simulateur le port de sortie 01 est connecteacute agrave 2 feux tricolores selon la valeur de loctet transmis dans AL ces 2 feux srsquoallument dune certaine maniegravere bits 7 6 5 4 3 2 1 0 rouge orange vert rouge orange vert non utiliseacutes feu de gauche feu de droiteLe port dentreacutee 00 est connecteacute au clavier Le registre AL reccediloit le code ASCII de la touche du clavier enfonceacutee
Les entreacuteessorties
22
Cette forme drsquoentreacuteesortie sans condition correspond aux peacuteripheacuteriques qui sont toujours disponibles comme les interrupteurs les voyants lumineux Dans le cas de peacuteripheacuteriques plus complexes il faut recourir aux entreacuteessorties avec condition il faut connaicirctre lrsquoeacutetat du peacuteripheacuterique avant denvoyer ou de lire des informations (ex reacuteseau disque ) Comme nous lrsquoavons vu dans la partie sur le mateacuteriel il existe deux approches principales lrsquoattente active et les entreacuteessorties avec interruptions
23
Les manipulations de bits
1) Deacutecalage et rotations Ces opeacuterations deacutecalent vers la gauche ou vers la droite les bits
drsquoun registre Elles peuvent ecirctre utiliseacutees pour tester un bit quelconque (on le deacutecale tout agrave droite on annule les autres bits et on teste le mot) ou encore pour diviser ou multiplier rapidement un entier par une puissance de 2
SHL CLDeacutecalage agrave gauche le bit de poids fort est perdule bit de poids faible devient 0 (SHift Left)
SHR DL Deacutecalage agrave droite le bit de poids faible est perdu le bit de poids fort devient 0 (SHift Right)
ROL AL Rotation agrave gauche le bit de poids fort devient le bit de poids faible (ROtate Left)
ROR BL Rotation agrave droite le bit de poids faible devient le bit de poids fort (ROtate Right)
24
2) Les instructions logiquesLes instructions logiques effectuent des opeacuterations logiques bit agrave bit (chaque bit est calculeacute indeacutependamment des autres) ET OU et OU exclusif 0 0 1 1 0 0 1 1 0 0 1 1 OU 0 1 0 1 ET 0 1 0 1 OU EX 0 1 0 1 0 1 1 1 0 0 0 1 0 1 1 0a) Linstruction OR OR AL BL AL = AL OU BL OR est souvent utiliseacute pour forcer certains bits agrave 1 gracircce agrave un laquo masque raquo ayant des 1 agrave ces positions Exemple
MOV BL F0 masque BL 11110000MOV AL 55 AL 01010101OR AL BL 11110101
Les 4ers bits de AL sont forceacutes agrave 1 les 4 autres sont inchangeacutesb) Linstruction AND AND AL BL AL = AL ET BL AND est souvent utiliseacute pour forcer certains bits agrave 0 gracircce agrave un laquo masque raquo ayant des 0 agrave ces positions
25
Exemple MOV BL 0F masque BL 00001111MOV AL 55 AL 01010101AND AL BL 00000101
Les 4ers bits de AL sont forceacutes agrave 0 les 4 autres sont inchangeacutesc) Linstruction XOR XOR AL BL AL = AL OU EXCLUSIF BL XOR est souvent utiliseacute pour inverser certains bits gracircce agrave un laquo masque raquo ayant des 1 agrave ces positions
Exemple MOV BL F0 masque BL 11110000MOV AL 55 AL 01010101XOR AL BL 10100101Les 4ers bits de AL sont inverseacutes les 4 autres sont inchangeacutes
Remarque on na pas besoin de recourir agrave lassembleur pour manipuler des bits ces opeacuterateurs existent dans beaucoup de langages eacutevolueacutes comme Java En Java SHL slsquoeacutecrit gtgt SHR slsquoeacutecrit ltlt OR slsquoeacutecrit j AND slsquoeacutecrit amp et XOR slsquoeacutecrit ^ Exemple short i = 13 i a la valeur 0000000000001101 i = i ltlt 2 i prend la valeur 0000000000110100
26
Les sous programmes (SSP)
Un SSP est une suite dinstructions effectuant un certain traitement et regroupeacutees par commoditeacute deacutecoupage du programme en petits lsquomorceauxrsquo morceau utiliseacute plusieurs fois hellipUn SSP est repeacutereacute par ladresse de sa premiegravere instruction Lexeacutecution du SSP est deacuteclencheacutee par un programme appelant Un SSP peut lui mecircme en appeler un autre et ainsi de suiteLappel du SSP est effectueacute par linstruction CALL
CALL adresse (ex CALL 50)Lexeacutecution se poursuit agrave ladresse indiqueacutee dans le CALL La fin du SSP est marqueacutee par linstruction
RETLe processeur revient implicitement agrave linstruction placeacutee immeacutediatement apregraves le CALL car lrsquoadresse de retour est empileacutee
27
Ladresse de retour utiliseacutee par RET est ajouteacutee sur la pile par linstruction CALL Lorsque le processeur exeacutecute linstruction RET il deacutepile ladresse de la pile et la range dans le compteur ordinalCe meacutecanisme marche mecircme dans le cas des appels imbriqueacutes (un CALL dans un SSP vers un autre SSP) et dans le cas des appels reacutecursifs (un SSP qui sappelle lui mecircme un certain nombre de fois)
CALL 40
CALL 90
RET
RET
0
40
904546
1213
13
4613
13
pile
4613
28
Le plus souvent le SSP effectue un traitement sur des donneacutees (ou paramegravetres) qui sont fournies par le programme appelant et produit un reacutesultat qui est retourneacute agrave ce programmePlusieurs strateacutegies pour passer les paramegravetres a) passage par les registresLes valeurs des paramegravetres et du reacutesultat sont contenues dans des registres bien deacutefinis Meacutethode simple qui ne convient que si le nombre de paramegravetres est faible car il y a peu de registresEx le SSP agrave ladresse hexadeacutecimale 30 calcule le maximum de 2 entiers naturels On convient que les entiers sont passeacutes par les registres AL et BL et que le reacutesultat est placeacute dans le registre AL Lappel slsquoeacutecrit
MOV AL donneacutee1MOV BL donneacutee2CALL 30 le reacutesultat est disponible dans AL
29
Le SSP slsquoeacutecrit ORG 30 directive qui indique que le code qui suit est
situeacute agrave ladresse 30 Ne prend pas de place en meacutemoire
CMP AL BLJNS saut si AL gt= BL (AL-BL gt= 0)PUSH BL sinon eacutechange de AL et BLPOP AL de telle sorte max soit dans AL
saut RET
b) passage par la pileLes valeurs des paramegravetres sont empileacutees Il peut y en avoir un nombre quelconque Le SSP reacutecupegravere les valeurs dans la pileEx le SSP agrave ladresse 40 utilise la pile pour passer les paramegravetres et reccediloit le reacutesultat dans la pile Lappel slsquoeacutecrit
PUSH AX donneacutee1 preacutealablement rangeacutee dans AXPUSH BX donneacutee2 preacutealablement rangeacutee dans BXCALL 40POP AX reacutecupeacuteration du reacutesultat dans AX par exemple
30
Le SSP peut slsquoeacutecrire ORG 40POP CL adresse de retour empileacutee par le CALLPOP BL deuxiegraveme paramegravetrePOP AL premier paramegravetreCMP BL ALJNS saut si AL gt= BLPUSH BL sinon eacutechange de AL et BLPOP AL de telle sorte que le max soit dans AL
saut PUSH AL reacutesultat dans la pilePUSH CL adresse de retour dans la pileRET deacutepile ladresse de retour
Le programme apparaicirct plus complexe Mais il faut noter que dans les langages dassemblage reacuteels on peut acceacuteder aux valeurs de la pile sans deacutepiler ce qui simplifie le deacutebut et la fin du SSP
ad retourdonneacutee 2donneacutee 1
reacutesultat
pile apregraves le CALL
pile apregraves le RET
14
JMP debut occupe les mots 0 et 1 DB 5 mot 2 (donneacutee 1)DB 2 mot 3 (donneacutee 2)DB 0 mot 4 (reacutesultat)
debutMOV AL [2] premiegravere instruction du programmeMOV BL [3]ADD AL BL reacutesultat dans ALMOV [4] ALEND les mots dadresse 2 et 3 ont eacuteteacutes
additionneacutes et le reacutesultat rangeacute dans le mot 4
Exemple de programme
Nous prenons lhabitude de placer les donneacutees en deacutebut de meacutemoire avec un JMP qui les saute pour aller au deacutebut du programme (car le compteur ordinal est initialiseacute agrave 0) En effet si on place les donneacutees apregraves le programme on ne peut connaicirctre leurs adresses quapregraves avoir eacutecrit tout le programme ce qui nest guegravere pratique
Zone des donneacutees etreacutesultats
15
Les conditionnelles
si condition alors cas_vrai
sinon cas_faux
fsi
ougrave condition slsquoeacutecrit op1 opeacuterateur op2 avec gt lt gt= lt= = = comme opeacuterateurs
En assembleur il ny a pas dinstruction conditionnelle si alors sinon Il faut la construire avec des branchements conditionnels et inconditionnels Le scheacutema de traduction standard utiliseacute par les compilateurs pour traduire les conditionnelles en langage machine est le suivant
16
MOV AL op1 MOV BL op2 ou autres registres
CMP AL BL ou BL ALJ vrai instructions du cas_fauxJMP fin
vrai instruction du cas_vrai
finougrave J est un des branchements possibles (JZ JNZ JS ou JNS) en fonction de la condition
condition traduction explicationop1 = op2 CMP AL BL puis JZ op1-op2 = 0op1 = op2 CMP AL BL puis JNZ op1-op2 = 0op1 lt op2 CMP AL BL puis JS op1-op2 lt 0op1 gt op2 CMP BL AL puis JS op2-op1 lt 0op1 gt= op2 CMP AL BL puis JNS op1-op2 gt= 0op1 lt= op2 CMP BL AL puis JNS op2-op1 gt= 0
17
Cas particulier du si sans sinon
si condition alors
cas_vrai
fsiLe scheacutema geacuteneacuteral est inutilement compliqueacute car cas_faux est vide Il est preacutefeacuterable de prendre la neacutegation de la condition et de sauter agrave lrsquoeacutetiquette fin si cette neacutegation est vraie (autrement dit laquo si la conditionest fausse alors je ne fais rien raquo)
Le scheacutema de traduction est le suivant MOV AL op1 MOV BL op2 ou autres registres CMP AL BL ou BL AL J fin instructions_du_cas_vraifin ougrave le choix de J et lrsquoordre des opeacuterandes est donneacutee par le tableau preacuteceacutedent pour la neacutegation de la condition
18
Les iteacuterations (avec compteur ndash pour)
pour i de 1 agrave limite fairebloc_agrave_reacutepeacuteter
fpour
Lrsquoiteacuteration se traduit comme suit
MOV registre1 1 compteur iMOV registre2 limite
reCMP registre2 registre1JS fin limite-compteurlt0 cest agrave dire
compteurgtlimitebloc_agrave_reacutepeacuteterINC registre1 increacutementation de iJMP re
fin
19
Parcours drsquoun ensemble de donneacutees conseacutecutives lrsquoadressage indirect
Si on veut parcourir et traiter un ensemble de donneacutees conseacutecutives en meacutemoire (un tableau de donneacutees) il faut pouvoir deacutesigner successivement tous les eacuteleacutements de cet ensemble dans une iteacuteration Avec laquo lrsquoadressage direct raquo qui donne directement lrsquoadresse du mot voulu (ex [3]) ce nrsquoest pas possible On ne peut qursquoeacutecrire ADD AL [3]ADD AL [4]ADD AL [5] etcLrsquoassembleur offre laquo lrsquoadressage indirect raquo pour reacutesoudre ce problegraveme On utilise la notation [AL] qui signifie laquo le contenu du mot dont ladresse est dans le registre AL raquo Il suffit de mettre dans AL la premiegravere adresse voulue puis dincreacutementer AL de 1 en 1 dans une iteacuteration pour acceacuteder gracircce agrave la notation [AL] successivement agrave toutes les donneacutees de lensemble
20
Cest un des 5 modes dadressage classiques en assembleur - lrsquoadressage immeacutediat 8 (constante 8)- lrsquoadressage direct [8] (mot meacutemoire dadresse 8)- lrsquoadressage indirect [AL] (le registre AL contient ladresse voulue)- lrsquoadressage baseacute [AL+4] (le contenu de AL + 4 est ladresse voulue) Nexiste pas dans la machine simuleacutee- lrsquoadressage indexeacute [AL+BL] (le contenu de AL + le contenu de BL est lrsquoadresse voulue) Nexiste pas dans la machine simuleacutee
Attention dans la machine simuleacutee ladressage indirect nest autoriseacute que dans les instructions MOV ce qui est tregraves restrictif Ex
MOV DL [AL] Copie le mot [AL] dans DLMOV [CL] AL Copie AL dans le mot [CL]
21
Les entreacuteessorties de base srsquoeffectuent via des ports Les ports sont des adresses speacuteciales associeacutees aux peacuteripheacuteriques drsquoentreacuteesortie et repeacutereacutees par des numeacuteros Un octet peut ecirctre lu ou eacutecrit dans ces ports gracircce aux instructions IN et OUT qui utilisent le registre AL
IN 00 entreacutee depuis le port 00 vers ALOUT 01 sortie depuis AL vers le port 01
Dans le simulateur le port de sortie 01 est connecteacute agrave 2 feux tricolores selon la valeur de loctet transmis dans AL ces 2 feux srsquoallument dune certaine maniegravere bits 7 6 5 4 3 2 1 0 rouge orange vert rouge orange vert non utiliseacutes feu de gauche feu de droiteLe port dentreacutee 00 est connecteacute au clavier Le registre AL reccediloit le code ASCII de la touche du clavier enfonceacutee
Les entreacuteessorties
22
Cette forme drsquoentreacuteesortie sans condition correspond aux peacuteripheacuteriques qui sont toujours disponibles comme les interrupteurs les voyants lumineux Dans le cas de peacuteripheacuteriques plus complexes il faut recourir aux entreacuteessorties avec condition il faut connaicirctre lrsquoeacutetat du peacuteripheacuterique avant denvoyer ou de lire des informations (ex reacuteseau disque ) Comme nous lrsquoavons vu dans la partie sur le mateacuteriel il existe deux approches principales lrsquoattente active et les entreacuteessorties avec interruptions
23
Les manipulations de bits
1) Deacutecalage et rotations Ces opeacuterations deacutecalent vers la gauche ou vers la droite les bits
drsquoun registre Elles peuvent ecirctre utiliseacutees pour tester un bit quelconque (on le deacutecale tout agrave droite on annule les autres bits et on teste le mot) ou encore pour diviser ou multiplier rapidement un entier par une puissance de 2
SHL CLDeacutecalage agrave gauche le bit de poids fort est perdule bit de poids faible devient 0 (SHift Left)
SHR DL Deacutecalage agrave droite le bit de poids faible est perdu le bit de poids fort devient 0 (SHift Right)
ROL AL Rotation agrave gauche le bit de poids fort devient le bit de poids faible (ROtate Left)
ROR BL Rotation agrave droite le bit de poids faible devient le bit de poids fort (ROtate Right)
24
2) Les instructions logiquesLes instructions logiques effectuent des opeacuterations logiques bit agrave bit (chaque bit est calculeacute indeacutependamment des autres) ET OU et OU exclusif 0 0 1 1 0 0 1 1 0 0 1 1 OU 0 1 0 1 ET 0 1 0 1 OU EX 0 1 0 1 0 1 1 1 0 0 0 1 0 1 1 0a) Linstruction OR OR AL BL AL = AL OU BL OR est souvent utiliseacute pour forcer certains bits agrave 1 gracircce agrave un laquo masque raquo ayant des 1 agrave ces positions Exemple
MOV BL F0 masque BL 11110000MOV AL 55 AL 01010101OR AL BL 11110101
Les 4ers bits de AL sont forceacutes agrave 1 les 4 autres sont inchangeacutesb) Linstruction AND AND AL BL AL = AL ET BL AND est souvent utiliseacute pour forcer certains bits agrave 0 gracircce agrave un laquo masque raquo ayant des 0 agrave ces positions
25
Exemple MOV BL 0F masque BL 00001111MOV AL 55 AL 01010101AND AL BL 00000101
Les 4ers bits de AL sont forceacutes agrave 0 les 4 autres sont inchangeacutesc) Linstruction XOR XOR AL BL AL = AL OU EXCLUSIF BL XOR est souvent utiliseacute pour inverser certains bits gracircce agrave un laquo masque raquo ayant des 1 agrave ces positions
Exemple MOV BL F0 masque BL 11110000MOV AL 55 AL 01010101XOR AL BL 10100101Les 4ers bits de AL sont inverseacutes les 4 autres sont inchangeacutes
Remarque on na pas besoin de recourir agrave lassembleur pour manipuler des bits ces opeacuterateurs existent dans beaucoup de langages eacutevolueacutes comme Java En Java SHL slsquoeacutecrit gtgt SHR slsquoeacutecrit ltlt OR slsquoeacutecrit j AND slsquoeacutecrit amp et XOR slsquoeacutecrit ^ Exemple short i = 13 i a la valeur 0000000000001101 i = i ltlt 2 i prend la valeur 0000000000110100
26
Les sous programmes (SSP)
Un SSP est une suite dinstructions effectuant un certain traitement et regroupeacutees par commoditeacute deacutecoupage du programme en petits lsquomorceauxrsquo morceau utiliseacute plusieurs fois hellipUn SSP est repeacutereacute par ladresse de sa premiegravere instruction Lexeacutecution du SSP est deacuteclencheacutee par un programme appelant Un SSP peut lui mecircme en appeler un autre et ainsi de suiteLappel du SSP est effectueacute par linstruction CALL
CALL adresse (ex CALL 50)Lexeacutecution se poursuit agrave ladresse indiqueacutee dans le CALL La fin du SSP est marqueacutee par linstruction
RETLe processeur revient implicitement agrave linstruction placeacutee immeacutediatement apregraves le CALL car lrsquoadresse de retour est empileacutee
27
Ladresse de retour utiliseacutee par RET est ajouteacutee sur la pile par linstruction CALL Lorsque le processeur exeacutecute linstruction RET il deacutepile ladresse de la pile et la range dans le compteur ordinalCe meacutecanisme marche mecircme dans le cas des appels imbriqueacutes (un CALL dans un SSP vers un autre SSP) et dans le cas des appels reacutecursifs (un SSP qui sappelle lui mecircme un certain nombre de fois)
CALL 40
CALL 90
RET
RET
0
40
904546
1213
13
4613
13
pile
4613
28
Le plus souvent le SSP effectue un traitement sur des donneacutees (ou paramegravetres) qui sont fournies par le programme appelant et produit un reacutesultat qui est retourneacute agrave ce programmePlusieurs strateacutegies pour passer les paramegravetres a) passage par les registresLes valeurs des paramegravetres et du reacutesultat sont contenues dans des registres bien deacutefinis Meacutethode simple qui ne convient que si le nombre de paramegravetres est faible car il y a peu de registresEx le SSP agrave ladresse hexadeacutecimale 30 calcule le maximum de 2 entiers naturels On convient que les entiers sont passeacutes par les registres AL et BL et que le reacutesultat est placeacute dans le registre AL Lappel slsquoeacutecrit
MOV AL donneacutee1MOV BL donneacutee2CALL 30 le reacutesultat est disponible dans AL
29
Le SSP slsquoeacutecrit ORG 30 directive qui indique que le code qui suit est
situeacute agrave ladresse 30 Ne prend pas de place en meacutemoire
CMP AL BLJNS saut si AL gt= BL (AL-BL gt= 0)PUSH BL sinon eacutechange de AL et BLPOP AL de telle sorte max soit dans AL
saut RET
b) passage par la pileLes valeurs des paramegravetres sont empileacutees Il peut y en avoir un nombre quelconque Le SSP reacutecupegravere les valeurs dans la pileEx le SSP agrave ladresse 40 utilise la pile pour passer les paramegravetres et reccediloit le reacutesultat dans la pile Lappel slsquoeacutecrit
PUSH AX donneacutee1 preacutealablement rangeacutee dans AXPUSH BX donneacutee2 preacutealablement rangeacutee dans BXCALL 40POP AX reacutecupeacuteration du reacutesultat dans AX par exemple
30
Le SSP peut slsquoeacutecrire ORG 40POP CL adresse de retour empileacutee par le CALLPOP BL deuxiegraveme paramegravetrePOP AL premier paramegravetreCMP BL ALJNS saut si AL gt= BLPUSH BL sinon eacutechange de AL et BLPOP AL de telle sorte que le max soit dans AL
saut PUSH AL reacutesultat dans la pilePUSH CL adresse de retour dans la pileRET deacutepile ladresse de retour
Le programme apparaicirct plus complexe Mais il faut noter que dans les langages dassemblage reacuteels on peut acceacuteder aux valeurs de la pile sans deacutepiler ce qui simplifie le deacutebut et la fin du SSP
ad retourdonneacutee 2donneacutee 1
reacutesultat
pile apregraves le CALL
pile apregraves le RET
15
Les conditionnelles
si condition alors cas_vrai
sinon cas_faux
fsi
ougrave condition slsquoeacutecrit op1 opeacuterateur op2 avec gt lt gt= lt= = = comme opeacuterateurs
En assembleur il ny a pas dinstruction conditionnelle si alors sinon Il faut la construire avec des branchements conditionnels et inconditionnels Le scheacutema de traduction standard utiliseacute par les compilateurs pour traduire les conditionnelles en langage machine est le suivant
16
MOV AL op1 MOV BL op2 ou autres registres
CMP AL BL ou BL ALJ vrai instructions du cas_fauxJMP fin
vrai instruction du cas_vrai
finougrave J est un des branchements possibles (JZ JNZ JS ou JNS) en fonction de la condition
condition traduction explicationop1 = op2 CMP AL BL puis JZ op1-op2 = 0op1 = op2 CMP AL BL puis JNZ op1-op2 = 0op1 lt op2 CMP AL BL puis JS op1-op2 lt 0op1 gt op2 CMP BL AL puis JS op2-op1 lt 0op1 gt= op2 CMP AL BL puis JNS op1-op2 gt= 0op1 lt= op2 CMP BL AL puis JNS op2-op1 gt= 0
17
Cas particulier du si sans sinon
si condition alors
cas_vrai
fsiLe scheacutema geacuteneacuteral est inutilement compliqueacute car cas_faux est vide Il est preacutefeacuterable de prendre la neacutegation de la condition et de sauter agrave lrsquoeacutetiquette fin si cette neacutegation est vraie (autrement dit laquo si la conditionest fausse alors je ne fais rien raquo)
Le scheacutema de traduction est le suivant MOV AL op1 MOV BL op2 ou autres registres CMP AL BL ou BL AL J fin instructions_du_cas_vraifin ougrave le choix de J et lrsquoordre des opeacuterandes est donneacutee par le tableau preacuteceacutedent pour la neacutegation de la condition
18
Les iteacuterations (avec compteur ndash pour)
pour i de 1 agrave limite fairebloc_agrave_reacutepeacuteter
fpour
Lrsquoiteacuteration se traduit comme suit
MOV registre1 1 compteur iMOV registre2 limite
reCMP registre2 registre1JS fin limite-compteurlt0 cest agrave dire
compteurgtlimitebloc_agrave_reacutepeacuteterINC registre1 increacutementation de iJMP re
fin
19
Parcours drsquoun ensemble de donneacutees conseacutecutives lrsquoadressage indirect
Si on veut parcourir et traiter un ensemble de donneacutees conseacutecutives en meacutemoire (un tableau de donneacutees) il faut pouvoir deacutesigner successivement tous les eacuteleacutements de cet ensemble dans une iteacuteration Avec laquo lrsquoadressage direct raquo qui donne directement lrsquoadresse du mot voulu (ex [3]) ce nrsquoest pas possible On ne peut qursquoeacutecrire ADD AL [3]ADD AL [4]ADD AL [5] etcLrsquoassembleur offre laquo lrsquoadressage indirect raquo pour reacutesoudre ce problegraveme On utilise la notation [AL] qui signifie laquo le contenu du mot dont ladresse est dans le registre AL raquo Il suffit de mettre dans AL la premiegravere adresse voulue puis dincreacutementer AL de 1 en 1 dans une iteacuteration pour acceacuteder gracircce agrave la notation [AL] successivement agrave toutes les donneacutees de lensemble
20
Cest un des 5 modes dadressage classiques en assembleur - lrsquoadressage immeacutediat 8 (constante 8)- lrsquoadressage direct [8] (mot meacutemoire dadresse 8)- lrsquoadressage indirect [AL] (le registre AL contient ladresse voulue)- lrsquoadressage baseacute [AL+4] (le contenu de AL + 4 est ladresse voulue) Nexiste pas dans la machine simuleacutee- lrsquoadressage indexeacute [AL+BL] (le contenu de AL + le contenu de BL est lrsquoadresse voulue) Nexiste pas dans la machine simuleacutee
Attention dans la machine simuleacutee ladressage indirect nest autoriseacute que dans les instructions MOV ce qui est tregraves restrictif Ex
MOV DL [AL] Copie le mot [AL] dans DLMOV [CL] AL Copie AL dans le mot [CL]
21
Les entreacuteessorties de base srsquoeffectuent via des ports Les ports sont des adresses speacuteciales associeacutees aux peacuteripheacuteriques drsquoentreacuteesortie et repeacutereacutees par des numeacuteros Un octet peut ecirctre lu ou eacutecrit dans ces ports gracircce aux instructions IN et OUT qui utilisent le registre AL
IN 00 entreacutee depuis le port 00 vers ALOUT 01 sortie depuis AL vers le port 01
Dans le simulateur le port de sortie 01 est connecteacute agrave 2 feux tricolores selon la valeur de loctet transmis dans AL ces 2 feux srsquoallument dune certaine maniegravere bits 7 6 5 4 3 2 1 0 rouge orange vert rouge orange vert non utiliseacutes feu de gauche feu de droiteLe port dentreacutee 00 est connecteacute au clavier Le registre AL reccediloit le code ASCII de la touche du clavier enfonceacutee
Les entreacuteessorties
22
Cette forme drsquoentreacuteesortie sans condition correspond aux peacuteripheacuteriques qui sont toujours disponibles comme les interrupteurs les voyants lumineux Dans le cas de peacuteripheacuteriques plus complexes il faut recourir aux entreacuteessorties avec condition il faut connaicirctre lrsquoeacutetat du peacuteripheacuterique avant denvoyer ou de lire des informations (ex reacuteseau disque ) Comme nous lrsquoavons vu dans la partie sur le mateacuteriel il existe deux approches principales lrsquoattente active et les entreacuteessorties avec interruptions
23
Les manipulations de bits
1) Deacutecalage et rotations Ces opeacuterations deacutecalent vers la gauche ou vers la droite les bits
drsquoun registre Elles peuvent ecirctre utiliseacutees pour tester un bit quelconque (on le deacutecale tout agrave droite on annule les autres bits et on teste le mot) ou encore pour diviser ou multiplier rapidement un entier par une puissance de 2
SHL CLDeacutecalage agrave gauche le bit de poids fort est perdule bit de poids faible devient 0 (SHift Left)
SHR DL Deacutecalage agrave droite le bit de poids faible est perdu le bit de poids fort devient 0 (SHift Right)
ROL AL Rotation agrave gauche le bit de poids fort devient le bit de poids faible (ROtate Left)
ROR BL Rotation agrave droite le bit de poids faible devient le bit de poids fort (ROtate Right)
24
2) Les instructions logiquesLes instructions logiques effectuent des opeacuterations logiques bit agrave bit (chaque bit est calculeacute indeacutependamment des autres) ET OU et OU exclusif 0 0 1 1 0 0 1 1 0 0 1 1 OU 0 1 0 1 ET 0 1 0 1 OU EX 0 1 0 1 0 1 1 1 0 0 0 1 0 1 1 0a) Linstruction OR OR AL BL AL = AL OU BL OR est souvent utiliseacute pour forcer certains bits agrave 1 gracircce agrave un laquo masque raquo ayant des 1 agrave ces positions Exemple
MOV BL F0 masque BL 11110000MOV AL 55 AL 01010101OR AL BL 11110101
Les 4ers bits de AL sont forceacutes agrave 1 les 4 autres sont inchangeacutesb) Linstruction AND AND AL BL AL = AL ET BL AND est souvent utiliseacute pour forcer certains bits agrave 0 gracircce agrave un laquo masque raquo ayant des 0 agrave ces positions
25
Exemple MOV BL 0F masque BL 00001111MOV AL 55 AL 01010101AND AL BL 00000101
Les 4ers bits de AL sont forceacutes agrave 0 les 4 autres sont inchangeacutesc) Linstruction XOR XOR AL BL AL = AL OU EXCLUSIF BL XOR est souvent utiliseacute pour inverser certains bits gracircce agrave un laquo masque raquo ayant des 1 agrave ces positions
Exemple MOV BL F0 masque BL 11110000MOV AL 55 AL 01010101XOR AL BL 10100101Les 4ers bits de AL sont inverseacutes les 4 autres sont inchangeacutes
Remarque on na pas besoin de recourir agrave lassembleur pour manipuler des bits ces opeacuterateurs existent dans beaucoup de langages eacutevolueacutes comme Java En Java SHL slsquoeacutecrit gtgt SHR slsquoeacutecrit ltlt OR slsquoeacutecrit j AND slsquoeacutecrit amp et XOR slsquoeacutecrit ^ Exemple short i = 13 i a la valeur 0000000000001101 i = i ltlt 2 i prend la valeur 0000000000110100
26
Les sous programmes (SSP)
Un SSP est une suite dinstructions effectuant un certain traitement et regroupeacutees par commoditeacute deacutecoupage du programme en petits lsquomorceauxrsquo morceau utiliseacute plusieurs fois hellipUn SSP est repeacutereacute par ladresse de sa premiegravere instruction Lexeacutecution du SSP est deacuteclencheacutee par un programme appelant Un SSP peut lui mecircme en appeler un autre et ainsi de suiteLappel du SSP est effectueacute par linstruction CALL
CALL adresse (ex CALL 50)Lexeacutecution se poursuit agrave ladresse indiqueacutee dans le CALL La fin du SSP est marqueacutee par linstruction
RETLe processeur revient implicitement agrave linstruction placeacutee immeacutediatement apregraves le CALL car lrsquoadresse de retour est empileacutee
27
Ladresse de retour utiliseacutee par RET est ajouteacutee sur la pile par linstruction CALL Lorsque le processeur exeacutecute linstruction RET il deacutepile ladresse de la pile et la range dans le compteur ordinalCe meacutecanisme marche mecircme dans le cas des appels imbriqueacutes (un CALL dans un SSP vers un autre SSP) et dans le cas des appels reacutecursifs (un SSP qui sappelle lui mecircme un certain nombre de fois)
CALL 40
CALL 90
RET
RET
0
40
904546
1213
13
4613
13
pile
4613
28
Le plus souvent le SSP effectue un traitement sur des donneacutees (ou paramegravetres) qui sont fournies par le programme appelant et produit un reacutesultat qui est retourneacute agrave ce programmePlusieurs strateacutegies pour passer les paramegravetres a) passage par les registresLes valeurs des paramegravetres et du reacutesultat sont contenues dans des registres bien deacutefinis Meacutethode simple qui ne convient que si le nombre de paramegravetres est faible car il y a peu de registresEx le SSP agrave ladresse hexadeacutecimale 30 calcule le maximum de 2 entiers naturels On convient que les entiers sont passeacutes par les registres AL et BL et que le reacutesultat est placeacute dans le registre AL Lappel slsquoeacutecrit
MOV AL donneacutee1MOV BL donneacutee2CALL 30 le reacutesultat est disponible dans AL
29
Le SSP slsquoeacutecrit ORG 30 directive qui indique que le code qui suit est
situeacute agrave ladresse 30 Ne prend pas de place en meacutemoire
CMP AL BLJNS saut si AL gt= BL (AL-BL gt= 0)PUSH BL sinon eacutechange de AL et BLPOP AL de telle sorte max soit dans AL
saut RET
b) passage par la pileLes valeurs des paramegravetres sont empileacutees Il peut y en avoir un nombre quelconque Le SSP reacutecupegravere les valeurs dans la pileEx le SSP agrave ladresse 40 utilise la pile pour passer les paramegravetres et reccediloit le reacutesultat dans la pile Lappel slsquoeacutecrit
PUSH AX donneacutee1 preacutealablement rangeacutee dans AXPUSH BX donneacutee2 preacutealablement rangeacutee dans BXCALL 40POP AX reacutecupeacuteration du reacutesultat dans AX par exemple
30
Le SSP peut slsquoeacutecrire ORG 40POP CL adresse de retour empileacutee par le CALLPOP BL deuxiegraveme paramegravetrePOP AL premier paramegravetreCMP BL ALJNS saut si AL gt= BLPUSH BL sinon eacutechange de AL et BLPOP AL de telle sorte que le max soit dans AL
saut PUSH AL reacutesultat dans la pilePUSH CL adresse de retour dans la pileRET deacutepile ladresse de retour
Le programme apparaicirct plus complexe Mais il faut noter que dans les langages dassemblage reacuteels on peut acceacuteder aux valeurs de la pile sans deacutepiler ce qui simplifie le deacutebut et la fin du SSP
ad retourdonneacutee 2donneacutee 1
reacutesultat
pile apregraves le CALL
pile apregraves le RET
16
MOV AL op1 MOV BL op2 ou autres registres
CMP AL BL ou BL ALJ vrai instructions du cas_fauxJMP fin
vrai instruction du cas_vrai
finougrave J est un des branchements possibles (JZ JNZ JS ou JNS) en fonction de la condition
condition traduction explicationop1 = op2 CMP AL BL puis JZ op1-op2 = 0op1 = op2 CMP AL BL puis JNZ op1-op2 = 0op1 lt op2 CMP AL BL puis JS op1-op2 lt 0op1 gt op2 CMP BL AL puis JS op2-op1 lt 0op1 gt= op2 CMP AL BL puis JNS op1-op2 gt= 0op1 lt= op2 CMP BL AL puis JNS op2-op1 gt= 0
17
Cas particulier du si sans sinon
si condition alors
cas_vrai
fsiLe scheacutema geacuteneacuteral est inutilement compliqueacute car cas_faux est vide Il est preacutefeacuterable de prendre la neacutegation de la condition et de sauter agrave lrsquoeacutetiquette fin si cette neacutegation est vraie (autrement dit laquo si la conditionest fausse alors je ne fais rien raquo)
Le scheacutema de traduction est le suivant MOV AL op1 MOV BL op2 ou autres registres CMP AL BL ou BL AL J fin instructions_du_cas_vraifin ougrave le choix de J et lrsquoordre des opeacuterandes est donneacutee par le tableau preacuteceacutedent pour la neacutegation de la condition
18
Les iteacuterations (avec compteur ndash pour)
pour i de 1 agrave limite fairebloc_agrave_reacutepeacuteter
fpour
Lrsquoiteacuteration se traduit comme suit
MOV registre1 1 compteur iMOV registre2 limite
reCMP registre2 registre1JS fin limite-compteurlt0 cest agrave dire
compteurgtlimitebloc_agrave_reacutepeacuteterINC registre1 increacutementation de iJMP re
fin
19
Parcours drsquoun ensemble de donneacutees conseacutecutives lrsquoadressage indirect
Si on veut parcourir et traiter un ensemble de donneacutees conseacutecutives en meacutemoire (un tableau de donneacutees) il faut pouvoir deacutesigner successivement tous les eacuteleacutements de cet ensemble dans une iteacuteration Avec laquo lrsquoadressage direct raquo qui donne directement lrsquoadresse du mot voulu (ex [3]) ce nrsquoest pas possible On ne peut qursquoeacutecrire ADD AL [3]ADD AL [4]ADD AL [5] etcLrsquoassembleur offre laquo lrsquoadressage indirect raquo pour reacutesoudre ce problegraveme On utilise la notation [AL] qui signifie laquo le contenu du mot dont ladresse est dans le registre AL raquo Il suffit de mettre dans AL la premiegravere adresse voulue puis dincreacutementer AL de 1 en 1 dans une iteacuteration pour acceacuteder gracircce agrave la notation [AL] successivement agrave toutes les donneacutees de lensemble
20
Cest un des 5 modes dadressage classiques en assembleur - lrsquoadressage immeacutediat 8 (constante 8)- lrsquoadressage direct [8] (mot meacutemoire dadresse 8)- lrsquoadressage indirect [AL] (le registre AL contient ladresse voulue)- lrsquoadressage baseacute [AL+4] (le contenu de AL + 4 est ladresse voulue) Nexiste pas dans la machine simuleacutee- lrsquoadressage indexeacute [AL+BL] (le contenu de AL + le contenu de BL est lrsquoadresse voulue) Nexiste pas dans la machine simuleacutee
Attention dans la machine simuleacutee ladressage indirect nest autoriseacute que dans les instructions MOV ce qui est tregraves restrictif Ex
MOV DL [AL] Copie le mot [AL] dans DLMOV [CL] AL Copie AL dans le mot [CL]
21
Les entreacuteessorties de base srsquoeffectuent via des ports Les ports sont des adresses speacuteciales associeacutees aux peacuteripheacuteriques drsquoentreacuteesortie et repeacutereacutees par des numeacuteros Un octet peut ecirctre lu ou eacutecrit dans ces ports gracircce aux instructions IN et OUT qui utilisent le registre AL
IN 00 entreacutee depuis le port 00 vers ALOUT 01 sortie depuis AL vers le port 01
Dans le simulateur le port de sortie 01 est connecteacute agrave 2 feux tricolores selon la valeur de loctet transmis dans AL ces 2 feux srsquoallument dune certaine maniegravere bits 7 6 5 4 3 2 1 0 rouge orange vert rouge orange vert non utiliseacutes feu de gauche feu de droiteLe port dentreacutee 00 est connecteacute au clavier Le registre AL reccediloit le code ASCII de la touche du clavier enfonceacutee
Les entreacuteessorties
22
Cette forme drsquoentreacuteesortie sans condition correspond aux peacuteripheacuteriques qui sont toujours disponibles comme les interrupteurs les voyants lumineux Dans le cas de peacuteripheacuteriques plus complexes il faut recourir aux entreacuteessorties avec condition il faut connaicirctre lrsquoeacutetat du peacuteripheacuterique avant denvoyer ou de lire des informations (ex reacuteseau disque ) Comme nous lrsquoavons vu dans la partie sur le mateacuteriel il existe deux approches principales lrsquoattente active et les entreacuteessorties avec interruptions
23
Les manipulations de bits
1) Deacutecalage et rotations Ces opeacuterations deacutecalent vers la gauche ou vers la droite les bits
drsquoun registre Elles peuvent ecirctre utiliseacutees pour tester un bit quelconque (on le deacutecale tout agrave droite on annule les autres bits et on teste le mot) ou encore pour diviser ou multiplier rapidement un entier par une puissance de 2
SHL CLDeacutecalage agrave gauche le bit de poids fort est perdule bit de poids faible devient 0 (SHift Left)
SHR DL Deacutecalage agrave droite le bit de poids faible est perdu le bit de poids fort devient 0 (SHift Right)
ROL AL Rotation agrave gauche le bit de poids fort devient le bit de poids faible (ROtate Left)
ROR BL Rotation agrave droite le bit de poids faible devient le bit de poids fort (ROtate Right)
24
2) Les instructions logiquesLes instructions logiques effectuent des opeacuterations logiques bit agrave bit (chaque bit est calculeacute indeacutependamment des autres) ET OU et OU exclusif 0 0 1 1 0 0 1 1 0 0 1 1 OU 0 1 0 1 ET 0 1 0 1 OU EX 0 1 0 1 0 1 1 1 0 0 0 1 0 1 1 0a) Linstruction OR OR AL BL AL = AL OU BL OR est souvent utiliseacute pour forcer certains bits agrave 1 gracircce agrave un laquo masque raquo ayant des 1 agrave ces positions Exemple
MOV BL F0 masque BL 11110000MOV AL 55 AL 01010101OR AL BL 11110101
Les 4ers bits de AL sont forceacutes agrave 1 les 4 autres sont inchangeacutesb) Linstruction AND AND AL BL AL = AL ET BL AND est souvent utiliseacute pour forcer certains bits agrave 0 gracircce agrave un laquo masque raquo ayant des 0 agrave ces positions
25
Exemple MOV BL 0F masque BL 00001111MOV AL 55 AL 01010101AND AL BL 00000101
Les 4ers bits de AL sont forceacutes agrave 0 les 4 autres sont inchangeacutesc) Linstruction XOR XOR AL BL AL = AL OU EXCLUSIF BL XOR est souvent utiliseacute pour inverser certains bits gracircce agrave un laquo masque raquo ayant des 1 agrave ces positions
Exemple MOV BL F0 masque BL 11110000MOV AL 55 AL 01010101XOR AL BL 10100101Les 4ers bits de AL sont inverseacutes les 4 autres sont inchangeacutes
Remarque on na pas besoin de recourir agrave lassembleur pour manipuler des bits ces opeacuterateurs existent dans beaucoup de langages eacutevolueacutes comme Java En Java SHL slsquoeacutecrit gtgt SHR slsquoeacutecrit ltlt OR slsquoeacutecrit j AND slsquoeacutecrit amp et XOR slsquoeacutecrit ^ Exemple short i = 13 i a la valeur 0000000000001101 i = i ltlt 2 i prend la valeur 0000000000110100
26
Les sous programmes (SSP)
Un SSP est une suite dinstructions effectuant un certain traitement et regroupeacutees par commoditeacute deacutecoupage du programme en petits lsquomorceauxrsquo morceau utiliseacute plusieurs fois hellipUn SSP est repeacutereacute par ladresse de sa premiegravere instruction Lexeacutecution du SSP est deacuteclencheacutee par un programme appelant Un SSP peut lui mecircme en appeler un autre et ainsi de suiteLappel du SSP est effectueacute par linstruction CALL
CALL adresse (ex CALL 50)Lexeacutecution se poursuit agrave ladresse indiqueacutee dans le CALL La fin du SSP est marqueacutee par linstruction
RETLe processeur revient implicitement agrave linstruction placeacutee immeacutediatement apregraves le CALL car lrsquoadresse de retour est empileacutee
27
Ladresse de retour utiliseacutee par RET est ajouteacutee sur la pile par linstruction CALL Lorsque le processeur exeacutecute linstruction RET il deacutepile ladresse de la pile et la range dans le compteur ordinalCe meacutecanisme marche mecircme dans le cas des appels imbriqueacutes (un CALL dans un SSP vers un autre SSP) et dans le cas des appels reacutecursifs (un SSP qui sappelle lui mecircme un certain nombre de fois)
CALL 40
CALL 90
RET
RET
0
40
904546
1213
13
4613
13
pile
4613
28
Le plus souvent le SSP effectue un traitement sur des donneacutees (ou paramegravetres) qui sont fournies par le programme appelant et produit un reacutesultat qui est retourneacute agrave ce programmePlusieurs strateacutegies pour passer les paramegravetres a) passage par les registresLes valeurs des paramegravetres et du reacutesultat sont contenues dans des registres bien deacutefinis Meacutethode simple qui ne convient que si le nombre de paramegravetres est faible car il y a peu de registresEx le SSP agrave ladresse hexadeacutecimale 30 calcule le maximum de 2 entiers naturels On convient que les entiers sont passeacutes par les registres AL et BL et que le reacutesultat est placeacute dans le registre AL Lappel slsquoeacutecrit
MOV AL donneacutee1MOV BL donneacutee2CALL 30 le reacutesultat est disponible dans AL
29
Le SSP slsquoeacutecrit ORG 30 directive qui indique que le code qui suit est
situeacute agrave ladresse 30 Ne prend pas de place en meacutemoire
CMP AL BLJNS saut si AL gt= BL (AL-BL gt= 0)PUSH BL sinon eacutechange de AL et BLPOP AL de telle sorte max soit dans AL
saut RET
b) passage par la pileLes valeurs des paramegravetres sont empileacutees Il peut y en avoir un nombre quelconque Le SSP reacutecupegravere les valeurs dans la pileEx le SSP agrave ladresse 40 utilise la pile pour passer les paramegravetres et reccediloit le reacutesultat dans la pile Lappel slsquoeacutecrit
PUSH AX donneacutee1 preacutealablement rangeacutee dans AXPUSH BX donneacutee2 preacutealablement rangeacutee dans BXCALL 40POP AX reacutecupeacuteration du reacutesultat dans AX par exemple
30
Le SSP peut slsquoeacutecrire ORG 40POP CL adresse de retour empileacutee par le CALLPOP BL deuxiegraveme paramegravetrePOP AL premier paramegravetreCMP BL ALJNS saut si AL gt= BLPUSH BL sinon eacutechange de AL et BLPOP AL de telle sorte que le max soit dans AL
saut PUSH AL reacutesultat dans la pilePUSH CL adresse de retour dans la pileRET deacutepile ladresse de retour
Le programme apparaicirct plus complexe Mais il faut noter que dans les langages dassemblage reacuteels on peut acceacuteder aux valeurs de la pile sans deacutepiler ce qui simplifie le deacutebut et la fin du SSP
ad retourdonneacutee 2donneacutee 1
reacutesultat
pile apregraves le CALL
pile apregraves le RET
17
Cas particulier du si sans sinon
si condition alors
cas_vrai
fsiLe scheacutema geacuteneacuteral est inutilement compliqueacute car cas_faux est vide Il est preacutefeacuterable de prendre la neacutegation de la condition et de sauter agrave lrsquoeacutetiquette fin si cette neacutegation est vraie (autrement dit laquo si la conditionest fausse alors je ne fais rien raquo)
Le scheacutema de traduction est le suivant MOV AL op1 MOV BL op2 ou autres registres CMP AL BL ou BL AL J fin instructions_du_cas_vraifin ougrave le choix de J et lrsquoordre des opeacuterandes est donneacutee par le tableau preacuteceacutedent pour la neacutegation de la condition
18
Les iteacuterations (avec compteur ndash pour)
pour i de 1 agrave limite fairebloc_agrave_reacutepeacuteter
fpour
Lrsquoiteacuteration se traduit comme suit
MOV registre1 1 compteur iMOV registre2 limite
reCMP registre2 registre1JS fin limite-compteurlt0 cest agrave dire
compteurgtlimitebloc_agrave_reacutepeacuteterINC registre1 increacutementation de iJMP re
fin
19
Parcours drsquoun ensemble de donneacutees conseacutecutives lrsquoadressage indirect
Si on veut parcourir et traiter un ensemble de donneacutees conseacutecutives en meacutemoire (un tableau de donneacutees) il faut pouvoir deacutesigner successivement tous les eacuteleacutements de cet ensemble dans une iteacuteration Avec laquo lrsquoadressage direct raquo qui donne directement lrsquoadresse du mot voulu (ex [3]) ce nrsquoest pas possible On ne peut qursquoeacutecrire ADD AL [3]ADD AL [4]ADD AL [5] etcLrsquoassembleur offre laquo lrsquoadressage indirect raquo pour reacutesoudre ce problegraveme On utilise la notation [AL] qui signifie laquo le contenu du mot dont ladresse est dans le registre AL raquo Il suffit de mettre dans AL la premiegravere adresse voulue puis dincreacutementer AL de 1 en 1 dans une iteacuteration pour acceacuteder gracircce agrave la notation [AL] successivement agrave toutes les donneacutees de lensemble
20
Cest un des 5 modes dadressage classiques en assembleur - lrsquoadressage immeacutediat 8 (constante 8)- lrsquoadressage direct [8] (mot meacutemoire dadresse 8)- lrsquoadressage indirect [AL] (le registre AL contient ladresse voulue)- lrsquoadressage baseacute [AL+4] (le contenu de AL + 4 est ladresse voulue) Nexiste pas dans la machine simuleacutee- lrsquoadressage indexeacute [AL+BL] (le contenu de AL + le contenu de BL est lrsquoadresse voulue) Nexiste pas dans la machine simuleacutee
Attention dans la machine simuleacutee ladressage indirect nest autoriseacute que dans les instructions MOV ce qui est tregraves restrictif Ex
MOV DL [AL] Copie le mot [AL] dans DLMOV [CL] AL Copie AL dans le mot [CL]
21
Les entreacuteessorties de base srsquoeffectuent via des ports Les ports sont des adresses speacuteciales associeacutees aux peacuteripheacuteriques drsquoentreacuteesortie et repeacutereacutees par des numeacuteros Un octet peut ecirctre lu ou eacutecrit dans ces ports gracircce aux instructions IN et OUT qui utilisent le registre AL
IN 00 entreacutee depuis le port 00 vers ALOUT 01 sortie depuis AL vers le port 01
Dans le simulateur le port de sortie 01 est connecteacute agrave 2 feux tricolores selon la valeur de loctet transmis dans AL ces 2 feux srsquoallument dune certaine maniegravere bits 7 6 5 4 3 2 1 0 rouge orange vert rouge orange vert non utiliseacutes feu de gauche feu de droiteLe port dentreacutee 00 est connecteacute au clavier Le registre AL reccediloit le code ASCII de la touche du clavier enfonceacutee
Les entreacuteessorties
22
Cette forme drsquoentreacuteesortie sans condition correspond aux peacuteripheacuteriques qui sont toujours disponibles comme les interrupteurs les voyants lumineux Dans le cas de peacuteripheacuteriques plus complexes il faut recourir aux entreacuteessorties avec condition il faut connaicirctre lrsquoeacutetat du peacuteripheacuterique avant denvoyer ou de lire des informations (ex reacuteseau disque ) Comme nous lrsquoavons vu dans la partie sur le mateacuteriel il existe deux approches principales lrsquoattente active et les entreacuteessorties avec interruptions
23
Les manipulations de bits
1) Deacutecalage et rotations Ces opeacuterations deacutecalent vers la gauche ou vers la droite les bits
drsquoun registre Elles peuvent ecirctre utiliseacutees pour tester un bit quelconque (on le deacutecale tout agrave droite on annule les autres bits et on teste le mot) ou encore pour diviser ou multiplier rapidement un entier par une puissance de 2
SHL CLDeacutecalage agrave gauche le bit de poids fort est perdule bit de poids faible devient 0 (SHift Left)
SHR DL Deacutecalage agrave droite le bit de poids faible est perdu le bit de poids fort devient 0 (SHift Right)
ROL AL Rotation agrave gauche le bit de poids fort devient le bit de poids faible (ROtate Left)
ROR BL Rotation agrave droite le bit de poids faible devient le bit de poids fort (ROtate Right)
24
2) Les instructions logiquesLes instructions logiques effectuent des opeacuterations logiques bit agrave bit (chaque bit est calculeacute indeacutependamment des autres) ET OU et OU exclusif 0 0 1 1 0 0 1 1 0 0 1 1 OU 0 1 0 1 ET 0 1 0 1 OU EX 0 1 0 1 0 1 1 1 0 0 0 1 0 1 1 0a) Linstruction OR OR AL BL AL = AL OU BL OR est souvent utiliseacute pour forcer certains bits agrave 1 gracircce agrave un laquo masque raquo ayant des 1 agrave ces positions Exemple
MOV BL F0 masque BL 11110000MOV AL 55 AL 01010101OR AL BL 11110101
Les 4ers bits de AL sont forceacutes agrave 1 les 4 autres sont inchangeacutesb) Linstruction AND AND AL BL AL = AL ET BL AND est souvent utiliseacute pour forcer certains bits agrave 0 gracircce agrave un laquo masque raquo ayant des 0 agrave ces positions
25
Exemple MOV BL 0F masque BL 00001111MOV AL 55 AL 01010101AND AL BL 00000101
Les 4ers bits de AL sont forceacutes agrave 0 les 4 autres sont inchangeacutesc) Linstruction XOR XOR AL BL AL = AL OU EXCLUSIF BL XOR est souvent utiliseacute pour inverser certains bits gracircce agrave un laquo masque raquo ayant des 1 agrave ces positions
Exemple MOV BL F0 masque BL 11110000MOV AL 55 AL 01010101XOR AL BL 10100101Les 4ers bits de AL sont inverseacutes les 4 autres sont inchangeacutes
Remarque on na pas besoin de recourir agrave lassembleur pour manipuler des bits ces opeacuterateurs existent dans beaucoup de langages eacutevolueacutes comme Java En Java SHL slsquoeacutecrit gtgt SHR slsquoeacutecrit ltlt OR slsquoeacutecrit j AND slsquoeacutecrit amp et XOR slsquoeacutecrit ^ Exemple short i = 13 i a la valeur 0000000000001101 i = i ltlt 2 i prend la valeur 0000000000110100
26
Les sous programmes (SSP)
Un SSP est une suite dinstructions effectuant un certain traitement et regroupeacutees par commoditeacute deacutecoupage du programme en petits lsquomorceauxrsquo morceau utiliseacute plusieurs fois hellipUn SSP est repeacutereacute par ladresse de sa premiegravere instruction Lexeacutecution du SSP est deacuteclencheacutee par un programme appelant Un SSP peut lui mecircme en appeler un autre et ainsi de suiteLappel du SSP est effectueacute par linstruction CALL
CALL adresse (ex CALL 50)Lexeacutecution se poursuit agrave ladresse indiqueacutee dans le CALL La fin du SSP est marqueacutee par linstruction
RETLe processeur revient implicitement agrave linstruction placeacutee immeacutediatement apregraves le CALL car lrsquoadresse de retour est empileacutee
27
Ladresse de retour utiliseacutee par RET est ajouteacutee sur la pile par linstruction CALL Lorsque le processeur exeacutecute linstruction RET il deacutepile ladresse de la pile et la range dans le compteur ordinalCe meacutecanisme marche mecircme dans le cas des appels imbriqueacutes (un CALL dans un SSP vers un autre SSP) et dans le cas des appels reacutecursifs (un SSP qui sappelle lui mecircme un certain nombre de fois)
CALL 40
CALL 90
RET
RET
0
40
904546
1213
13
4613
13
pile
4613
28
Le plus souvent le SSP effectue un traitement sur des donneacutees (ou paramegravetres) qui sont fournies par le programme appelant et produit un reacutesultat qui est retourneacute agrave ce programmePlusieurs strateacutegies pour passer les paramegravetres a) passage par les registresLes valeurs des paramegravetres et du reacutesultat sont contenues dans des registres bien deacutefinis Meacutethode simple qui ne convient que si le nombre de paramegravetres est faible car il y a peu de registresEx le SSP agrave ladresse hexadeacutecimale 30 calcule le maximum de 2 entiers naturels On convient que les entiers sont passeacutes par les registres AL et BL et que le reacutesultat est placeacute dans le registre AL Lappel slsquoeacutecrit
MOV AL donneacutee1MOV BL donneacutee2CALL 30 le reacutesultat est disponible dans AL
29
Le SSP slsquoeacutecrit ORG 30 directive qui indique que le code qui suit est
situeacute agrave ladresse 30 Ne prend pas de place en meacutemoire
CMP AL BLJNS saut si AL gt= BL (AL-BL gt= 0)PUSH BL sinon eacutechange de AL et BLPOP AL de telle sorte max soit dans AL
saut RET
b) passage par la pileLes valeurs des paramegravetres sont empileacutees Il peut y en avoir un nombre quelconque Le SSP reacutecupegravere les valeurs dans la pileEx le SSP agrave ladresse 40 utilise la pile pour passer les paramegravetres et reccediloit le reacutesultat dans la pile Lappel slsquoeacutecrit
PUSH AX donneacutee1 preacutealablement rangeacutee dans AXPUSH BX donneacutee2 preacutealablement rangeacutee dans BXCALL 40POP AX reacutecupeacuteration du reacutesultat dans AX par exemple
30
Le SSP peut slsquoeacutecrire ORG 40POP CL adresse de retour empileacutee par le CALLPOP BL deuxiegraveme paramegravetrePOP AL premier paramegravetreCMP BL ALJNS saut si AL gt= BLPUSH BL sinon eacutechange de AL et BLPOP AL de telle sorte que le max soit dans AL
saut PUSH AL reacutesultat dans la pilePUSH CL adresse de retour dans la pileRET deacutepile ladresse de retour
Le programme apparaicirct plus complexe Mais il faut noter que dans les langages dassemblage reacuteels on peut acceacuteder aux valeurs de la pile sans deacutepiler ce qui simplifie le deacutebut et la fin du SSP
ad retourdonneacutee 2donneacutee 1
reacutesultat
pile apregraves le CALL
pile apregraves le RET
18
Les iteacuterations (avec compteur ndash pour)
pour i de 1 agrave limite fairebloc_agrave_reacutepeacuteter
fpour
Lrsquoiteacuteration se traduit comme suit
MOV registre1 1 compteur iMOV registre2 limite
reCMP registre2 registre1JS fin limite-compteurlt0 cest agrave dire
compteurgtlimitebloc_agrave_reacutepeacuteterINC registre1 increacutementation de iJMP re
fin
19
Parcours drsquoun ensemble de donneacutees conseacutecutives lrsquoadressage indirect
Si on veut parcourir et traiter un ensemble de donneacutees conseacutecutives en meacutemoire (un tableau de donneacutees) il faut pouvoir deacutesigner successivement tous les eacuteleacutements de cet ensemble dans une iteacuteration Avec laquo lrsquoadressage direct raquo qui donne directement lrsquoadresse du mot voulu (ex [3]) ce nrsquoest pas possible On ne peut qursquoeacutecrire ADD AL [3]ADD AL [4]ADD AL [5] etcLrsquoassembleur offre laquo lrsquoadressage indirect raquo pour reacutesoudre ce problegraveme On utilise la notation [AL] qui signifie laquo le contenu du mot dont ladresse est dans le registre AL raquo Il suffit de mettre dans AL la premiegravere adresse voulue puis dincreacutementer AL de 1 en 1 dans une iteacuteration pour acceacuteder gracircce agrave la notation [AL] successivement agrave toutes les donneacutees de lensemble
20
Cest un des 5 modes dadressage classiques en assembleur - lrsquoadressage immeacutediat 8 (constante 8)- lrsquoadressage direct [8] (mot meacutemoire dadresse 8)- lrsquoadressage indirect [AL] (le registre AL contient ladresse voulue)- lrsquoadressage baseacute [AL+4] (le contenu de AL + 4 est ladresse voulue) Nexiste pas dans la machine simuleacutee- lrsquoadressage indexeacute [AL+BL] (le contenu de AL + le contenu de BL est lrsquoadresse voulue) Nexiste pas dans la machine simuleacutee
Attention dans la machine simuleacutee ladressage indirect nest autoriseacute que dans les instructions MOV ce qui est tregraves restrictif Ex
MOV DL [AL] Copie le mot [AL] dans DLMOV [CL] AL Copie AL dans le mot [CL]
21
Les entreacuteessorties de base srsquoeffectuent via des ports Les ports sont des adresses speacuteciales associeacutees aux peacuteripheacuteriques drsquoentreacuteesortie et repeacutereacutees par des numeacuteros Un octet peut ecirctre lu ou eacutecrit dans ces ports gracircce aux instructions IN et OUT qui utilisent le registre AL
IN 00 entreacutee depuis le port 00 vers ALOUT 01 sortie depuis AL vers le port 01
Dans le simulateur le port de sortie 01 est connecteacute agrave 2 feux tricolores selon la valeur de loctet transmis dans AL ces 2 feux srsquoallument dune certaine maniegravere bits 7 6 5 4 3 2 1 0 rouge orange vert rouge orange vert non utiliseacutes feu de gauche feu de droiteLe port dentreacutee 00 est connecteacute au clavier Le registre AL reccediloit le code ASCII de la touche du clavier enfonceacutee
Les entreacuteessorties
22
Cette forme drsquoentreacuteesortie sans condition correspond aux peacuteripheacuteriques qui sont toujours disponibles comme les interrupteurs les voyants lumineux Dans le cas de peacuteripheacuteriques plus complexes il faut recourir aux entreacuteessorties avec condition il faut connaicirctre lrsquoeacutetat du peacuteripheacuterique avant denvoyer ou de lire des informations (ex reacuteseau disque ) Comme nous lrsquoavons vu dans la partie sur le mateacuteriel il existe deux approches principales lrsquoattente active et les entreacuteessorties avec interruptions
23
Les manipulations de bits
1) Deacutecalage et rotations Ces opeacuterations deacutecalent vers la gauche ou vers la droite les bits
drsquoun registre Elles peuvent ecirctre utiliseacutees pour tester un bit quelconque (on le deacutecale tout agrave droite on annule les autres bits et on teste le mot) ou encore pour diviser ou multiplier rapidement un entier par une puissance de 2
SHL CLDeacutecalage agrave gauche le bit de poids fort est perdule bit de poids faible devient 0 (SHift Left)
SHR DL Deacutecalage agrave droite le bit de poids faible est perdu le bit de poids fort devient 0 (SHift Right)
ROL AL Rotation agrave gauche le bit de poids fort devient le bit de poids faible (ROtate Left)
ROR BL Rotation agrave droite le bit de poids faible devient le bit de poids fort (ROtate Right)
24
2) Les instructions logiquesLes instructions logiques effectuent des opeacuterations logiques bit agrave bit (chaque bit est calculeacute indeacutependamment des autres) ET OU et OU exclusif 0 0 1 1 0 0 1 1 0 0 1 1 OU 0 1 0 1 ET 0 1 0 1 OU EX 0 1 0 1 0 1 1 1 0 0 0 1 0 1 1 0a) Linstruction OR OR AL BL AL = AL OU BL OR est souvent utiliseacute pour forcer certains bits agrave 1 gracircce agrave un laquo masque raquo ayant des 1 agrave ces positions Exemple
MOV BL F0 masque BL 11110000MOV AL 55 AL 01010101OR AL BL 11110101
Les 4ers bits de AL sont forceacutes agrave 1 les 4 autres sont inchangeacutesb) Linstruction AND AND AL BL AL = AL ET BL AND est souvent utiliseacute pour forcer certains bits agrave 0 gracircce agrave un laquo masque raquo ayant des 0 agrave ces positions
25
Exemple MOV BL 0F masque BL 00001111MOV AL 55 AL 01010101AND AL BL 00000101
Les 4ers bits de AL sont forceacutes agrave 0 les 4 autres sont inchangeacutesc) Linstruction XOR XOR AL BL AL = AL OU EXCLUSIF BL XOR est souvent utiliseacute pour inverser certains bits gracircce agrave un laquo masque raquo ayant des 1 agrave ces positions
Exemple MOV BL F0 masque BL 11110000MOV AL 55 AL 01010101XOR AL BL 10100101Les 4ers bits de AL sont inverseacutes les 4 autres sont inchangeacutes
Remarque on na pas besoin de recourir agrave lassembleur pour manipuler des bits ces opeacuterateurs existent dans beaucoup de langages eacutevolueacutes comme Java En Java SHL slsquoeacutecrit gtgt SHR slsquoeacutecrit ltlt OR slsquoeacutecrit j AND slsquoeacutecrit amp et XOR slsquoeacutecrit ^ Exemple short i = 13 i a la valeur 0000000000001101 i = i ltlt 2 i prend la valeur 0000000000110100
26
Les sous programmes (SSP)
Un SSP est une suite dinstructions effectuant un certain traitement et regroupeacutees par commoditeacute deacutecoupage du programme en petits lsquomorceauxrsquo morceau utiliseacute plusieurs fois hellipUn SSP est repeacutereacute par ladresse de sa premiegravere instruction Lexeacutecution du SSP est deacuteclencheacutee par un programme appelant Un SSP peut lui mecircme en appeler un autre et ainsi de suiteLappel du SSP est effectueacute par linstruction CALL
CALL adresse (ex CALL 50)Lexeacutecution se poursuit agrave ladresse indiqueacutee dans le CALL La fin du SSP est marqueacutee par linstruction
RETLe processeur revient implicitement agrave linstruction placeacutee immeacutediatement apregraves le CALL car lrsquoadresse de retour est empileacutee
27
Ladresse de retour utiliseacutee par RET est ajouteacutee sur la pile par linstruction CALL Lorsque le processeur exeacutecute linstruction RET il deacutepile ladresse de la pile et la range dans le compteur ordinalCe meacutecanisme marche mecircme dans le cas des appels imbriqueacutes (un CALL dans un SSP vers un autre SSP) et dans le cas des appels reacutecursifs (un SSP qui sappelle lui mecircme un certain nombre de fois)
CALL 40
CALL 90
RET
RET
0
40
904546
1213
13
4613
13
pile
4613
28
Le plus souvent le SSP effectue un traitement sur des donneacutees (ou paramegravetres) qui sont fournies par le programme appelant et produit un reacutesultat qui est retourneacute agrave ce programmePlusieurs strateacutegies pour passer les paramegravetres a) passage par les registresLes valeurs des paramegravetres et du reacutesultat sont contenues dans des registres bien deacutefinis Meacutethode simple qui ne convient que si le nombre de paramegravetres est faible car il y a peu de registresEx le SSP agrave ladresse hexadeacutecimale 30 calcule le maximum de 2 entiers naturels On convient que les entiers sont passeacutes par les registres AL et BL et que le reacutesultat est placeacute dans le registre AL Lappel slsquoeacutecrit
MOV AL donneacutee1MOV BL donneacutee2CALL 30 le reacutesultat est disponible dans AL
29
Le SSP slsquoeacutecrit ORG 30 directive qui indique que le code qui suit est
situeacute agrave ladresse 30 Ne prend pas de place en meacutemoire
CMP AL BLJNS saut si AL gt= BL (AL-BL gt= 0)PUSH BL sinon eacutechange de AL et BLPOP AL de telle sorte max soit dans AL
saut RET
b) passage par la pileLes valeurs des paramegravetres sont empileacutees Il peut y en avoir un nombre quelconque Le SSP reacutecupegravere les valeurs dans la pileEx le SSP agrave ladresse 40 utilise la pile pour passer les paramegravetres et reccediloit le reacutesultat dans la pile Lappel slsquoeacutecrit
PUSH AX donneacutee1 preacutealablement rangeacutee dans AXPUSH BX donneacutee2 preacutealablement rangeacutee dans BXCALL 40POP AX reacutecupeacuteration du reacutesultat dans AX par exemple
30
Le SSP peut slsquoeacutecrire ORG 40POP CL adresse de retour empileacutee par le CALLPOP BL deuxiegraveme paramegravetrePOP AL premier paramegravetreCMP BL ALJNS saut si AL gt= BLPUSH BL sinon eacutechange de AL et BLPOP AL de telle sorte que le max soit dans AL
saut PUSH AL reacutesultat dans la pilePUSH CL adresse de retour dans la pileRET deacutepile ladresse de retour
Le programme apparaicirct plus complexe Mais il faut noter que dans les langages dassemblage reacuteels on peut acceacuteder aux valeurs de la pile sans deacutepiler ce qui simplifie le deacutebut et la fin du SSP
ad retourdonneacutee 2donneacutee 1
reacutesultat
pile apregraves le CALL
pile apregraves le RET
19
Parcours drsquoun ensemble de donneacutees conseacutecutives lrsquoadressage indirect
Si on veut parcourir et traiter un ensemble de donneacutees conseacutecutives en meacutemoire (un tableau de donneacutees) il faut pouvoir deacutesigner successivement tous les eacuteleacutements de cet ensemble dans une iteacuteration Avec laquo lrsquoadressage direct raquo qui donne directement lrsquoadresse du mot voulu (ex [3]) ce nrsquoest pas possible On ne peut qursquoeacutecrire ADD AL [3]ADD AL [4]ADD AL [5] etcLrsquoassembleur offre laquo lrsquoadressage indirect raquo pour reacutesoudre ce problegraveme On utilise la notation [AL] qui signifie laquo le contenu du mot dont ladresse est dans le registre AL raquo Il suffit de mettre dans AL la premiegravere adresse voulue puis dincreacutementer AL de 1 en 1 dans une iteacuteration pour acceacuteder gracircce agrave la notation [AL] successivement agrave toutes les donneacutees de lensemble
20
Cest un des 5 modes dadressage classiques en assembleur - lrsquoadressage immeacutediat 8 (constante 8)- lrsquoadressage direct [8] (mot meacutemoire dadresse 8)- lrsquoadressage indirect [AL] (le registre AL contient ladresse voulue)- lrsquoadressage baseacute [AL+4] (le contenu de AL + 4 est ladresse voulue) Nexiste pas dans la machine simuleacutee- lrsquoadressage indexeacute [AL+BL] (le contenu de AL + le contenu de BL est lrsquoadresse voulue) Nexiste pas dans la machine simuleacutee
Attention dans la machine simuleacutee ladressage indirect nest autoriseacute que dans les instructions MOV ce qui est tregraves restrictif Ex
MOV DL [AL] Copie le mot [AL] dans DLMOV [CL] AL Copie AL dans le mot [CL]
21
Les entreacuteessorties de base srsquoeffectuent via des ports Les ports sont des adresses speacuteciales associeacutees aux peacuteripheacuteriques drsquoentreacuteesortie et repeacutereacutees par des numeacuteros Un octet peut ecirctre lu ou eacutecrit dans ces ports gracircce aux instructions IN et OUT qui utilisent le registre AL
IN 00 entreacutee depuis le port 00 vers ALOUT 01 sortie depuis AL vers le port 01
Dans le simulateur le port de sortie 01 est connecteacute agrave 2 feux tricolores selon la valeur de loctet transmis dans AL ces 2 feux srsquoallument dune certaine maniegravere bits 7 6 5 4 3 2 1 0 rouge orange vert rouge orange vert non utiliseacutes feu de gauche feu de droiteLe port dentreacutee 00 est connecteacute au clavier Le registre AL reccediloit le code ASCII de la touche du clavier enfonceacutee
Les entreacuteessorties
22
Cette forme drsquoentreacuteesortie sans condition correspond aux peacuteripheacuteriques qui sont toujours disponibles comme les interrupteurs les voyants lumineux Dans le cas de peacuteripheacuteriques plus complexes il faut recourir aux entreacuteessorties avec condition il faut connaicirctre lrsquoeacutetat du peacuteripheacuterique avant denvoyer ou de lire des informations (ex reacuteseau disque ) Comme nous lrsquoavons vu dans la partie sur le mateacuteriel il existe deux approches principales lrsquoattente active et les entreacuteessorties avec interruptions
23
Les manipulations de bits
1) Deacutecalage et rotations Ces opeacuterations deacutecalent vers la gauche ou vers la droite les bits
drsquoun registre Elles peuvent ecirctre utiliseacutees pour tester un bit quelconque (on le deacutecale tout agrave droite on annule les autres bits et on teste le mot) ou encore pour diviser ou multiplier rapidement un entier par une puissance de 2
SHL CLDeacutecalage agrave gauche le bit de poids fort est perdule bit de poids faible devient 0 (SHift Left)
SHR DL Deacutecalage agrave droite le bit de poids faible est perdu le bit de poids fort devient 0 (SHift Right)
ROL AL Rotation agrave gauche le bit de poids fort devient le bit de poids faible (ROtate Left)
ROR BL Rotation agrave droite le bit de poids faible devient le bit de poids fort (ROtate Right)
24
2) Les instructions logiquesLes instructions logiques effectuent des opeacuterations logiques bit agrave bit (chaque bit est calculeacute indeacutependamment des autres) ET OU et OU exclusif 0 0 1 1 0 0 1 1 0 0 1 1 OU 0 1 0 1 ET 0 1 0 1 OU EX 0 1 0 1 0 1 1 1 0 0 0 1 0 1 1 0a) Linstruction OR OR AL BL AL = AL OU BL OR est souvent utiliseacute pour forcer certains bits agrave 1 gracircce agrave un laquo masque raquo ayant des 1 agrave ces positions Exemple
MOV BL F0 masque BL 11110000MOV AL 55 AL 01010101OR AL BL 11110101
Les 4ers bits de AL sont forceacutes agrave 1 les 4 autres sont inchangeacutesb) Linstruction AND AND AL BL AL = AL ET BL AND est souvent utiliseacute pour forcer certains bits agrave 0 gracircce agrave un laquo masque raquo ayant des 0 agrave ces positions
25
Exemple MOV BL 0F masque BL 00001111MOV AL 55 AL 01010101AND AL BL 00000101
Les 4ers bits de AL sont forceacutes agrave 0 les 4 autres sont inchangeacutesc) Linstruction XOR XOR AL BL AL = AL OU EXCLUSIF BL XOR est souvent utiliseacute pour inverser certains bits gracircce agrave un laquo masque raquo ayant des 1 agrave ces positions
Exemple MOV BL F0 masque BL 11110000MOV AL 55 AL 01010101XOR AL BL 10100101Les 4ers bits de AL sont inverseacutes les 4 autres sont inchangeacutes
Remarque on na pas besoin de recourir agrave lassembleur pour manipuler des bits ces opeacuterateurs existent dans beaucoup de langages eacutevolueacutes comme Java En Java SHL slsquoeacutecrit gtgt SHR slsquoeacutecrit ltlt OR slsquoeacutecrit j AND slsquoeacutecrit amp et XOR slsquoeacutecrit ^ Exemple short i = 13 i a la valeur 0000000000001101 i = i ltlt 2 i prend la valeur 0000000000110100
26
Les sous programmes (SSP)
Un SSP est une suite dinstructions effectuant un certain traitement et regroupeacutees par commoditeacute deacutecoupage du programme en petits lsquomorceauxrsquo morceau utiliseacute plusieurs fois hellipUn SSP est repeacutereacute par ladresse de sa premiegravere instruction Lexeacutecution du SSP est deacuteclencheacutee par un programme appelant Un SSP peut lui mecircme en appeler un autre et ainsi de suiteLappel du SSP est effectueacute par linstruction CALL
CALL adresse (ex CALL 50)Lexeacutecution se poursuit agrave ladresse indiqueacutee dans le CALL La fin du SSP est marqueacutee par linstruction
RETLe processeur revient implicitement agrave linstruction placeacutee immeacutediatement apregraves le CALL car lrsquoadresse de retour est empileacutee
27
Ladresse de retour utiliseacutee par RET est ajouteacutee sur la pile par linstruction CALL Lorsque le processeur exeacutecute linstruction RET il deacutepile ladresse de la pile et la range dans le compteur ordinalCe meacutecanisme marche mecircme dans le cas des appels imbriqueacutes (un CALL dans un SSP vers un autre SSP) et dans le cas des appels reacutecursifs (un SSP qui sappelle lui mecircme un certain nombre de fois)
CALL 40
CALL 90
RET
RET
0
40
904546
1213
13
4613
13
pile
4613
28
Le plus souvent le SSP effectue un traitement sur des donneacutees (ou paramegravetres) qui sont fournies par le programme appelant et produit un reacutesultat qui est retourneacute agrave ce programmePlusieurs strateacutegies pour passer les paramegravetres a) passage par les registresLes valeurs des paramegravetres et du reacutesultat sont contenues dans des registres bien deacutefinis Meacutethode simple qui ne convient que si le nombre de paramegravetres est faible car il y a peu de registresEx le SSP agrave ladresse hexadeacutecimale 30 calcule le maximum de 2 entiers naturels On convient que les entiers sont passeacutes par les registres AL et BL et que le reacutesultat est placeacute dans le registre AL Lappel slsquoeacutecrit
MOV AL donneacutee1MOV BL donneacutee2CALL 30 le reacutesultat est disponible dans AL
29
Le SSP slsquoeacutecrit ORG 30 directive qui indique que le code qui suit est
situeacute agrave ladresse 30 Ne prend pas de place en meacutemoire
CMP AL BLJNS saut si AL gt= BL (AL-BL gt= 0)PUSH BL sinon eacutechange de AL et BLPOP AL de telle sorte max soit dans AL
saut RET
b) passage par la pileLes valeurs des paramegravetres sont empileacutees Il peut y en avoir un nombre quelconque Le SSP reacutecupegravere les valeurs dans la pileEx le SSP agrave ladresse 40 utilise la pile pour passer les paramegravetres et reccediloit le reacutesultat dans la pile Lappel slsquoeacutecrit
PUSH AX donneacutee1 preacutealablement rangeacutee dans AXPUSH BX donneacutee2 preacutealablement rangeacutee dans BXCALL 40POP AX reacutecupeacuteration du reacutesultat dans AX par exemple
30
Le SSP peut slsquoeacutecrire ORG 40POP CL adresse de retour empileacutee par le CALLPOP BL deuxiegraveme paramegravetrePOP AL premier paramegravetreCMP BL ALJNS saut si AL gt= BLPUSH BL sinon eacutechange de AL et BLPOP AL de telle sorte que le max soit dans AL
saut PUSH AL reacutesultat dans la pilePUSH CL adresse de retour dans la pileRET deacutepile ladresse de retour
Le programme apparaicirct plus complexe Mais il faut noter que dans les langages dassemblage reacuteels on peut acceacuteder aux valeurs de la pile sans deacutepiler ce qui simplifie le deacutebut et la fin du SSP
ad retourdonneacutee 2donneacutee 1
reacutesultat
pile apregraves le CALL
pile apregraves le RET
20
Cest un des 5 modes dadressage classiques en assembleur - lrsquoadressage immeacutediat 8 (constante 8)- lrsquoadressage direct [8] (mot meacutemoire dadresse 8)- lrsquoadressage indirect [AL] (le registre AL contient ladresse voulue)- lrsquoadressage baseacute [AL+4] (le contenu de AL + 4 est ladresse voulue) Nexiste pas dans la machine simuleacutee- lrsquoadressage indexeacute [AL+BL] (le contenu de AL + le contenu de BL est lrsquoadresse voulue) Nexiste pas dans la machine simuleacutee
Attention dans la machine simuleacutee ladressage indirect nest autoriseacute que dans les instructions MOV ce qui est tregraves restrictif Ex
MOV DL [AL] Copie le mot [AL] dans DLMOV [CL] AL Copie AL dans le mot [CL]
21
Les entreacuteessorties de base srsquoeffectuent via des ports Les ports sont des adresses speacuteciales associeacutees aux peacuteripheacuteriques drsquoentreacuteesortie et repeacutereacutees par des numeacuteros Un octet peut ecirctre lu ou eacutecrit dans ces ports gracircce aux instructions IN et OUT qui utilisent le registre AL
IN 00 entreacutee depuis le port 00 vers ALOUT 01 sortie depuis AL vers le port 01
Dans le simulateur le port de sortie 01 est connecteacute agrave 2 feux tricolores selon la valeur de loctet transmis dans AL ces 2 feux srsquoallument dune certaine maniegravere bits 7 6 5 4 3 2 1 0 rouge orange vert rouge orange vert non utiliseacutes feu de gauche feu de droiteLe port dentreacutee 00 est connecteacute au clavier Le registre AL reccediloit le code ASCII de la touche du clavier enfonceacutee
Les entreacuteessorties
22
Cette forme drsquoentreacuteesortie sans condition correspond aux peacuteripheacuteriques qui sont toujours disponibles comme les interrupteurs les voyants lumineux Dans le cas de peacuteripheacuteriques plus complexes il faut recourir aux entreacuteessorties avec condition il faut connaicirctre lrsquoeacutetat du peacuteripheacuterique avant denvoyer ou de lire des informations (ex reacuteseau disque ) Comme nous lrsquoavons vu dans la partie sur le mateacuteriel il existe deux approches principales lrsquoattente active et les entreacuteessorties avec interruptions
23
Les manipulations de bits
1) Deacutecalage et rotations Ces opeacuterations deacutecalent vers la gauche ou vers la droite les bits
drsquoun registre Elles peuvent ecirctre utiliseacutees pour tester un bit quelconque (on le deacutecale tout agrave droite on annule les autres bits et on teste le mot) ou encore pour diviser ou multiplier rapidement un entier par une puissance de 2
SHL CLDeacutecalage agrave gauche le bit de poids fort est perdule bit de poids faible devient 0 (SHift Left)
SHR DL Deacutecalage agrave droite le bit de poids faible est perdu le bit de poids fort devient 0 (SHift Right)
ROL AL Rotation agrave gauche le bit de poids fort devient le bit de poids faible (ROtate Left)
ROR BL Rotation agrave droite le bit de poids faible devient le bit de poids fort (ROtate Right)
24
2) Les instructions logiquesLes instructions logiques effectuent des opeacuterations logiques bit agrave bit (chaque bit est calculeacute indeacutependamment des autres) ET OU et OU exclusif 0 0 1 1 0 0 1 1 0 0 1 1 OU 0 1 0 1 ET 0 1 0 1 OU EX 0 1 0 1 0 1 1 1 0 0 0 1 0 1 1 0a) Linstruction OR OR AL BL AL = AL OU BL OR est souvent utiliseacute pour forcer certains bits agrave 1 gracircce agrave un laquo masque raquo ayant des 1 agrave ces positions Exemple
MOV BL F0 masque BL 11110000MOV AL 55 AL 01010101OR AL BL 11110101
Les 4ers bits de AL sont forceacutes agrave 1 les 4 autres sont inchangeacutesb) Linstruction AND AND AL BL AL = AL ET BL AND est souvent utiliseacute pour forcer certains bits agrave 0 gracircce agrave un laquo masque raquo ayant des 0 agrave ces positions
25
Exemple MOV BL 0F masque BL 00001111MOV AL 55 AL 01010101AND AL BL 00000101
Les 4ers bits de AL sont forceacutes agrave 0 les 4 autres sont inchangeacutesc) Linstruction XOR XOR AL BL AL = AL OU EXCLUSIF BL XOR est souvent utiliseacute pour inverser certains bits gracircce agrave un laquo masque raquo ayant des 1 agrave ces positions
Exemple MOV BL F0 masque BL 11110000MOV AL 55 AL 01010101XOR AL BL 10100101Les 4ers bits de AL sont inverseacutes les 4 autres sont inchangeacutes
Remarque on na pas besoin de recourir agrave lassembleur pour manipuler des bits ces opeacuterateurs existent dans beaucoup de langages eacutevolueacutes comme Java En Java SHL slsquoeacutecrit gtgt SHR slsquoeacutecrit ltlt OR slsquoeacutecrit j AND slsquoeacutecrit amp et XOR slsquoeacutecrit ^ Exemple short i = 13 i a la valeur 0000000000001101 i = i ltlt 2 i prend la valeur 0000000000110100
26
Les sous programmes (SSP)
Un SSP est une suite dinstructions effectuant un certain traitement et regroupeacutees par commoditeacute deacutecoupage du programme en petits lsquomorceauxrsquo morceau utiliseacute plusieurs fois hellipUn SSP est repeacutereacute par ladresse de sa premiegravere instruction Lexeacutecution du SSP est deacuteclencheacutee par un programme appelant Un SSP peut lui mecircme en appeler un autre et ainsi de suiteLappel du SSP est effectueacute par linstruction CALL
CALL adresse (ex CALL 50)Lexeacutecution se poursuit agrave ladresse indiqueacutee dans le CALL La fin du SSP est marqueacutee par linstruction
RETLe processeur revient implicitement agrave linstruction placeacutee immeacutediatement apregraves le CALL car lrsquoadresse de retour est empileacutee
27
Ladresse de retour utiliseacutee par RET est ajouteacutee sur la pile par linstruction CALL Lorsque le processeur exeacutecute linstruction RET il deacutepile ladresse de la pile et la range dans le compteur ordinalCe meacutecanisme marche mecircme dans le cas des appels imbriqueacutes (un CALL dans un SSP vers un autre SSP) et dans le cas des appels reacutecursifs (un SSP qui sappelle lui mecircme un certain nombre de fois)
CALL 40
CALL 90
RET
RET
0
40
904546
1213
13
4613
13
pile
4613
28
Le plus souvent le SSP effectue un traitement sur des donneacutees (ou paramegravetres) qui sont fournies par le programme appelant et produit un reacutesultat qui est retourneacute agrave ce programmePlusieurs strateacutegies pour passer les paramegravetres a) passage par les registresLes valeurs des paramegravetres et du reacutesultat sont contenues dans des registres bien deacutefinis Meacutethode simple qui ne convient que si le nombre de paramegravetres est faible car il y a peu de registresEx le SSP agrave ladresse hexadeacutecimale 30 calcule le maximum de 2 entiers naturels On convient que les entiers sont passeacutes par les registres AL et BL et que le reacutesultat est placeacute dans le registre AL Lappel slsquoeacutecrit
MOV AL donneacutee1MOV BL donneacutee2CALL 30 le reacutesultat est disponible dans AL
29
Le SSP slsquoeacutecrit ORG 30 directive qui indique que le code qui suit est
situeacute agrave ladresse 30 Ne prend pas de place en meacutemoire
CMP AL BLJNS saut si AL gt= BL (AL-BL gt= 0)PUSH BL sinon eacutechange de AL et BLPOP AL de telle sorte max soit dans AL
saut RET
b) passage par la pileLes valeurs des paramegravetres sont empileacutees Il peut y en avoir un nombre quelconque Le SSP reacutecupegravere les valeurs dans la pileEx le SSP agrave ladresse 40 utilise la pile pour passer les paramegravetres et reccediloit le reacutesultat dans la pile Lappel slsquoeacutecrit
PUSH AX donneacutee1 preacutealablement rangeacutee dans AXPUSH BX donneacutee2 preacutealablement rangeacutee dans BXCALL 40POP AX reacutecupeacuteration du reacutesultat dans AX par exemple
30
Le SSP peut slsquoeacutecrire ORG 40POP CL adresse de retour empileacutee par le CALLPOP BL deuxiegraveme paramegravetrePOP AL premier paramegravetreCMP BL ALJNS saut si AL gt= BLPUSH BL sinon eacutechange de AL et BLPOP AL de telle sorte que le max soit dans AL
saut PUSH AL reacutesultat dans la pilePUSH CL adresse de retour dans la pileRET deacutepile ladresse de retour
Le programme apparaicirct plus complexe Mais il faut noter que dans les langages dassemblage reacuteels on peut acceacuteder aux valeurs de la pile sans deacutepiler ce qui simplifie le deacutebut et la fin du SSP
ad retourdonneacutee 2donneacutee 1
reacutesultat
pile apregraves le CALL
pile apregraves le RET
21
Les entreacuteessorties de base srsquoeffectuent via des ports Les ports sont des adresses speacuteciales associeacutees aux peacuteripheacuteriques drsquoentreacuteesortie et repeacutereacutees par des numeacuteros Un octet peut ecirctre lu ou eacutecrit dans ces ports gracircce aux instructions IN et OUT qui utilisent le registre AL
IN 00 entreacutee depuis le port 00 vers ALOUT 01 sortie depuis AL vers le port 01
Dans le simulateur le port de sortie 01 est connecteacute agrave 2 feux tricolores selon la valeur de loctet transmis dans AL ces 2 feux srsquoallument dune certaine maniegravere bits 7 6 5 4 3 2 1 0 rouge orange vert rouge orange vert non utiliseacutes feu de gauche feu de droiteLe port dentreacutee 00 est connecteacute au clavier Le registre AL reccediloit le code ASCII de la touche du clavier enfonceacutee
Les entreacuteessorties
22
Cette forme drsquoentreacuteesortie sans condition correspond aux peacuteripheacuteriques qui sont toujours disponibles comme les interrupteurs les voyants lumineux Dans le cas de peacuteripheacuteriques plus complexes il faut recourir aux entreacuteessorties avec condition il faut connaicirctre lrsquoeacutetat du peacuteripheacuterique avant denvoyer ou de lire des informations (ex reacuteseau disque ) Comme nous lrsquoavons vu dans la partie sur le mateacuteriel il existe deux approches principales lrsquoattente active et les entreacuteessorties avec interruptions
23
Les manipulations de bits
1) Deacutecalage et rotations Ces opeacuterations deacutecalent vers la gauche ou vers la droite les bits
drsquoun registre Elles peuvent ecirctre utiliseacutees pour tester un bit quelconque (on le deacutecale tout agrave droite on annule les autres bits et on teste le mot) ou encore pour diviser ou multiplier rapidement un entier par une puissance de 2
SHL CLDeacutecalage agrave gauche le bit de poids fort est perdule bit de poids faible devient 0 (SHift Left)
SHR DL Deacutecalage agrave droite le bit de poids faible est perdu le bit de poids fort devient 0 (SHift Right)
ROL AL Rotation agrave gauche le bit de poids fort devient le bit de poids faible (ROtate Left)
ROR BL Rotation agrave droite le bit de poids faible devient le bit de poids fort (ROtate Right)
24
2) Les instructions logiquesLes instructions logiques effectuent des opeacuterations logiques bit agrave bit (chaque bit est calculeacute indeacutependamment des autres) ET OU et OU exclusif 0 0 1 1 0 0 1 1 0 0 1 1 OU 0 1 0 1 ET 0 1 0 1 OU EX 0 1 0 1 0 1 1 1 0 0 0 1 0 1 1 0a) Linstruction OR OR AL BL AL = AL OU BL OR est souvent utiliseacute pour forcer certains bits agrave 1 gracircce agrave un laquo masque raquo ayant des 1 agrave ces positions Exemple
MOV BL F0 masque BL 11110000MOV AL 55 AL 01010101OR AL BL 11110101
Les 4ers bits de AL sont forceacutes agrave 1 les 4 autres sont inchangeacutesb) Linstruction AND AND AL BL AL = AL ET BL AND est souvent utiliseacute pour forcer certains bits agrave 0 gracircce agrave un laquo masque raquo ayant des 0 agrave ces positions
25
Exemple MOV BL 0F masque BL 00001111MOV AL 55 AL 01010101AND AL BL 00000101
Les 4ers bits de AL sont forceacutes agrave 0 les 4 autres sont inchangeacutesc) Linstruction XOR XOR AL BL AL = AL OU EXCLUSIF BL XOR est souvent utiliseacute pour inverser certains bits gracircce agrave un laquo masque raquo ayant des 1 agrave ces positions
Exemple MOV BL F0 masque BL 11110000MOV AL 55 AL 01010101XOR AL BL 10100101Les 4ers bits de AL sont inverseacutes les 4 autres sont inchangeacutes
Remarque on na pas besoin de recourir agrave lassembleur pour manipuler des bits ces opeacuterateurs existent dans beaucoup de langages eacutevolueacutes comme Java En Java SHL slsquoeacutecrit gtgt SHR slsquoeacutecrit ltlt OR slsquoeacutecrit j AND slsquoeacutecrit amp et XOR slsquoeacutecrit ^ Exemple short i = 13 i a la valeur 0000000000001101 i = i ltlt 2 i prend la valeur 0000000000110100
26
Les sous programmes (SSP)
Un SSP est une suite dinstructions effectuant un certain traitement et regroupeacutees par commoditeacute deacutecoupage du programme en petits lsquomorceauxrsquo morceau utiliseacute plusieurs fois hellipUn SSP est repeacutereacute par ladresse de sa premiegravere instruction Lexeacutecution du SSP est deacuteclencheacutee par un programme appelant Un SSP peut lui mecircme en appeler un autre et ainsi de suiteLappel du SSP est effectueacute par linstruction CALL
CALL adresse (ex CALL 50)Lexeacutecution se poursuit agrave ladresse indiqueacutee dans le CALL La fin du SSP est marqueacutee par linstruction
RETLe processeur revient implicitement agrave linstruction placeacutee immeacutediatement apregraves le CALL car lrsquoadresse de retour est empileacutee
27
Ladresse de retour utiliseacutee par RET est ajouteacutee sur la pile par linstruction CALL Lorsque le processeur exeacutecute linstruction RET il deacutepile ladresse de la pile et la range dans le compteur ordinalCe meacutecanisme marche mecircme dans le cas des appels imbriqueacutes (un CALL dans un SSP vers un autre SSP) et dans le cas des appels reacutecursifs (un SSP qui sappelle lui mecircme un certain nombre de fois)
CALL 40
CALL 90
RET
RET
0
40
904546
1213
13
4613
13
pile
4613
28
Le plus souvent le SSP effectue un traitement sur des donneacutees (ou paramegravetres) qui sont fournies par le programme appelant et produit un reacutesultat qui est retourneacute agrave ce programmePlusieurs strateacutegies pour passer les paramegravetres a) passage par les registresLes valeurs des paramegravetres et du reacutesultat sont contenues dans des registres bien deacutefinis Meacutethode simple qui ne convient que si le nombre de paramegravetres est faible car il y a peu de registresEx le SSP agrave ladresse hexadeacutecimale 30 calcule le maximum de 2 entiers naturels On convient que les entiers sont passeacutes par les registres AL et BL et que le reacutesultat est placeacute dans le registre AL Lappel slsquoeacutecrit
MOV AL donneacutee1MOV BL donneacutee2CALL 30 le reacutesultat est disponible dans AL
29
Le SSP slsquoeacutecrit ORG 30 directive qui indique que le code qui suit est
situeacute agrave ladresse 30 Ne prend pas de place en meacutemoire
CMP AL BLJNS saut si AL gt= BL (AL-BL gt= 0)PUSH BL sinon eacutechange de AL et BLPOP AL de telle sorte max soit dans AL
saut RET
b) passage par la pileLes valeurs des paramegravetres sont empileacutees Il peut y en avoir un nombre quelconque Le SSP reacutecupegravere les valeurs dans la pileEx le SSP agrave ladresse 40 utilise la pile pour passer les paramegravetres et reccediloit le reacutesultat dans la pile Lappel slsquoeacutecrit
PUSH AX donneacutee1 preacutealablement rangeacutee dans AXPUSH BX donneacutee2 preacutealablement rangeacutee dans BXCALL 40POP AX reacutecupeacuteration du reacutesultat dans AX par exemple
30
Le SSP peut slsquoeacutecrire ORG 40POP CL adresse de retour empileacutee par le CALLPOP BL deuxiegraveme paramegravetrePOP AL premier paramegravetreCMP BL ALJNS saut si AL gt= BLPUSH BL sinon eacutechange de AL et BLPOP AL de telle sorte que le max soit dans AL
saut PUSH AL reacutesultat dans la pilePUSH CL adresse de retour dans la pileRET deacutepile ladresse de retour
Le programme apparaicirct plus complexe Mais il faut noter que dans les langages dassemblage reacuteels on peut acceacuteder aux valeurs de la pile sans deacutepiler ce qui simplifie le deacutebut et la fin du SSP
ad retourdonneacutee 2donneacutee 1
reacutesultat
pile apregraves le CALL
pile apregraves le RET
22
Cette forme drsquoentreacuteesortie sans condition correspond aux peacuteripheacuteriques qui sont toujours disponibles comme les interrupteurs les voyants lumineux Dans le cas de peacuteripheacuteriques plus complexes il faut recourir aux entreacuteessorties avec condition il faut connaicirctre lrsquoeacutetat du peacuteripheacuterique avant denvoyer ou de lire des informations (ex reacuteseau disque ) Comme nous lrsquoavons vu dans la partie sur le mateacuteriel il existe deux approches principales lrsquoattente active et les entreacuteessorties avec interruptions
23
Les manipulations de bits
1) Deacutecalage et rotations Ces opeacuterations deacutecalent vers la gauche ou vers la droite les bits
drsquoun registre Elles peuvent ecirctre utiliseacutees pour tester un bit quelconque (on le deacutecale tout agrave droite on annule les autres bits et on teste le mot) ou encore pour diviser ou multiplier rapidement un entier par une puissance de 2
SHL CLDeacutecalage agrave gauche le bit de poids fort est perdule bit de poids faible devient 0 (SHift Left)
SHR DL Deacutecalage agrave droite le bit de poids faible est perdu le bit de poids fort devient 0 (SHift Right)
ROL AL Rotation agrave gauche le bit de poids fort devient le bit de poids faible (ROtate Left)
ROR BL Rotation agrave droite le bit de poids faible devient le bit de poids fort (ROtate Right)
24
2) Les instructions logiquesLes instructions logiques effectuent des opeacuterations logiques bit agrave bit (chaque bit est calculeacute indeacutependamment des autres) ET OU et OU exclusif 0 0 1 1 0 0 1 1 0 0 1 1 OU 0 1 0 1 ET 0 1 0 1 OU EX 0 1 0 1 0 1 1 1 0 0 0 1 0 1 1 0a) Linstruction OR OR AL BL AL = AL OU BL OR est souvent utiliseacute pour forcer certains bits agrave 1 gracircce agrave un laquo masque raquo ayant des 1 agrave ces positions Exemple
MOV BL F0 masque BL 11110000MOV AL 55 AL 01010101OR AL BL 11110101
Les 4ers bits de AL sont forceacutes agrave 1 les 4 autres sont inchangeacutesb) Linstruction AND AND AL BL AL = AL ET BL AND est souvent utiliseacute pour forcer certains bits agrave 0 gracircce agrave un laquo masque raquo ayant des 0 agrave ces positions
25
Exemple MOV BL 0F masque BL 00001111MOV AL 55 AL 01010101AND AL BL 00000101
Les 4ers bits de AL sont forceacutes agrave 0 les 4 autres sont inchangeacutesc) Linstruction XOR XOR AL BL AL = AL OU EXCLUSIF BL XOR est souvent utiliseacute pour inverser certains bits gracircce agrave un laquo masque raquo ayant des 1 agrave ces positions
Exemple MOV BL F0 masque BL 11110000MOV AL 55 AL 01010101XOR AL BL 10100101Les 4ers bits de AL sont inverseacutes les 4 autres sont inchangeacutes
Remarque on na pas besoin de recourir agrave lassembleur pour manipuler des bits ces opeacuterateurs existent dans beaucoup de langages eacutevolueacutes comme Java En Java SHL slsquoeacutecrit gtgt SHR slsquoeacutecrit ltlt OR slsquoeacutecrit j AND slsquoeacutecrit amp et XOR slsquoeacutecrit ^ Exemple short i = 13 i a la valeur 0000000000001101 i = i ltlt 2 i prend la valeur 0000000000110100
26
Les sous programmes (SSP)
Un SSP est une suite dinstructions effectuant un certain traitement et regroupeacutees par commoditeacute deacutecoupage du programme en petits lsquomorceauxrsquo morceau utiliseacute plusieurs fois hellipUn SSP est repeacutereacute par ladresse de sa premiegravere instruction Lexeacutecution du SSP est deacuteclencheacutee par un programme appelant Un SSP peut lui mecircme en appeler un autre et ainsi de suiteLappel du SSP est effectueacute par linstruction CALL
CALL adresse (ex CALL 50)Lexeacutecution se poursuit agrave ladresse indiqueacutee dans le CALL La fin du SSP est marqueacutee par linstruction
RETLe processeur revient implicitement agrave linstruction placeacutee immeacutediatement apregraves le CALL car lrsquoadresse de retour est empileacutee
27
Ladresse de retour utiliseacutee par RET est ajouteacutee sur la pile par linstruction CALL Lorsque le processeur exeacutecute linstruction RET il deacutepile ladresse de la pile et la range dans le compteur ordinalCe meacutecanisme marche mecircme dans le cas des appels imbriqueacutes (un CALL dans un SSP vers un autre SSP) et dans le cas des appels reacutecursifs (un SSP qui sappelle lui mecircme un certain nombre de fois)
CALL 40
CALL 90
RET
RET
0
40
904546
1213
13
4613
13
pile
4613
28
Le plus souvent le SSP effectue un traitement sur des donneacutees (ou paramegravetres) qui sont fournies par le programme appelant et produit un reacutesultat qui est retourneacute agrave ce programmePlusieurs strateacutegies pour passer les paramegravetres a) passage par les registresLes valeurs des paramegravetres et du reacutesultat sont contenues dans des registres bien deacutefinis Meacutethode simple qui ne convient que si le nombre de paramegravetres est faible car il y a peu de registresEx le SSP agrave ladresse hexadeacutecimale 30 calcule le maximum de 2 entiers naturels On convient que les entiers sont passeacutes par les registres AL et BL et que le reacutesultat est placeacute dans le registre AL Lappel slsquoeacutecrit
MOV AL donneacutee1MOV BL donneacutee2CALL 30 le reacutesultat est disponible dans AL
29
Le SSP slsquoeacutecrit ORG 30 directive qui indique que le code qui suit est
situeacute agrave ladresse 30 Ne prend pas de place en meacutemoire
CMP AL BLJNS saut si AL gt= BL (AL-BL gt= 0)PUSH BL sinon eacutechange de AL et BLPOP AL de telle sorte max soit dans AL
saut RET
b) passage par la pileLes valeurs des paramegravetres sont empileacutees Il peut y en avoir un nombre quelconque Le SSP reacutecupegravere les valeurs dans la pileEx le SSP agrave ladresse 40 utilise la pile pour passer les paramegravetres et reccediloit le reacutesultat dans la pile Lappel slsquoeacutecrit
PUSH AX donneacutee1 preacutealablement rangeacutee dans AXPUSH BX donneacutee2 preacutealablement rangeacutee dans BXCALL 40POP AX reacutecupeacuteration du reacutesultat dans AX par exemple
30
Le SSP peut slsquoeacutecrire ORG 40POP CL adresse de retour empileacutee par le CALLPOP BL deuxiegraveme paramegravetrePOP AL premier paramegravetreCMP BL ALJNS saut si AL gt= BLPUSH BL sinon eacutechange de AL et BLPOP AL de telle sorte que le max soit dans AL
saut PUSH AL reacutesultat dans la pilePUSH CL adresse de retour dans la pileRET deacutepile ladresse de retour
Le programme apparaicirct plus complexe Mais il faut noter que dans les langages dassemblage reacuteels on peut acceacuteder aux valeurs de la pile sans deacutepiler ce qui simplifie le deacutebut et la fin du SSP
ad retourdonneacutee 2donneacutee 1
reacutesultat
pile apregraves le CALL
pile apregraves le RET
23
Les manipulations de bits
1) Deacutecalage et rotations Ces opeacuterations deacutecalent vers la gauche ou vers la droite les bits
drsquoun registre Elles peuvent ecirctre utiliseacutees pour tester un bit quelconque (on le deacutecale tout agrave droite on annule les autres bits et on teste le mot) ou encore pour diviser ou multiplier rapidement un entier par une puissance de 2
SHL CLDeacutecalage agrave gauche le bit de poids fort est perdule bit de poids faible devient 0 (SHift Left)
SHR DL Deacutecalage agrave droite le bit de poids faible est perdu le bit de poids fort devient 0 (SHift Right)
ROL AL Rotation agrave gauche le bit de poids fort devient le bit de poids faible (ROtate Left)
ROR BL Rotation agrave droite le bit de poids faible devient le bit de poids fort (ROtate Right)
24
2) Les instructions logiquesLes instructions logiques effectuent des opeacuterations logiques bit agrave bit (chaque bit est calculeacute indeacutependamment des autres) ET OU et OU exclusif 0 0 1 1 0 0 1 1 0 0 1 1 OU 0 1 0 1 ET 0 1 0 1 OU EX 0 1 0 1 0 1 1 1 0 0 0 1 0 1 1 0a) Linstruction OR OR AL BL AL = AL OU BL OR est souvent utiliseacute pour forcer certains bits agrave 1 gracircce agrave un laquo masque raquo ayant des 1 agrave ces positions Exemple
MOV BL F0 masque BL 11110000MOV AL 55 AL 01010101OR AL BL 11110101
Les 4ers bits de AL sont forceacutes agrave 1 les 4 autres sont inchangeacutesb) Linstruction AND AND AL BL AL = AL ET BL AND est souvent utiliseacute pour forcer certains bits agrave 0 gracircce agrave un laquo masque raquo ayant des 0 agrave ces positions
25
Exemple MOV BL 0F masque BL 00001111MOV AL 55 AL 01010101AND AL BL 00000101
Les 4ers bits de AL sont forceacutes agrave 0 les 4 autres sont inchangeacutesc) Linstruction XOR XOR AL BL AL = AL OU EXCLUSIF BL XOR est souvent utiliseacute pour inverser certains bits gracircce agrave un laquo masque raquo ayant des 1 agrave ces positions
Exemple MOV BL F0 masque BL 11110000MOV AL 55 AL 01010101XOR AL BL 10100101Les 4ers bits de AL sont inverseacutes les 4 autres sont inchangeacutes
Remarque on na pas besoin de recourir agrave lassembleur pour manipuler des bits ces opeacuterateurs existent dans beaucoup de langages eacutevolueacutes comme Java En Java SHL slsquoeacutecrit gtgt SHR slsquoeacutecrit ltlt OR slsquoeacutecrit j AND slsquoeacutecrit amp et XOR slsquoeacutecrit ^ Exemple short i = 13 i a la valeur 0000000000001101 i = i ltlt 2 i prend la valeur 0000000000110100
26
Les sous programmes (SSP)
Un SSP est une suite dinstructions effectuant un certain traitement et regroupeacutees par commoditeacute deacutecoupage du programme en petits lsquomorceauxrsquo morceau utiliseacute plusieurs fois hellipUn SSP est repeacutereacute par ladresse de sa premiegravere instruction Lexeacutecution du SSP est deacuteclencheacutee par un programme appelant Un SSP peut lui mecircme en appeler un autre et ainsi de suiteLappel du SSP est effectueacute par linstruction CALL
CALL adresse (ex CALL 50)Lexeacutecution se poursuit agrave ladresse indiqueacutee dans le CALL La fin du SSP est marqueacutee par linstruction
RETLe processeur revient implicitement agrave linstruction placeacutee immeacutediatement apregraves le CALL car lrsquoadresse de retour est empileacutee
27
Ladresse de retour utiliseacutee par RET est ajouteacutee sur la pile par linstruction CALL Lorsque le processeur exeacutecute linstruction RET il deacutepile ladresse de la pile et la range dans le compteur ordinalCe meacutecanisme marche mecircme dans le cas des appels imbriqueacutes (un CALL dans un SSP vers un autre SSP) et dans le cas des appels reacutecursifs (un SSP qui sappelle lui mecircme un certain nombre de fois)
CALL 40
CALL 90
RET
RET
0
40
904546
1213
13
4613
13
pile
4613
28
Le plus souvent le SSP effectue un traitement sur des donneacutees (ou paramegravetres) qui sont fournies par le programme appelant et produit un reacutesultat qui est retourneacute agrave ce programmePlusieurs strateacutegies pour passer les paramegravetres a) passage par les registresLes valeurs des paramegravetres et du reacutesultat sont contenues dans des registres bien deacutefinis Meacutethode simple qui ne convient que si le nombre de paramegravetres est faible car il y a peu de registresEx le SSP agrave ladresse hexadeacutecimale 30 calcule le maximum de 2 entiers naturels On convient que les entiers sont passeacutes par les registres AL et BL et que le reacutesultat est placeacute dans le registre AL Lappel slsquoeacutecrit
MOV AL donneacutee1MOV BL donneacutee2CALL 30 le reacutesultat est disponible dans AL
29
Le SSP slsquoeacutecrit ORG 30 directive qui indique que le code qui suit est
situeacute agrave ladresse 30 Ne prend pas de place en meacutemoire
CMP AL BLJNS saut si AL gt= BL (AL-BL gt= 0)PUSH BL sinon eacutechange de AL et BLPOP AL de telle sorte max soit dans AL
saut RET
b) passage par la pileLes valeurs des paramegravetres sont empileacutees Il peut y en avoir un nombre quelconque Le SSP reacutecupegravere les valeurs dans la pileEx le SSP agrave ladresse 40 utilise la pile pour passer les paramegravetres et reccediloit le reacutesultat dans la pile Lappel slsquoeacutecrit
PUSH AX donneacutee1 preacutealablement rangeacutee dans AXPUSH BX donneacutee2 preacutealablement rangeacutee dans BXCALL 40POP AX reacutecupeacuteration du reacutesultat dans AX par exemple
30
Le SSP peut slsquoeacutecrire ORG 40POP CL adresse de retour empileacutee par le CALLPOP BL deuxiegraveme paramegravetrePOP AL premier paramegravetreCMP BL ALJNS saut si AL gt= BLPUSH BL sinon eacutechange de AL et BLPOP AL de telle sorte que le max soit dans AL
saut PUSH AL reacutesultat dans la pilePUSH CL adresse de retour dans la pileRET deacutepile ladresse de retour
Le programme apparaicirct plus complexe Mais il faut noter que dans les langages dassemblage reacuteels on peut acceacuteder aux valeurs de la pile sans deacutepiler ce qui simplifie le deacutebut et la fin du SSP
ad retourdonneacutee 2donneacutee 1
reacutesultat
pile apregraves le CALL
pile apregraves le RET
24
2) Les instructions logiquesLes instructions logiques effectuent des opeacuterations logiques bit agrave bit (chaque bit est calculeacute indeacutependamment des autres) ET OU et OU exclusif 0 0 1 1 0 0 1 1 0 0 1 1 OU 0 1 0 1 ET 0 1 0 1 OU EX 0 1 0 1 0 1 1 1 0 0 0 1 0 1 1 0a) Linstruction OR OR AL BL AL = AL OU BL OR est souvent utiliseacute pour forcer certains bits agrave 1 gracircce agrave un laquo masque raquo ayant des 1 agrave ces positions Exemple
MOV BL F0 masque BL 11110000MOV AL 55 AL 01010101OR AL BL 11110101
Les 4ers bits de AL sont forceacutes agrave 1 les 4 autres sont inchangeacutesb) Linstruction AND AND AL BL AL = AL ET BL AND est souvent utiliseacute pour forcer certains bits agrave 0 gracircce agrave un laquo masque raquo ayant des 0 agrave ces positions
25
Exemple MOV BL 0F masque BL 00001111MOV AL 55 AL 01010101AND AL BL 00000101
Les 4ers bits de AL sont forceacutes agrave 0 les 4 autres sont inchangeacutesc) Linstruction XOR XOR AL BL AL = AL OU EXCLUSIF BL XOR est souvent utiliseacute pour inverser certains bits gracircce agrave un laquo masque raquo ayant des 1 agrave ces positions
Exemple MOV BL F0 masque BL 11110000MOV AL 55 AL 01010101XOR AL BL 10100101Les 4ers bits de AL sont inverseacutes les 4 autres sont inchangeacutes
Remarque on na pas besoin de recourir agrave lassembleur pour manipuler des bits ces opeacuterateurs existent dans beaucoup de langages eacutevolueacutes comme Java En Java SHL slsquoeacutecrit gtgt SHR slsquoeacutecrit ltlt OR slsquoeacutecrit j AND slsquoeacutecrit amp et XOR slsquoeacutecrit ^ Exemple short i = 13 i a la valeur 0000000000001101 i = i ltlt 2 i prend la valeur 0000000000110100
26
Les sous programmes (SSP)
Un SSP est une suite dinstructions effectuant un certain traitement et regroupeacutees par commoditeacute deacutecoupage du programme en petits lsquomorceauxrsquo morceau utiliseacute plusieurs fois hellipUn SSP est repeacutereacute par ladresse de sa premiegravere instruction Lexeacutecution du SSP est deacuteclencheacutee par un programme appelant Un SSP peut lui mecircme en appeler un autre et ainsi de suiteLappel du SSP est effectueacute par linstruction CALL
CALL adresse (ex CALL 50)Lexeacutecution se poursuit agrave ladresse indiqueacutee dans le CALL La fin du SSP est marqueacutee par linstruction
RETLe processeur revient implicitement agrave linstruction placeacutee immeacutediatement apregraves le CALL car lrsquoadresse de retour est empileacutee
27
Ladresse de retour utiliseacutee par RET est ajouteacutee sur la pile par linstruction CALL Lorsque le processeur exeacutecute linstruction RET il deacutepile ladresse de la pile et la range dans le compteur ordinalCe meacutecanisme marche mecircme dans le cas des appels imbriqueacutes (un CALL dans un SSP vers un autre SSP) et dans le cas des appels reacutecursifs (un SSP qui sappelle lui mecircme un certain nombre de fois)
CALL 40
CALL 90
RET
RET
0
40
904546
1213
13
4613
13
pile
4613
28
Le plus souvent le SSP effectue un traitement sur des donneacutees (ou paramegravetres) qui sont fournies par le programme appelant et produit un reacutesultat qui est retourneacute agrave ce programmePlusieurs strateacutegies pour passer les paramegravetres a) passage par les registresLes valeurs des paramegravetres et du reacutesultat sont contenues dans des registres bien deacutefinis Meacutethode simple qui ne convient que si le nombre de paramegravetres est faible car il y a peu de registresEx le SSP agrave ladresse hexadeacutecimale 30 calcule le maximum de 2 entiers naturels On convient que les entiers sont passeacutes par les registres AL et BL et que le reacutesultat est placeacute dans le registre AL Lappel slsquoeacutecrit
MOV AL donneacutee1MOV BL donneacutee2CALL 30 le reacutesultat est disponible dans AL
29
Le SSP slsquoeacutecrit ORG 30 directive qui indique que le code qui suit est
situeacute agrave ladresse 30 Ne prend pas de place en meacutemoire
CMP AL BLJNS saut si AL gt= BL (AL-BL gt= 0)PUSH BL sinon eacutechange de AL et BLPOP AL de telle sorte max soit dans AL
saut RET
b) passage par la pileLes valeurs des paramegravetres sont empileacutees Il peut y en avoir un nombre quelconque Le SSP reacutecupegravere les valeurs dans la pileEx le SSP agrave ladresse 40 utilise la pile pour passer les paramegravetres et reccediloit le reacutesultat dans la pile Lappel slsquoeacutecrit
PUSH AX donneacutee1 preacutealablement rangeacutee dans AXPUSH BX donneacutee2 preacutealablement rangeacutee dans BXCALL 40POP AX reacutecupeacuteration du reacutesultat dans AX par exemple
30
Le SSP peut slsquoeacutecrire ORG 40POP CL adresse de retour empileacutee par le CALLPOP BL deuxiegraveme paramegravetrePOP AL premier paramegravetreCMP BL ALJNS saut si AL gt= BLPUSH BL sinon eacutechange de AL et BLPOP AL de telle sorte que le max soit dans AL
saut PUSH AL reacutesultat dans la pilePUSH CL adresse de retour dans la pileRET deacutepile ladresse de retour
Le programme apparaicirct plus complexe Mais il faut noter que dans les langages dassemblage reacuteels on peut acceacuteder aux valeurs de la pile sans deacutepiler ce qui simplifie le deacutebut et la fin du SSP
ad retourdonneacutee 2donneacutee 1
reacutesultat
pile apregraves le CALL
pile apregraves le RET
25
Exemple MOV BL 0F masque BL 00001111MOV AL 55 AL 01010101AND AL BL 00000101
Les 4ers bits de AL sont forceacutes agrave 0 les 4 autres sont inchangeacutesc) Linstruction XOR XOR AL BL AL = AL OU EXCLUSIF BL XOR est souvent utiliseacute pour inverser certains bits gracircce agrave un laquo masque raquo ayant des 1 agrave ces positions
Exemple MOV BL F0 masque BL 11110000MOV AL 55 AL 01010101XOR AL BL 10100101Les 4ers bits de AL sont inverseacutes les 4 autres sont inchangeacutes
Remarque on na pas besoin de recourir agrave lassembleur pour manipuler des bits ces opeacuterateurs existent dans beaucoup de langages eacutevolueacutes comme Java En Java SHL slsquoeacutecrit gtgt SHR slsquoeacutecrit ltlt OR slsquoeacutecrit j AND slsquoeacutecrit amp et XOR slsquoeacutecrit ^ Exemple short i = 13 i a la valeur 0000000000001101 i = i ltlt 2 i prend la valeur 0000000000110100
26
Les sous programmes (SSP)
Un SSP est une suite dinstructions effectuant un certain traitement et regroupeacutees par commoditeacute deacutecoupage du programme en petits lsquomorceauxrsquo morceau utiliseacute plusieurs fois hellipUn SSP est repeacutereacute par ladresse de sa premiegravere instruction Lexeacutecution du SSP est deacuteclencheacutee par un programme appelant Un SSP peut lui mecircme en appeler un autre et ainsi de suiteLappel du SSP est effectueacute par linstruction CALL
CALL adresse (ex CALL 50)Lexeacutecution se poursuit agrave ladresse indiqueacutee dans le CALL La fin du SSP est marqueacutee par linstruction
RETLe processeur revient implicitement agrave linstruction placeacutee immeacutediatement apregraves le CALL car lrsquoadresse de retour est empileacutee
27
Ladresse de retour utiliseacutee par RET est ajouteacutee sur la pile par linstruction CALL Lorsque le processeur exeacutecute linstruction RET il deacutepile ladresse de la pile et la range dans le compteur ordinalCe meacutecanisme marche mecircme dans le cas des appels imbriqueacutes (un CALL dans un SSP vers un autre SSP) et dans le cas des appels reacutecursifs (un SSP qui sappelle lui mecircme un certain nombre de fois)
CALL 40
CALL 90
RET
RET
0
40
904546
1213
13
4613
13
pile
4613
28
Le plus souvent le SSP effectue un traitement sur des donneacutees (ou paramegravetres) qui sont fournies par le programme appelant et produit un reacutesultat qui est retourneacute agrave ce programmePlusieurs strateacutegies pour passer les paramegravetres a) passage par les registresLes valeurs des paramegravetres et du reacutesultat sont contenues dans des registres bien deacutefinis Meacutethode simple qui ne convient que si le nombre de paramegravetres est faible car il y a peu de registresEx le SSP agrave ladresse hexadeacutecimale 30 calcule le maximum de 2 entiers naturels On convient que les entiers sont passeacutes par les registres AL et BL et que le reacutesultat est placeacute dans le registre AL Lappel slsquoeacutecrit
MOV AL donneacutee1MOV BL donneacutee2CALL 30 le reacutesultat est disponible dans AL
29
Le SSP slsquoeacutecrit ORG 30 directive qui indique que le code qui suit est
situeacute agrave ladresse 30 Ne prend pas de place en meacutemoire
CMP AL BLJNS saut si AL gt= BL (AL-BL gt= 0)PUSH BL sinon eacutechange de AL et BLPOP AL de telle sorte max soit dans AL
saut RET
b) passage par la pileLes valeurs des paramegravetres sont empileacutees Il peut y en avoir un nombre quelconque Le SSP reacutecupegravere les valeurs dans la pileEx le SSP agrave ladresse 40 utilise la pile pour passer les paramegravetres et reccediloit le reacutesultat dans la pile Lappel slsquoeacutecrit
PUSH AX donneacutee1 preacutealablement rangeacutee dans AXPUSH BX donneacutee2 preacutealablement rangeacutee dans BXCALL 40POP AX reacutecupeacuteration du reacutesultat dans AX par exemple
30
Le SSP peut slsquoeacutecrire ORG 40POP CL adresse de retour empileacutee par le CALLPOP BL deuxiegraveme paramegravetrePOP AL premier paramegravetreCMP BL ALJNS saut si AL gt= BLPUSH BL sinon eacutechange de AL et BLPOP AL de telle sorte que le max soit dans AL
saut PUSH AL reacutesultat dans la pilePUSH CL adresse de retour dans la pileRET deacutepile ladresse de retour
Le programme apparaicirct plus complexe Mais il faut noter que dans les langages dassemblage reacuteels on peut acceacuteder aux valeurs de la pile sans deacutepiler ce qui simplifie le deacutebut et la fin du SSP
ad retourdonneacutee 2donneacutee 1
reacutesultat
pile apregraves le CALL
pile apregraves le RET
26
Les sous programmes (SSP)
Un SSP est une suite dinstructions effectuant un certain traitement et regroupeacutees par commoditeacute deacutecoupage du programme en petits lsquomorceauxrsquo morceau utiliseacute plusieurs fois hellipUn SSP est repeacutereacute par ladresse de sa premiegravere instruction Lexeacutecution du SSP est deacuteclencheacutee par un programme appelant Un SSP peut lui mecircme en appeler un autre et ainsi de suiteLappel du SSP est effectueacute par linstruction CALL
CALL adresse (ex CALL 50)Lexeacutecution se poursuit agrave ladresse indiqueacutee dans le CALL La fin du SSP est marqueacutee par linstruction
RETLe processeur revient implicitement agrave linstruction placeacutee immeacutediatement apregraves le CALL car lrsquoadresse de retour est empileacutee
27
Ladresse de retour utiliseacutee par RET est ajouteacutee sur la pile par linstruction CALL Lorsque le processeur exeacutecute linstruction RET il deacutepile ladresse de la pile et la range dans le compteur ordinalCe meacutecanisme marche mecircme dans le cas des appels imbriqueacutes (un CALL dans un SSP vers un autre SSP) et dans le cas des appels reacutecursifs (un SSP qui sappelle lui mecircme un certain nombre de fois)
CALL 40
CALL 90
RET
RET
0
40
904546
1213
13
4613
13
pile
4613
28
Le plus souvent le SSP effectue un traitement sur des donneacutees (ou paramegravetres) qui sont fournies par le programme appelant et produit un reacutesultat qui est retourneacute agrave ce programmePlusieurs strateacutegies pour passer les paramegravetres a) passage par les registresLes valeurs des paramegravetres et du reacutesultat sont contenues dans des registres bien deacutefinis Meacutethode simple qui ne convient que si le nombre de paramegravetres est faible car il y a peu de registresEx le SSP agrave ladresse hexadeacutecimale 30 calcule le maximum de 2 entiers naturels On convient que les entiers sont passeacutes par les registres AL et BL et que le reacutesultat est placeacute dans le registre AL Lappel slsquoeacutecrit
MOV AL donneacutee1MOV BL donneacutee2CALL 30 le reacutesultat est disponible dans AL
29
Le SSP slsquoeacutecrit ORG 30 directive qui indique que le code qui suit est
situeacute agrave ladresse 30 Ne prend pas de place en meacutemoire
CMP AL BLJNS saut si AL gt= BL (AL-BL gt= 0)PUSH BL sinon eacutechange de AL et BLPOP AL de telle sorte max soit dans AL
saut RET
b) passage par la pileLes valeurs des paramegravetres sont empileacutees Il peut y en avoir un nombre quelconque Le SSP reacutecupegravere les valeurs dans la pileEx le SSP agrave ladresse 40 utilise la pile pour passer les paramegravetres et reccediloit le reacutesultat dans la pile Lappel slsquoeacutecrit
PUSH AX donneacutee1 preacutealablement rangeacutee dans AXPUSH BX donneacutee2 preacutealablement rangeacutee dans BXCALL 40POP AX reacutecupeacuteration du reacutesultat dans AX par exemple
30
Le SSP peut slsquoeacutecrire ORG 40POP CL adresse de retour empileacutee par le CALLPOP BL deuxiegraveme paramegravetrePOP AL premier paramegravetreCMP BL ALJNS saut si AL gt= BLPUSH BL sinon eacutechange de AL et BLPOP AL de telle sorte que le max soit dans AL
saut PUSH AL reacutesultat dans la pilePUSH CL adresse de retour dans la pileRET deacutepile ladresse de retour
Le programme apparaicirct plus complexe Mais il faut noter que dans les langages dassemblage reacuteels on peut acceacuteder aux valeurs de la pile sans deacutepiler ce qui simplifie le deacutebut et la fin du SSP
ad retourdonneacutee 2donneacutee 1
reacutesultat
pile apregraves le CALL
pile apregraves le RET
27
Ladresse de retour utiliseacutee par RET est ajouteacutee sur la pile par linstruction CALL Lorsque le processeur exeacutecute linstruction RET il deacutepile ladresse de la pile et la range dans le compteur ordinalCe meacutecanisme marche mecircme dans le cas des appels imbriqueacutes (un CALL dans un SSP vers un autre SSP) et dans le cas des appels reacutecursifs (un SSP qui sappelle lui mecircme un certain nombre de fois)
CALL 40
CALL 90
RET
RET
0
40
904546
1213
13
4613
13
pile
4613
28
Le plus souvent le SSP effectue un traitement sur des donneacutees (ou paramegravetres) qui sont fournies par le programme appelant et produit un reacutesultat qui est retourneacute agrave ce programmePlusieurs strateacutegies pour passer les paramegravetres a) passage par les registresLes valeurs des paramegravetres et du reacutesultat sont contenues dans des registres bien deacutefinis Meacutethode simple qui ne convient que si le nombre de paramegravetres est faible car il y a peu de registresEx le SSP agrave ladresse hexadeacutecimale 30 calcule le maximum de 2 entiers naturels On convient que les entiers sont passeacutes par les registres AL et BL et que le reacutesultat est placeacute dans le registre AL Lappel slsquoeacutecrit
MOV AL donneacutee1MOV BL donneacutee2CALL 30 le reacutesultat est disponible dans AL
29
Le SSP slsquoeacutecrit ORG 30 directive qui indique que le code qui suit est
situeacute agrave ladresse 30 Ne prend pas de place en meacutemoire
CMP AL BLJNS saut si AL gt= BL (AL-BL gt= 0)PUSH BL sinon eacutechange de AL et BLPOP AL de telle sorte max soit dans AL
saut RET
b) passage par la pileLes valeurs des paramegravetres sont empileacutees Il peut y en avoir un nombre quelconque Le SSP reacutecupegravere les valeurs dans la pileEx le SSP agrave ladresse 40 utilise la pile pour passer les paramegravetres et reccediloit le reacutesultat dans la pile Lappel slsquoeacutecrit
PUSH AX donneacutee1 preacutealablement rangeacutee dans AXPUSH BX donneacutee2 preacutealablement rangeacutee dans BXCALL 40POP AX reacutecupeacuteration du reacutesultat dans AX par exemple
30
Le SSP peut slsquoeacutecrire ORG 40POP CL adresse de retour empileacutee par le CALLPOP BL deuxiegraveme paramegravetrePOP AL premier paramegravetreCMP BL ALJNS saut si AL gt= BLPUSH BL sinon eacutechange de AL et BLPOP AL de telle sorte que le max soit dans AL
saut PUSH AL reacutesultat dans la pilePUSH CL adresse de retour dans la pileRET deacutepile ladresse de retour
Le programme apparaicirct plus complexe Mais il faut noter que dans les langages dassemblage reacuteels on peut acceacuteder aux valeurs de la pile sans deacutepiler ce qui simplifie le deacutebut et la fin du SSP
ad retourdonneacutee 2donneacutee 1
reacutesultat
pile apregraves le CALL
pile apregraves le RET
28
Le plus souvent le SSP effectue un traitement sur des donneacutees (ou paramegravetres) qui sont fournies par le programme appelant et produit un reacutesultat qui est retourneacute agrave ce programmePlusieurs strateacutegies pour passer les paramegravetres a) passage par les registresLes valeurs des paramegravetres et du reacutesultat sont contenues dans des registres bien deacutefinis Meacutethode simple qui ne convient que si le nombre de paramegravetres est faible car il y a peu de registresEx le SSP agrave ladresse hexadeacutecimale 30 calcule le maximum de 2 entiers naturels On convient que les entiers sont passeacutes par les registres AL et BL et que le reacutesultat est placeacute dans le registre AL Lappel slsquoeacutecrit
MOV AL donneacutee1MOV BL donneacutee2CALL 30 le reacutesultat est disponible dans AL
29
Le SSP slsquoeacutecrit ORG 30 directive qui indique que le code qui suit est
situeacute agrave ladresse 30 Ne prend pas de place en meacutemoire
CMP AL BLJNS saut si AL gt= BL (AL-BL gt= 0)PUSH BL sinon eacutechange de AL et BLPOP AL de telle sorte max soit dans AL
saut RET
b) passage par la pileLes valeurs des paramegravetres sont empileacutees Il peut y en avoir un nombre quelconque Le SSP reacutecupegravere les valeurs dans la pileEx le SSP agrave ladresse 40 utilise la pile pour passer les paramegravetres et reccediloit le reacutesultat dans la pile Lappel slsquoeacutecrit
PUSH AX donneacutee1 preacutealablement rangeacutee dans AXPUSH BX donneacutee2 preacutealablement rangeacutee dans BXCALL 40POP AX reacutecupeacuteration du reacutesultat dans AX par exemple
30
Le SSP peut slsquoeacutecrire ORG 40POP CL adresse de retour empileacutee par le CALLPOP BL deuxiegraveme paramegravetrePOP AL premier paramegravetreCMP BL ALJNS saut si AL gt= BLPUSH BL sinon eacutechange de AL et BLPOP AL de telle sorte que le max soit dans AL
saut PUSH AL reacutesultat dans la pilePUSH CL adresse de retour dans la pileRET deacutepile ladresse de retour
Le programme apparaicirct plus complexe Mais il faut noter que dans les langages dassemblage reacuteels on peut acceacuteder aux valeurs de la pile sans deacutepiler ce qui simplifie le deacutebut et la fin du SSP
ad retourdonneacutee 2donneacutee 1
reacutesultat
pile apregraves le CALL
pile apregraves le RET
29
Le SSP slsquoeacutecrit ORG 30 directive qui indique que le code qui suit est
situeacute agrave ladresse 30 Ne prend pas de place en meacutemoire
CMP AL BLJNS saut si AL gt= BL (AL-BL gt= 0)PUSH BL sinon eacutechange de AL et BLPOP AL de telle sorte max soit dans AL
saut RET
b) passage par la pileLes valeurs des paramegravetres sont empileacutees Il peut y en avoir un nombre quelconque Le SSP reacutecupegravere les valeurs dans la pileEx le SSP agrave ladresse 40 utilise la pile pour passer les paramegravetres et reccediloit le reacutesultat dans la pile Lappel slsquoeacutecrit
PUSH AX donneacutee1 preacutealablement rangeacutee dans AXPUSH BX donneacutee2 preacutealablement rangeacutee dans BXCALL 40POP AX reacutecupeacuteration du reacutesultat dans AX par exemple
30
Le SSP peut slsquoeacutecrire ORG 40POP CL adresse de retour empileacutee par le CALLPOP BL deuxiegraveme paramegravetrePOP AL premier paramegravetreCMP BL ALJNS saut si AL gt= BLPUSH BL sinon eacutechange de AL et BLPOP AL de telle sorte que le max soit dans AL
saut PUSH AL reacutesultat dans la pilePUSH CL adresse de retour dans la pileRET deacutepile ladresse de retour
Le programme apparaicirct plus complexe Mais il faut noter que dans les langages dassemblage reacuteels on peut acceacuteder aux valeurs de la pile sans deacutepiler ce qui simplifie le deacutebut et la fin du SSP
ad retourdonneacutee 2donneacutee 1
reacutesultat
pile apregraves le CALL
pile apregraves le RET
30
Le SSP peut slsquoeacutecrire ORG 40POP CL adresse de retour empileacutee par le CALLPOP BL deuxiegraveme paramegravetrePOP AL premier paramegravetreCMP BL ALJNS saut si AL gt= BLPUSH BL sinon eacutechange de AL et BLPOP AL de telle sorte que le max soit dans AL
saut PUSH AL reacutesultat dans la pilePUSH CL adresse de retour dans la pileRET deacutepile ladresse de retour
Le programme apparaicirct plus complexe Mais il faut noter que dans les langages dassemblage reacuteels on peut acceacuteder aux valeurs de la pile sans deacutepiler ce qui simplifie le deacutebut et la fin du SSP
ad retourdonneacutee 2donneacutee 1
reacutesultat
pile apregraves le CALL
pile apregraves le RET