Vous êtes sur la page 1sur 11

Rimeh HANNACHI

Stic L2E

Programme 1:
AREA Program, CODE, READONLY ; réservation dans la mémoire pour écrire le
programme.

ENTRY ; indique le début de programme.

Main

LDRB R1, Value ; charger dans le registre R1 le 1er byte de la valeur value 
R1=0x00000023

STR R1, Result ; chargement dans la mémoire, écrire le contenue de R1 dans


Result.
SWI 0x11 ; interruption de programme.
Value DCW 0xC123 ; allocation dans la mémoire d’une valeur Value de deux
Octets  Value=0XC123
ALIGN ; permet d’aligner l’@ au début de la case mémoire.
Result DCW 0 ; Result codé sur deux Byte initialisé à 0.
END
.
Rôle du programme : permet de charger et de stocker une valeur Résultat à la mémoire en
extraire seulement un byte d’une valeur donnée.

Programme 2:
AREA Program, CODE, READONLY

ENTRY

Main

LDR R1, Value ; load la valeur Value de la mémoire en R1. R1=0x0000C123.


MVN R1, R1 ; R1 prend sa valeur initiale complémentée.
R10Xffff3EDC.
STR R1, Result ; stocker la valeur de R1 dans la mémoire
Result=0Xffff3EDC.
SWI 0x11

Value DCD 0xC123 ; valeur codé sur 4 Byte


ALIGN
Result DCD 0 ; le Résultat codé sur 4 Byte initialisée à 0.
END
Rôle du programme : permet stocker dans la mémoire le complément d’une valeur donnée.
Programme 3:
AREA Program, CODE, READONLY

ENTRY

Main

LDR R1, Value1 ; R10x37E3C123.

LDR R2, Value2 ; indique R20x367402AA

ADD R1, R1, R2 ; faire l’addition de deux valeur stockées dans R1 et R2 avec
l’enregistrement du Résultat dans R1. R1
R1+R2=0x6E57C3CD.

STR R1, Result ; chargement dans la mémoire, Result=0x6E57C3CD.


SWI 0x11
Value1 DCD 0x37E3C123
ALIGN
Value2 DCD 0x367402AA
ALIGN
Result DCW 0
END
Rôle du programme : permet de faire l’addition de deux nombres donnés et faire le
stockage de Résultat dans la mémoire.

Programme 4:
AREA Program, CODE, READONLY

ENTRY

Main

LDR R0, =Value1 ; R0 prend comme valeur l’adresse de Value1 dans la


mémoire. R00x8020. R0 est donc considéré comme
un pointeur sur les cases mémoires.

LDR R1, [R0] ; R1 prend le contenue de l’adresse R0 dans la mémoire.


R1 0x37E3C123.

ADD R0, R0,#0x4 ; permet d’incrémenter la valeur R0 par 4bit.


R0=0x8024.

LDR R2, [R0] ; permet de charger le contenue de la case mémoire qui


est d’adresse R0 dan R2. R20x367402AA.
ADD R1, R1, R2 ; faire l’addition R1R1+R2. C à d l’addition de Value1
et Value2. R1= 0x6E57C3CD.

LDR R0=Result ; chargement de l’adresse de Result dans R0.


STR R1, [R0] ; Result=0x6E57C3CD.

SWI 0x11
Value1 DCD 0x37E3C123
ALIGN
Value2 DCD 0x367402AA ; Enregistrement de valeur 367402AA dans la case
Value2
ALIGN
Result DCW 0 ; Initialisation de la case Result à 0
END

Rôle du programme : Ce programme permet d’additionner deux valeurs et les


sauvegarder le résultat en mémoire par l’utilisation d’adressage indirect.

Programme 5:
AREA Program, CODE, READONLY

ENTRY

Main

LDR R1, Value ; Chargement totale de Value en R1, R1←4242


MOV R1, R1, LSL#0x1 ; Décalage à gauche par un bit (R1←4242*2),
R1←8484
STR R1, Result ; Stockage R1 dans la case Result
Result ←8484.
SWI 0x11

Value DCD 0x4242 ; Enregistrement de valeur en case Value


ALIGN
Result DCD 0 ; Initialisation de case Result à 0
END
Rôle du programme : Ce programme permet doubler une valeur et la sauvegarder en
mémoire.

Programme 6:
AREA Program, CODE, READONLY

ENTRY

Main

LDR R1, Value ; R1=0x0000005F


LDR R2, Mask ; R2=0x0000000F

MOV R3, R1, LSR #0x4 ; R3 prend la valeur de R1 décalée par 4bits à gauche.
R3 0x00000005.

MOV R3, R3, LSL#0x8 ; on fait le décalage à gauche de la valeur de R3 par


un octet. R3=0x00000500.

AND R1, R1, R2 ; R1R1&R2 donc R1=0000000F

ADD R1, R1, R3 ; R1=R1+R3 donc R1=0000050F

STR R1, Result ; chargement de la résultat dans la mémoire


result=0000050F.
SWI 0x11

Value DCB 0x5F


ALIGN
Mask DCW 0x000F
ALIGN
Result DCD 0
END

Rôle du programme : Ce programme permet d’insérer un bit ‘0’ au milieu d’un nombre donné.

Programme 7:
AREA Program, CODE, READONLY

ENTRY

Main

LDR R1, Value1 ; R10x12345678

LDR R2, Value2 ; R20x87654321


CMP, R1, R2 ; comparer R1 par R2, si R1>R2 donc on fait le brunch vers
DONE sinon R1=R2
BHI Done

DONE STR R1, Result ; le maximum sera chargé dans le résultat, Result reçoit la
Valeur de R1 : Result87654321
SWI 0x11
Value1 DCD 0x12345678
ALIGN
Value2 DCD 0x87654321
ALIGN
Result DCW 0
END
Rôle du programme : Ce programme permet de chercher le maximum entre deux valeurs
données.

Programme 8:
AREA Program, CODE, READONLY

ENTRY

Main

LDR R0, =Value1 ; R0 prend la valeur de l’adresse de Value1 : R0=00008030

LDR R1, [R0] ; R1=0x12A2F640 : première valeur du tableau.

LDR R2, [R0,#4] ; R2=0XF2100123 : 2éme valeur du tableau.

LDR R0, =Value2 ; R0 prend la valeur de l’adresse de Value2.

LDR R3, [R0] ; R3= 0x001019BF :1ere valeur du tableau.

LDR R4, [R0,#4] ; R4=0x40023F51 : 2éme valeur du tableau.

ADDS R6, R2, R4 ; ADDS permet de faire l’addition avec le changement de


registre CPSR (UPDATE). R6=R2+R4=0x32124074

!On remarque que c’est l’addition de LSB de nombre codé sur


64bits.

ADC R5, R1, R3 ; ADC permet de faire l’addition en prenant en considération


le retenue de l’opération précédente.
R5=R1+R3+Carry=12830000.
C’est l’addition de MSB de nombre.

LDR R0, =Result ; R0=@Result =0x8040

STR R5, [R0] ; chargement dans la mémoire de MSB du nombre par

L’adressage indirect.

STR R6, [R0,#4] ; chargement dans la mémoire de LSB du nombre par

L’adressage indirect.
SWI 0x11
Value1 DCD 0x12A2E640, 0XF2100123

Value2 DCD 0x001019BF, 0x40023F51

Result DCD 0
END
Rôle du programme : Ce programme permet de faire l’addition de deux nombres codés sur
64bits en enregistrant le résultat dans la mémoire.

Programme 9:
AREA Program, CODE, READONLY

ENTRY

Main

LDR R0, =DataTable ; R0=00008028 : c’est l’adresse de début de


DateTable.

LDR R1, Value ; R1=00000005

MOV R1, R1, LSL#0x2 ; R1=0x00000014 : en décimal R1=20

ADD R0, R0, R1 ; R0=R0+R1 =0x0000803C


LDR R2, [R0] ;en décimal R2120
LDR R3,=Result ; R3 prend la valeur de l’adresse de résultat

STR R2, [R3] ;le résultat sera écrit en mémoire par l’adressage
Indirecte. Result=R2

SWI 0x11
AREA DataTable, Data
DCD 1
DCD 1
DCD 2
DCD 6
DCD 24
DCD 120
DCD 720
DCD 5040

Value DCB 0x5


ALIGN
Result DCW 0
END
Rôle du programme : Ce programme permet de copier l’adresse de la 6 éme case du tableau
dans le résultat.
Programme 10:
AREA Program, CODE, READONLY

ENTRY

Main

LDR R0, =Data1 ;Ro=0x802C

EOR R1, R1, R1 ; initialisation R1=0


LDR R2, Length ;R2=0x3

Loop
LDR R3, [R0] ;R3[0x802C]=0x2040
ADD R1, R1, R3 ;R1=R3+R1=0x2040
ADD R0, R0, #+4 ;R0 0x802C+#0x4=0x8030
SUBS R2, R2, #0x1 ; subdivision avec le changement de CPSR
R2=0x2
BNE LOOP ;brunch vers loop si positive
! ces instructions vont être exécutées jusqu’à le contenue de
R2 s’annule jusqu’à la fin du tableau.

STR R1, Result ; la somme sera enregistré dans result dans la mémoire.

SWI 0x11
AREA Data1, Data ;
Table DCW 0x2040
ALIGN
DCW 0x1C22
ALIGN
DCW 0x0242
ALIGN
TablEnd DCD 0
AREA Data2, DATA
Length DCW (TablEnd-Table)/4 ;(@fin-@debut)/4 pour obtenir la longueur de
tableau
ALIGN
Result DCW 0 ;
END

Rôle du programme :Ce programme permet de faire la somme des cases de tableau.

Programme11:
AREA Program, CODE, READONLY
ENTRY
Main

LDR R0, =Data1 ;Charger l’adresse du Data1 dans R0

EOR R1, R1, R1 ; R10 , R1 xor R1

LDR R2, Length ;R2la valeur de length

CMP R2,#0 ; comparer R2 avec 0

BEQ Done ; Si R2=0 alors il va exécuter Done


Loop
LDR R3, [R0] ; Charger R3 avec la valeur de l’adresse de R0
CMP R3, R1 ; Comparer R3 et R1
BCC Looptest ;brunch vers Looptest si le carry=0

MOV R1, R3 ; R1R3


Looptest

ADD R0, R0, #+4 ; Ajouter a la valeur de R0 +4 octets


SUBS R2, R2, #0x1 ; R2R2-1
BNE LOOP ; si R2 différent de 0 alors execution de LOOP

Done

STR R1, Result ; Resultla valeurs de R1


SWI 0x11
AREA Data1, Data ; Déclaration d’un tableau de données

Table DCW 0xA152


ALIGN
DCW 0x7F61
ALIGN
DCW 0XF123
ALIGN

DCW 0X8000
ALIGN

TablEnd DCD 0 ; Fin du tableau


AREA Data2, DATA ; Déclaration d’une nouvelle Area contenant Le
nombre de répétition de la boucle

Length DCW (TablEnd-Table)/4 ;(@fin-@debut)/4 pour obtenir la longueur de


Tableau.
ALIGN ;
Result DCW 0 ; Initialisation de la case Result à 0
END

Rôle du programme :Ce programme permet de donner le maximum d’un tableau.

Programme1 :

AREA Program, CODE, READONLY


ENTRY
Main
LDR R0, Value1
LDR R1, Value2
LDR R2, Value3
LDR R3, Value4
MOV R0,R0,LSL #0x12
MOV R1,R1,LSL #0x8
MOV R2,R2,LSL #0x4
ADD R0,R0,R1
ADD R0,R0,R2
ADD R0,R0,R3
ADD R0,R0,R4
SWI 0x11
Value1 DCB 0x0C
ALIGN
Value2 DCB 0x02
ALIGN
Value3 DCB 0x06
ALIGN
Value4 DCB 0x01
ALIGN
Result DCW 0
END

Programme2 :

AREA Program, CODE, READONLY


ENTRY Main
LDR R1, Value1
LDR R2, Value2
LDR R3, Value3
CMP R1,R2
BLS Done
MOV R1,R2
Done
CMP R1,R3
BLS Done1
MOV R1,R3
Done1 STR R1, Result
SWI 0x11
Value1 DCD 0x91258465
ALIGN
Value2 DCD 0x102C2056
ALIGN
Value3 DCD 0x70409254
Result
Result DCD 0
END

Programme3 :

AREA Program, CODE, READONLY


ENTRY Main
LDR R6, Length
LDR R0,=Data
EOR R4,R4,R4
Main1
LDR R1,[R0]
LDR R2, V1
EOR R3,R3,R3
Done
MOVS R1,R1, LSL #0x1
BCC Done1
ADD R3,R3,#+1
Done1
SUBS R2,R2,#0x1
BNE Done
CMP R3,R4
BHI Done3
Done2
ADD R0,R0,#0+4
SUBS R6,R6,#0x1
BNE Main1
BEQ Done4
Done3
MOV R4,R3
LDR R5,[R0]
B Done2
Done4
STR R5,MAX
SWI 0x11
Length DCD 5
Area Data, Data
START
DCD 0x205A15E3
ALIGN
DCD 0x256C8700
ALIGN
DCD 0x2954668F2
ALIGN
DCD 0x29856779
ALIGN
DCD 0x9147592A
ALIGN
Value1 DCD 0x20
ALIGN
MAX DCD 0
END

Programme4 :

AREA Program, CODE, READONLY


ENTRY Main
LDR R0, Value
LDR R1,=Data1
LDR R3, OCC
EOR R4,R4,R4
COM
LDR R2,[R1]
CMP R3,R2
BNE ADDO
ADD R4,R4,#+1
ADDO
SUBS R0,R0,#0x1
BNE COMPARE
BEQ stop
COMPARE
ADD R1,R1 ,#+4
B COM
Stop
CMP R4,#0x0
BNE DIR
STR R3, TABF
DIR
STR R4,Nb_occurence
SWI 0x11
Area Data1,Data
TAB DCD 0x16
ALIGN
DCD 0x16
ALIGN

DCD 0x16
ALIGN
DCD 0x16
ALIGN
DCD 0x16
ALIGN
DCD 0x16
ALIGN
TABF DCD 0
Value DCW (TABF-TAB)/4
ALIGN
OCC DCD 0x16
ALIGN
Nb_occurence DCD 0
END