INF1600: Architecture des micro-ordinateurs · Génie informatique et génie logiciel INF1600:...
Transcript of INF1600: Architecture des micro-ordinateurs · Génie informatique et génie logiciel INF1600:...
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
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
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