Le « langage machine » Jacques Lonchamp IUT Nancy Charlemagne – DUT Informatique 1A.

30
Le « langage machine » Jacques Lonchamp IUT Nancy Charlemagne – DUT Informatique 1A

Transcript of Le « langage machine » Jacques Lonchamp IUT Nancy Charlemagne – DUT Informatique 1A.

Page 1: 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

Page 2: Le « langage machine » Jacques Lonchamp IUT Nancy Charlemagne – 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

Page 3: Le « langage machine » Jacques Lonchamp IUT Nancy Charlemagne – DUT Informatique 1A.

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

Page 4: Le « langage machine » Jacques Lonchamp IUT Nancy Charlemagne – DUT Informatique 1A.

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

Page 5: Le « langage machine » Jacques Lonchamp IUT Nancy Charlemagne – DUT Informatique 1A.

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

Page 6: Le « langage machine » Jacques Lonchamp IUT Nancy Charlemagne – DUT Informatique 1A.

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

Page 7: Le « langage machine » Jacques Lonchamp IUT Nancy Charlemagne – DUT Informatique 1A.

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

Page 8: Le « langage machine » Jacques Lonchamp IUT Nancy Charlemagne – DUT Informatique 1A.

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

Page 9: Le « langage machine » Jacques Lonchamp IUT Nancy Charlemagne – DUT Informatique 1A.

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

Page 10: Le « langage machine » Jacques Lonchamp IUT Nancy Charlemagne – DUT Informatique 1A.

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

Page 11: Le « langage machine » Jacques Lonchamp IUT Nancy Charlemagne – DUT Informatique 1A.

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

Page 12: Le « langage machine » Jacques Lonchamp IUT Nancy Charlemagne – DUT Informatique 1A.

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

Page 13: Le « langage machine » Jacques Lonchamp IUT Nancy Charlemagne – DUT Informatique 1A.

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

Page 14: Le « langage machine » Jacques Lonchamp IUT Nancy Charlemagne – DUT Informatique 1A.

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

Page 15: Le « langage machine » Jacques Lonchamp IUT Nancy Charlemagne – DUT Informatique 1A.

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

Page 16: Le « langage machine » Jacques Lonchamp IUT Nancy Charlemagne – DUT Informatique 1A.

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

Page 17: Le « langage machine » Jacques Lonchamp IUT Nancy Charlemagne – DUT Informatique 1A.

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

Page 18: Le « langage machine » Jacques Lonchamp IUT Nancy Charlemagne – DUT Informatique 1A.

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

Page 19: Le « langage machine » Jacques Lonchamp IUT Nancy Charlemagne – DUT Informatique 1A.

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

Page 20: Le « langage machine » Jacques Lonchamp IUT Nancy Charlemagne – DUT Informatique 1A.

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

Page 21: Le « langage machine » Jacques Lonchamp IUT Nancy Charlemagne – DUT Informatique 1A.

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

Page 22: Le « langage machine » Jacques Lonchamp IUT Nancy Charlemagne – DUT Informatique 1A.

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

Page 23: Le « langage machine » Jacques Lonchamp IUT Nancy Charlemagne – DUT Informatique 1A.

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

Page 24: Le « langage machine » Jacques Lonchamp IUT Nancy Charlemagne – DUT Informatique 1A.

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

Page 25: Le « langage machine » Jacques Lonchamp IUT Nancy Charlemagne – DUT Informatique 1A.

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

Page 26: Le « langage machine » Jacques Lonchamp IUT Nancy Charlemagne – DUT Informatique 1A.

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

Page 27: Le « langage machine » Jacques Lonchamp IUT Nancy Charlemagne – DUT Informatique 1A.

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

Page 28: Le « langage machine » Jacques Lonchamp IUT Nancy Charlemagne – DUT Informatique 1A.

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

Page 29: Le « langage machine » Jacques Lonchamp IUT Nancy Charlemagne – DUT Informatique 1A.

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

Page 30: Le « langage machine » Jacques Lonchamp IUT Nancy Charlemagne – DUT Informatique 1A.

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