TD3
Exercice 1 (Basic--).On consid`ere le langage Basic-- dont les programmes sont des suites d’ins-
tructions “basiques” inst1,...,instl(chaque instruction a donc un num´ero). On ne dispose que de deux
variables enti`eres xet y. Une instruction basique inst est au choix :
— une affectation de la forme x←e, ou y←e, o`u eest une expression arithm´etique,
— un test ?x= 0, ou ?y= 0, qui a pour effet d’ignorer l’instruction suivante si la variable ne contient
pas 0
— l’instruction push vqui met le contenu de la variable v(x,y, ou pc) sur la pile. Si vest pc, la
valeur mise sur la pile est le num´ero de l’instruction.
— l’instruction pop v(xou y) qui enl`eve de la pile l’entier net le range dans v(si la pile est vide, v
re¸coit une valeur al´eatoire)
— l’instruction goto equi passe `a l’instruction instksi l’expression arithm´etique es’´evalue en k.
Un programme qui comporte linstructions termine lorsque l’on cherche `a ex´ecuter l’instruction l+ 1.
On note A(m, n) la fonction d’Ackermann, d´efinie comme :
A(m, n) =
n+ 1 si m= 0
A(m−1,1) si m > 0 et n= 0
A(m−1, A(m, n −1))) si m > 0 et n > 0.
´
Ecrire un programme en Basic-- qui se termine avec la variable xqui contient A(m, n) lorsque
initialement la variable xcontenait met la variable ycontenait n.
Exercice 2 (Instructions Pentium).On rappelle que l’instruction “movl e1,e2” a pour effet d’´ecrire la
valeur d´enot´ee par e1dans le conteneur (registre ou emplacement m´emoire) d´enot´e par e2. Les expressions
e1,e2ont diff´erent format, notamment :
— le format “imm´ediat” : $0x12,$0xcafe,. . .
— le format “registre” : %eax,%ebx,. . .
— le format “absolu” : 0x12,0xcafe,. . .
— le format “indirect” : (%eax),%ebx,. . .
— le format “indirect avec d´ecalage” : 0xcafe(%eax),(%eax,%ebx, 4), . . .
— le format “adresse d’un indirect avec d´ecalage” : %0xcafe(%eax),. . .
1. L’instruction “leal e1,e2” a pour effet d’´ecrire l’adresse du conteneur e1dans le conteneur e2.
Quels sont les formats autoris´es pour e1et e2?
2. Lorsque e1et e2le permettent, r´e´ecrivez l’instruction “leal e1,e2” `a l’aide de movl
Exercice 3 (Switch C).On consid`ere la fonction C et sa traduction assembleur donn´ees `a la page
suivante.
1. On rappelle que le drapeau ZF (zero flag) est modifi´e par les instructions arithm´etiques et lu par
les instructions de branchement. Suivez dans le code assembleur le d´eroulement pas `a pas de la
fonction lorsque i=3 (Indication : on saute en LBB0 2).
2. Comment est renvoy´e le r´esultat de la fonction ? Comment est pass´ee la valeur initiale de la
variable i? O`u la variable iest-elle stock´ee par la suite ?
3. Pour i= 0, quels sont les labels visit´es, et quelle est la valeur renvoy´ee ?
4. Mˆeme question pour i= 2.
5. Mˆeme question pour i= 1.
1