Bonjour
Lors d'un partiel ( licence) je suis tombé sur ce code assembleur ARM, actuellement j'essaie de le comprendre dans le cas des rattrapages à venir mais je coince sur certains points. Yout d'abord je vais vous mettre l'enoncé pour mieux discerner le sujet et ensuite le code avec ma/mes questions vis-à-vis de celui ci.
soit la zone mémoire localisée a l'adresse 0x20000000 qui contient les valeurs suivantes:
0xAA, 0x32, 0x45, 0x46, 0x47, 0x48, 0x49, 0x4A, 0x4B, 0x4C, 0x04, 0x00, 0x00, 0x20, 0xFF, 0x78
indiquer le contenu des registres à l'issue de l'execution de chacune des lignesVoilà. Alors tout d'abord, ai-je raison de penser que LDR R0, =Adr prendra la dixième valeur soit 0x4C car son adresse est 0x2000000A ?
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18 Area monprog,CODE,READONLY Adr EQU 0x2000000A Vb EQU 10 ENRTY EXPORT _main _main LDR R0,=Adr MOV R1,#Vb SUB R0,R0,R1 LDRB R2,[R0] LDR R3,[R0,R1] LDR R4,[R3,#4] ! LDR R2,[R3,#-4 ....
Ensuite je bloque par rapport à R1 : il prend 10 selon le mov mais lors de l'instruction SUB en dessous R0 = R0 - R1 soit 0x4C - 10 soit 0x42. Or il n'y pas cette valeur donc ai-je tort dans mon raisonnement ?
En vous remerciant d'avance.
Partager