Cours gratuits » Cours informatique » Cours programmation » Cours Assembleur » Cours Architecture materielle des ordinateurs en PDF

Cours Architecture materielle des ordinateurs en PDF

Problème à signaler:

Télécharger



★★★★★★★★★★3.5 étoiles sur 5 basé sur 1 votes.
Votez ce document:

Cours Architecture materielle des ordinateurs

...

Rappels d’architecture

Un ordinateur se compose principalement d’un processeur de memoire. ´

On y attache ensuite des periph ériques, mais ils sont optionnels.

donnees ´ : disque dur, etc

entree utilisateur : clavier, souris sortie utilisateur : ecran, imprimante processeur supplementaire : GPU ´

Le processeur

n>

Le processeur lit et ecrit des informations en ´ mémoire

Il peut de plus effectuer des opérations arithmetiques et logiques ´

Chaque action qu’il peut effectuer est appelee´ instruction

Les instructions effectuees par le processeur sont stock ées dans ´ la memoire. ´

Il dispose d’un petit nombre d’emplacements memoire d’acc és plus rapide, les registres.

Un registre special nomm é pc (program counter) (ou ip (instruction counter)) contient l’adresse de la prochaine instruction a ex ` ecuter ´

De façon repétée le processeur : ´

1 lit l’instruction stockee´ a l’adresse contenue dans pc `

2 l’interprete ce qui peut modifier certains registres (dont pc) et la memoire ´

CISC / RISC

C’est principalement le jeu d’instruction qui distingue les processeurs

Les processeurs CISC (Complex Instruction Set Computer)

Nombre d’instruction elev é´

Les instructions realisent souvent les transferts vers et depuis la memoire peu de registres

Exemples : Intel 8068, Motorola 68000

Les processeurs RISC (Reduced Instruction Set Computer)

Peu d’instructions

Les instructions operent sur des registres `

Registres nombreux

Exemples :Alpha, Sparc, MIPS, PowerPC

X86

X86 est un jeu d’instruction commun a plusieurs processeurs `

Le nom X86 provient des processeurs Intel utilisant ce jeu d’instructions (8086, 80186, 80286, 80386, 80486) jeu d’instruction des processeurs equipant les ordinateurs personnels

Registres

Les processeurs X86 (a partir du 386) ont huit registres de quatre octets chacun

eax ax ah al

ebx bx bh bl

ecx cx ch cl

edx dx dh dl

esi

edi

esp

ebp les registres eax, ebx, ecx et edx peuvent etre d ˆ ecoup és en registres plus petits

eax peut etre d ˆ ecoup é en trois registres : un registre de deux octets : ax et deux registres d’un octet : ah et al.

esp pointe sur le sommet de la pile

ebp pointe sur l’adresse de base de l’espace global

Segmentation de la memoire ´

La memoire est divis ée en segments ind épendants. ´

L’adresse de debut de chaque segment est stock ée dans un registre.

Chaque segment contient un type particulier de donnees. ´

On s’interessera plus particuli érement ` a trois segments : le segment de données ou sont stock ` es les variables globales et les constantes. La taille de ce segment n’evolue pas au cours de l’execution du programme (il est statique). ´

le segment de code ou sont stock ` ees les instructions qui composent ´

le programme

la pile ou sont stock ` es les variables locales, param étres de fonctions et certains resultats interm édiares de calcul ´

L’organisation de la memoire en segments est conventionnelle ´

En theorie tous les segments sont accessibles de la m éme mani ˆ ere `

Registres lies aux segments ´

Segment de code

cs (Code Segment) adresse de debut du segment de code ´

eip (Instruction Pointer) adresse relative de la prochaine instruction a effectuer `

cs + eip est l’adresse absolue de la prochaine instruction a effectuer `

Segment de donnees ´

ds (Data Segment) adresse de debut du segment de donn ées ´

Pile

ss (Stack Segment) adresse de la base de la pile esp (Stack Pointer) adresse relative du sommet de pile

ss + esp est l’adresse absolue du sommet de pile

ebp (Base Pointer) registre utilise pour le calcul d’adresses de variables locales et de parametres

Segmentation de la memoire ´

stack segment ss → base pointer ebp → parametres de fonctions `

pile et variables locales

stack pointer esp →

espace non alloue´

objets alloues´

tas dynamiquement

variables gobales

donnees ét constantes

data segment ds →

instr. pointer eip → code instructions

code segment cs →

Flags

Les flags sont des variables booleennes (stock ées sur un bit) qui ´ donnent des informations sur le deroulement d’une op ération et sur l’etat du processeur. ´

32 flags sont definis, ils sont stock és dans le registre éflags,

appele registre d’ état. ´

Valeur de quelques flags apres une op ` eration : ´

CF : Carry Flag.

Indique une retenue (CF=1) sur les entiers non signes. ´

PF : Parity Flag.

Indique que le resultat est pair ( ´ PF=1) ou impair (PF=0).

ZF : Zero Flag.

Indique si le resultat est nul ( ´ ZF=1) ou non nul (ZF=0).

SF : Sign Flag.

Indique si le resultat est positif ( ´ SF=0) ou negatif ( ´ SF=1).

OF : Overflow Flag.

Indique un debordement ( ´ OF=1) sur les entiers signes. ´

Langage machine

Une instruction de langage machine correspond a une instruction ` possible du processeur.

Elle contient :

un code correspondant a op ` eration ´ a r ` ealiser, les arguments de l’opération : valeurs directes, num éros de registres, adresses memoire. code op operandes ´

Langage machine

lisible

Si on ouvre un fichier executable avec un éditeur (hexad écimal), on ´ obtient

...

01ebe814063727473747566662e6305f5f43544f525f4c

5f05f5f44544f525f4c4953545f5f05f5f4a43525f4c49

53545f5f05f5f646f5f676c6f62616c5f64746f72735f6

75780636f6d706c657465642e36353331064746f725f69

...

C’est une suite d’instructions comme 01ebe814, que l’on peut traduire directement de façon plus lisible :

mov eax, ebx

C’est ce qu’on appelle l’assembleur.

L’assembleur est donc une représentation du langage machine.

Il y a autant d’assembleurs que de type de processeurs differents. ´

Langage machine lisible

Si on ouvre un fichier executable avec un éditeur (hexad écimal), on ´ obtient

...

01ebe814063727473747566662e6305f5f43544f525f4c

5f05f5f44544f525f4c4953545f5f05f5f4a43525f4c49

53545f5f05f5f646f5f676c6f62616c5f64746f72735f6

75780636f6d706c657465642e36353331064746f725f69

...

C’est une suite d’instructions comme 01ebe814, que l’on peut traduire directement de façon plus lisible :

mov eax, ebx

C’est ce qu’on appelle l’assembleur.

L’assembleur est donc une représentation du langage machine.

Il y a autant d’assembleurs que de type de processeurs differents. ´

NASM : Netwide Assembler

Langage assembleur pour processeurs 80x86 et x86-64

conçu pour la portabilite et la modularit é´

permet de genérer de nombreux formats ex écutables (Linux, ´

BSD, ELF . . . )

syntaxe intel (instr dest,source) simplifiee´

systeme de macros et pr ` e compilateur ´

NASM : exemple

section .data

const dw 123

section .bss

var resw 1

section .text

global _start

_start:

call main

mov eax, 1

int 0x80

main:

push ebp

mov ebp, esp

mov word [var], const

pop ebp

ret

Sections

Un programme NASM est compose de trois sections : ´

.data

Declaration de constantes (leur valeur ne changera pas durant ´

l’execution)

.bss

Declaration de variables ´

.text

Instructions qui composent le programme

La section data

La section data permet de definir des constantes ´

Elle commence par section .data

Elle est constituee de lignes de la forme ´

etiquette pseudo-instruction valeur

Les pseudo instructions sont les suivantes :

db define byte declare un octet ´

dw define word declare deux octets ´

dd define doubleword declare quatre octets ´

dq define quadword declare huit octets ´

dt define tenbytes declare dix octets ´

Exemples :

const db 1

const dw 123

les variables declar ées en s équence sont dispos ées les unes ´ a c ` otˆ e´

des autres en memoire ´

La section bss

La section bss permet de definir des variables ´

Elle commence par section .bss

Elle est constituee de lignes de la forme ´

etiquette pseudo-instruction nb

Les pseudo instructions sont les suivantes :

resb reserve byte declare un octet ´

resw reserve word declare deux octets ´

resd reserve doubleword declare quatre octets ´

resq reserve quadword declare huit octets ´

rest reserve tenbytes declare dix octets ´

nb represente le nombre d’octets (pour resb) de mots (pour resw) ´

. . . a r ` eserver ´

Exemples :

buffer resb 64 ; reserve 64 octets

wordvar resw 1 ; reserve un mot (deux octets)

realarray resq 10 ; reserve 10 * 8 octets

La section text

La section text contient les instructions correspondant au programme

Elle commence par section .text

Elle est constituee de lignes de la forme ´

[étiquette] nom d instruction [opérandes]

les parties entre crochets sont optionnelles

une etiquette correspond ´ a une adresse (l’adresse dans laquelle est stockee l’instruction) ´

une operande peut étre : ˆ

un registre,

une adresse memoire, ´

une constante

une expression

Acces` a la m ` emoire ´

Si adr est une adresse memoire, alors ´ [adr] represente le contenu de l’adresse adr

C’est comme l’operateur de d éréférencement ´ * du langage C

La taille de l’objet reférenc é peut étre sp ˆ ecifi é si n écessaire byte [adr] un octet

word [adr] deux octets

dword [adr] quatre octets

adr peut etre : ˆ

une constante [123]

une etiquette ´ [var]

un registre [eax]

une expression [2*eax + var + 1]

constantes tt

Instructions

instructions de transfert : registres ↔ memoire ´

Copie : mov

Gestion de la pile : push, pop

instructions de calcul

Arithmetique : ´ add, sub, mul, div

Logique : and, or

Comparaison : cmp

instructions de saut

sauts inconditionnels : jmp

sauts conditionnels : je, jne, jg, jl

appel et retour de procedure : ´ call, ret

appels systeme `

Copie - mov

Syntaxe :

mov destination source

Copie source vers destination

source : un registre, une adresse ou une constante destination : un registre ou une adresse

Les copies registre - registre sont possibles, mais pas les copies

memoire -m émoire ´

Exemples :

mov eax, ebx ; reg reg

mov eax, [var] ; reg mem

mov ebx, 12 ; reg constante

mov [var], eax ; mem reg

mov [var], 1 ; mem constante

Nombre d’octets copies´

Lorsqu’on copie vers un registre ou depuis un registre , c’est la taille du registre qui indique le nombre d’octets copies´ lorsqu’on copie une constante en memoire, il faut pr éciser le ´nombre d’octets a copier, ` a l’aide des mots clefs byte un octet

word deux octets

dword quatre octets

Exemples :

mov eax, ebx ; reg reg

mov eax, [var] ; reg mem

mov ebx, 12 ; reg constante

mov [var], eax ; mem reg

mov word [var], 1 ; mem constante

Empile – push

Syntaxe :

push source

Copie le contenu de source au somme de la pile.

Commence par decr émenter ésp de 4 puis effectue la copie source : adresse, constante ou registre

Exemples

push 1 ; empile la constante 1

push eax ; empile le contenu de eax

push [var] ; empile la valeur se trouvant

; a l’adresse var

Depile – ´ pop

Syntaxe :

pop destination

Copie les 4 octets qui se trouvent au somme de la pile dans destination.

Commence par effectuer la copie puis incremente ésp de 4. destination est une adresse ou un registre

Exemples :

pop eax ; depile dans le registre eax

pop [var] ; depile a l’adresse var

Addition - add

Syntaxe :

add destination source

Effectue destination = destination + source

source : un registre, une adresse ou une constante destination : un registre ou une adresse

modifie eventuellement les flags overflow ( ´ OF) et carry (CF)

Les opérations registre - registre sont possibles, mais pas les ´ opérations m émoire -m émoire ´

Exemples :

add eax, ebx ; reg reg

add eax, [var] ; reg mem

add eax, 12 ; reg const

add [var], eax ; mem reg

add [var], 1 ; mem const

Soustraction - sub

Syntaxe :

sub destination source

Effectue destination = destination – source source : un registre, une adresse ou une constante destination : un registre ou une adresse modifie eventuellement les flags overflow ( ´ OF) et carry (CF)

Les opérations registre - registre sont possibles, mais pas les opérations m émoire -m émoire ´

Exemples :

sub eax, ebx ; reg reg

sub eax, [var] ; reg mem

sub eax, 12 ; reg const

sub [var], eax ; mem reg

sub [var], 1 ; mem const

Multliplication – mul

Syntaxe :

mul source

Effectue : eax = eax * source

La multiplication de deux entiers codes sur 32 bits peut necessiter 64 bits. ´

les quatre octets de poids de plus faible sont mis dans eax et les quatre octets de poids le plus fort dans edx (edx :eax).

source : adresse, constante ou registre

Exemples :

mul ebx ; eax = eax * ebx

mul [var] ; eax = eax * var

mul 12 ; eax = eax * 12

Division – div

Syntaxe :

div source

Effectue la division entiere : ` edx:eax / source

Le quotient est mis dans eax

Le reste est mis dans edx source : adresse, constante ou registre

Opérations logiques and destination source or destination source

xor destination source not destination

Effectue les opérations logiques correspondantes bit ´ a bit `

Le resultat se trouve dans ´ destination

operandes : source peut etre : une adresse, un registre ou une constante destination peut etre : une adresse ou un registre ˆ

Comparaisons – cmp

Syntaxe :

cmp destination, source

Effectue l’opération ´ destination - source

le resultat n’est pas stock é´ destination : registre ou adresse  source : constante, registre ou adresse les valeurs des flags ZF (zero flag), SF (sign flag) et PF (parity flag) sont affectes´

si destination = source, ZF vaut 1

si destination > source, SF vaut 1,

Saut inconditionnel – jmp

Syntaxe :

jmp adr

va a l’adresse ` adr

Saut conditionnel – je

Syntaxe :

je adr

je veut dire jump equal

Si ZF vaut 1 va a l’adresse ` adr

Autres sauts conditionnels – jne, jg, jl

Instruction Description Flags testes´

jne jump not equal ZF

jg jump greater OF, SF, ZF

jl jump less OF, SF

Appel de procedure - ´ call

Syntaxe :

call adr

empile eip (instruction pointer)

va a l’adresse ` adr utilise dans les appel de proc édure : va ´ a l’adresse o ` u se trouve les instructions de la procedure et sauvegarde la prochaine ´ instruction a effectuer au retour de l’appel. `

Retour de procedure - ´ret

Syntaxe :

ret

depile éip utilise en fin de proc édure a utiliser avec ` call

Appels systeme `

Syntaxe :

int 0x80

NASM permet de communiquer avec le système de façon simple ` par la commande int 0x80.

La fonction realisée est d éterminée par la valeur de éax eax Name ebx ecx edx

1 sys exit int

3 sys read unsigned int char * size t

4 sys write unsigned int const char * size t

Compilation directe

L’assembleur est une version “lisible” du langage machine, mais on pourrait en ecrire directement. ´

add $t7, $t3, $sp

Le registre $t0 est en fait le numero 8, et ´ $sp le numero 29. ´

Le code de l’opération est ici coup é en deux : le premier (0) indique c’est une opération arithmétique, le deuxiéme de quelle opération arithmétique pr écis ément. ´

op1 $t7 $t3 $sp (inutilisé) op2

000000 01111 01011 11101 00000 010100

Soit, en hexadécimal, ´ 01ebe814.

On pourrait donc compiler directement un exécutable MIPS. ´

Compilation directe

L’assembleur est une version “lisible” du langage machine, mais on pourrait en ecrire directement. ´

add $t7, $t3, $sp

Le registre $t0 est en fait le numero 8, et ´ $sp le numero 29. ´

Le code de l’opération est ici coup é en deux : le premier (0) indique c’est une opération arithmétique, le deuxième de quelle opération arithmétique précisément. ´

op1 $t7 $t3 $sp (inutilisé) op2

000000 01111 01011 11101 00000 010100

Soit, en hexadécimal, ´01ebe814.

On pourrait donc compiler directement un exécutable MIPS. ´


250