12
Génie informatique et génie logiciel INF1600: Architecture des micro-ordinateurs Exercices Professeur: Giovanni Beltrame Local: M-4109

INF1600: Architecture des micro-ordinateurs · Génie informatique et génie logiciel INF1600: Architecture des micro-ordinateurs Exercices Professeur: Giovanni Beltrame Local: M-4109

Embed Size (px)

Citation preview

Génie informatique et génie logiciel

INF1600: Architecture des micro-ordinateurs

Exercices

Professeur: Giovanni Beltrame

Local: M-4109

Génie informatique et génie logiciel

Pour quelle(s) valeur(s) de A,B,C la sortie sera à Z

(haute impédance)? (où +V vaut la valeur

logique 1, et la mise à la terre vaut la valeur logique 0) :

C=0, A=1, B=1

C=0, A=0, B=1

C=0, A=1, B=0

Introduction - Exercice

Exercices

Génie informatique et génie logiciel

Exercices

Génie informatique et génie logiciel

eax:=R[0] : ebx:=R[1] :

ecx:=R[2] : edx:=R[3] :

esi:=R[4] : edi:=R[5] :

ebp:=R[6] : esp:=R[7]

L’UAL permet entre autres les opérations suivantes :

0X : 1Y : 2X + Y : 3X Y : 4X << Y :

5X >> Y ; 6Y + 4 : 7Y 4 : …

Architecture

Exercices

Génie informatique et génie logiciel

Soit l’instruction IA-32 « PUSH 12(%ebp) »

a) Donnez le RTN abstrait pour cette instruction

b) Indiquez comment pourrait être codée en langage

machine une instruction qui fait cette opération.

esp ← esp-4 ; Memoire2[esp] ← Memoire2[ebp+12] ;

IR<12..0>=12 (déplacement) IR<17..15>=6 (ebp)

IR<20..18>=0 (pas utilisé) IR<23..21>=7 (esp)

eax:=R[0] : ebx:=R[1] : ecx:=R[2] : edx:=R[3] :

esi:=R[4] : edi:=R[5] : ebp:=R[6] : esp:=R[7]

Architecture

Exercices

Génie informatique et génie logiciel

Soit l’instruction IA-32 « PUSH 12(%ebp) »

c) Donnez le RTN concret effectuant cette opération, en

supposant que IR contient bien l’instruction que vous

avez spécifiée

T ← 12; T2 ← ebp+T ; T ← Memoire2[T2] ;

T2 ← esp -4 : esp ← esp-4; Memoire2[T2] ← T;

L’UAL permet entre autres les opérations suivantes :

0X : 1Y : 2X + Y : 3X Y : 4X << Y :

5X >> Y ; 6Y + 4 : 7Y 4 : …

Architecture

Exercices

Génie informatique et génie logiciel

Exercices

Génie informatique et génie logiciel

d) Indiquez les signaux de contrôle pour pour chaque cycle de

EIP EIP + 4 : IR Mémoire1[EIP] : T 3 ;

T2 T << 2 ; T T Mémoire2[T2] ; ecx T >> ebx ;

en supposant qu’au départ IR=0x09876543 et qu’après

IR12..0=3 : IR14..13=2 : IR17..15=1 : IR20..18=3 :

IR23..21=2

A B C D E F G UAL wEIP wIR wT wT2 wR

1 X 1 0 0 0 0 1 1 1 1 0 0

X X 1 0 0 0 0 4 0 0 0 1 0

X X 0 0 0 1 0 3 0 0 1 0 0

X 2 0 0 1 0 0 5 0 0 0 0 1

Architecture

Exercices

Génie informatique et génie logiciel

.data debut_data: a: .word -0x10, (1 << 9) – 2 .equ d, b – a .byte 0x02, 0x10, 0, 0 .int 0x1004 b: .byte 0x34 .word d .int c c: fin_data:

- Donnez la valeur de chaque

octet en mémoire à partir de

l’adresse debut_data (incluse),

jusqu’à l’adresse fin_data (non

incluse), en hexadécimal

0xF0 0xFF 0xFE 0x01

0x02 0x10 0x00 0x00

0x04 0x10 0x00 0x00

0x34 0x0C 0x00 0x13

0x10 0x00 0x00

debut_data=0x1000=a ; b = 0x100C ; c = 0x1013= fin_data

Placement de données

Exercices

Génie informatique et génie logiciel

main: mov 0x1008, %ebx mov (%ebx), %ecx mov $3+a, %edx lea -0x1000(%edx), %esi mov $0x78, %bh mov a+1(,%esi,4), %edi mov (%esp),%ebp mov $0b01001110,%al sub $0b10010100,%al ret

a:

0xF0 0xFF 0xFE 0x01

0x02 0x10 0x00 0x00

0x04 0x10 0x00 0x00

b:

0x34 0x0C 0x00 0x13

0x10 0x00 0x00

debut_data=0x1000=a ; b = 0x100C ; c = 0x1013= fin_data

%ebp = adresse de retour

%al = 1011 1010 ; CF =1 ; OF = 1 ;

Lecture d'assembleur

Exercices

Génie informatique et génie logiciel

#0x1000

# 0x1001

# 0x1003

#0x1007

FF

23

01

07

00

00

00

78

56

04

00

.data

debut_data:

var1:

.byte -1

.word 0x123

.int var2 – var1

var2:

.int 0x45678

.equ taille, .- debut_tata

Donnez les var1 et var2

et la valeur de chaque

octet en mémoire et

debut_data=0x1000

Exercice lecture d’assembleur

fun:

movl $2,(%esp)

mov $var1, %eax

mov 0x1007, %ebx

mov $0x1007, %ecx

mov var1, %ch

mov var1+1, %edx

mov taille-4(%eax), %esi

pop %edi

ret

Donnez le contenu de registres %eax,

%ebx, %ecx, %edx, %esi, %edi.

esp = 2

%eax = 0x1000

%ebx = 0x45678

%ecx = 0x1007 (%cx )

%ch = FF

%ecx= 0xFF07

%edx = 0x70123

%esi = 0x45678 (taille

= 11; taille -4 = 7;

7 + %eax = 0x1007

%edi = 2

Exercices

Génie informatique et génie logiciel

float g;

short s;

int fun2(int x, int y);

int* fun(unsigned int a, int b,

float f, int* ptr)

{

if(a > 2 && b < fun2(b, 4)) {

*ptr = ptr[-1] + ptr[a];

s++;

} else {

g = f * g;

ptr += 3;

}

return ptr;

}

fun:

movl 4(%esp), %ecx

movl 8(%esp), %edx

cmp $2, %ecx

jbe else

push $4

push %edx

call fun2

add $8, %esp

cmp %eax, %edx

jge else

movl 16(%esp),%eax

movl -4(%eax),%edx

addl (%eax,%ecx,4),%edx

movl %edx,(%eax)

incw s

ret

else:

flds g

flds 12(%esp)

fmulp

fstps g

movl 16(%esp),%eax

add $12,%eax

ret

Écriture d'assembleur