Anda di halaman 1dari 11

Rimeh HANNACHI

Stic L2E

Programme 1:
AREA Program, CODE, READONLY

; rservation dans la mmoire pour crire le

programme.
ENTRY

; indique le dbut 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 mmoire, crire le contenue de R1 dans

Result.
Value

Result

SWI 0x11
DCW 0xC123
ALIGN
DCW 0
END

; interruption de programme.
; allocation dans la mmoire dune valeur Value de deux

Octets Value=0XC123
; permet daligner l@ au dbut de la case mmoire.
; Result cod sur deux Byte initialis 0.

Rle du programme : permet de charger et de stocker une valeur Rsultat la mmoire en


extraire seulement un byte dune valeur donne.

Programme 2:
AREA Program, CODE, READONLY
ENTRY
Main
LDR R1, Value
MVN R1, R1
STR R1, Result

; load la valeur Value de la mmoire en R1. R1=0x0000C123.

; R1 prend sa valeur initiale complmente.


R10Xffff3EDC.
; stocker la valeur de R1 dans la mmoire
Result=0Xffff3EDC.

SWI 0x11
Value
Result

DCD 0xC123
ALIGN
DCD 0
END

; valeur cod sur 4 Byte


; le Rsultat cod sur 4 Byte initialise 0.

Rle du programme : permet stocker dans la mmoire le complment dune valeur donne.

Programme 3:
AREA Program, CODE, READONLY
ENTRY
Main

Value1
Value2
Result

LDR R1, Value1

; R10x37E3C123.

LDR R2, Value2

; indique R20x367402AA

ADD R1, R1, R2

; faire laddition de deux valeur stockes dans R1 et R2 avec


lenregistrement du Rsultat dans R1. R1
R1+R2=0x6E57C3CD.

STR R1, Result


; chargement dans la mmoire, Result=0x6E57C3CD.
SWI 0x11
DCD 0x37E3C123
ALIGN
DCD 0x367402AA
ALIGN
DCW 0
END

Rle du programme : permet de faire laddition de deux nombres donns et faire le


stockage de Rsultat dans la mmoire.

Programme 4:
AREA Program, CODE, READONLY
ENTRY
Main
LDR R0, =Value1

; R0 prend comme valeur ladresse de Value1 dans la

mmoire. R00x8020. R0 est donc considr comme


un pointeur sur les cases mmoires.
LDR R1, [R0]

; R1 prend le contenue de ladresse R0 dans la mmoire.

R1 0x37E3C123.
ADD R0, R0,#0x4

; permet dincrmenter la valeur R0 par 4bit.


R0=0x8024.

LDR R2, [R0]

; permet de charger le contenue de la case mmoire qui


est dadresse R0 dan R2. R20x367402AA.

Value1
Value2

ADD R1, R1, R2

; faire laddition R1R1+R2. C d laddition de Value1


et Value2. R1= 0x6E57C3CD.

LDR R0=Result

; chargement de ladresse de Result dans R0.

STR R1, [R0]

; Result=0x6E57C3CD.

SWI 0x11
DCD 0x37E3C123
ALIGN
DCD 0x367402AA

; Enregistrement de valeur 367402AA dans la case


Value2

Result

ALIGN
DCW 0
END

; Initialisation de la case Result 0

Rle du programme : Ce programme permet dadditionner deux valeurs et les


sauvegarder le rsultat en mmoire par lutilisation dadressage indirect.

Programme 5:
AREA Program, CODE, READONLY
ENTRY
Main
LDR R1, Value
MOV R1, R1, LSL#0x1

STR R1, Result

; Chargement totale de Value en R1, R14242


; Dcalage gauche par un bit (R14242*2),
R18484
; Stockage R1 dans la case Result
Result 8484.

SWI 0x11
Value
Result

DCD 0x4242
ALIGN
DCD 0
END

; Enregistrement de valeur en case Value


; Initialisation de case Result 0

Rle du programme : Ce programme permet doubler une valeur et la sauvegarder en


mmoire.

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 dcale par 4bits gauche.

R3 0x00000005.
MOV R3, R3, LSL#0x8

; on fait le dcalage gauche de la valeur de R3 par


un octet. R3=0x00000500.

AND R1, R1, R2

; R1R1&R2 donc R1=0000000F

ADD R1, R1, R3

; R1=R1+R3 donc R1=0000050F

STR R1, Result

; chargement de la rsultat dans la mmoire


result=0000050F.

SWI 0x11
Value
Mask
Result

DCB 0x5F
ALIGN
DCW 0x000F
ALIGN
DCD 0
END

Rle du programme : Ce programme permet dinsrer un bit 0 au milieu dun nombre donn.

Programme 7:
AREA Program, CODE, READONLY
ENTRY
Main
LDR R1, Value1

; R10x12345678

LDR R2, Value2

; R20x87654321

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 rsultat, Result reoit la

Valeur de R1 : Result87654321
Value1

SWI 0x11
DCD 0x12345678

Value2
Result

ALIGN
DCD 0x87654321
ALIGN
DCW 0
END

Rle du programme : Ce programme permet de chercher le maximum entre deux valeurs


donnes.

Programme 8:
AREA Program, CODE, READONLY
ENTRY
Main
LDR R0, =Value1

; R0 prend la valeur de ladresse de Value1 : R0=00008030

LDR R1, [R0]

; R1=0x12A2F640 : premire valeur du tableau.

LDR R2, [R0,#4]

; R2=0XF2100123 : 2me valeur du tableau.

LDR R0, =Value2

; R0 prend la valeur de ladresse de Value2.

LDR R3, [R0]

; R3= 0x001019BF :1ere valeur du tableau.

LDR R4, [R0,#4]

; R4=0x40023F51 : 2me valeur du tableau.

ADDS R6, R2, R4 ; ADDS permet de faire laddition avec le changement de

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


!On remarque que cest laddition de LSB de nombre cod sur
64bits.
ADC R5, R1, R3

; ADC permet de faire laddition en prenant en considration


le retenue de lopration prcdente.
R5=R1+R3+Carry=12830000.
Cest laddition de MSB de nombre.

LDR R0, =Result

; R0=@Result =0x8040

STR R5, [R0]

; chargement dans la mmoire de MSB du nombre par

Ladressage indirect.
STR R6, [R0,#4]

; chargement dans la mmoire de LSB du nombre par

Ladressage indirect.

Value1

SWI 0x11
DCD 0x12A2E640, 0XF2100123

Value2

DCD 0x001019BF, 0x40023F51

Result

DCD 0
END

Rle du programme : Ce programme permet de faire laddition de deux nombres cods sur
64bits en enregistrant le rsultat dans la mmoire.

Programme 9:
AREA Program, CODE, READONLY
ENTRY
Main
LDR R0, =DataTable

; R0=00008028 : cest ladresse de dbut de

DateTable.
LDR R1, Value

; R1=00000005

MOV R1, R1, LSL#0x2

; R1=0x00000014 : en dcimal R1=20

ADD R0, R0, R1


LDR R2, [R0]
LDR R3,=Result

; R0=R0+R1 =0x0000803C
;en dcimal R2120
; R3 prend la valeur de ladresse de rsultat

STR R2, [R3]

;le rsultat sera crit en mmoire par ladressage


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
Result

DCB 0x5
ALIGN
DCW 0
END

Rle du programme : Ce programme permet de copier ladresse de la 6 me case du tableau


dans le rsultat.

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

;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 excutes jusqu le contenue de
R2 sannule jusqu la fin du tableau.
LDR R3, [R0]

STR R1, Result ; la somme sera enregistr dans result dans la mmoire.
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
Result

ALIGN
DCW 0
END

Rle du programme :Ce programme permet de faire la somme des cases de tableau.

Programme11:
AREA Program, CODE, READONLY

ENTRY
Main
LDR R0, =Data1

;Charger ladresse du Data1 dans R0

EOR R1, R1, R1

; R10 , R1 xor R1

LDR R2, Length

;R2la valeur de length

CMP R2,#0

; comparer R2 avec 0

BEQ Done

; Si R2=0 alors il va excuter Done

LDR R3, [R0]


CMP R3, R1
BCC Looptest

; Charger R3 avec la valeur de ladresse de R0


; Comparer R3 et R1
;brunch vers Looptest si le carry=0

MOV R1, R3

; R1R3

ADD R0, R0, #+4


SUBS R2, R2, #0x1
BNE LOOP

; Ajouter a la valeur de R0 +4 octets


; R2R2-1
; si R2 diffrent de 0 alors execution de LOOP

Loop

Looptest

Done
; Resultla valeurs de R1

STR R1, Result

SWI 0x11
AREA Data1, Data ; Dclaration dun tableau de donnes
Table

DCW 0xA152
ALIGN
DCW 0x7F61
ALIGN
DCW 0XF123
ALIGN
DCW 0X8000
ALIGN

TablEnd

Length

AREA Data2, DATA

; Fin du tableau
; Dclaration dune nouvelle Area contenant Le
nombre de rptition de la boucle

DCW (TablEnd-Table)/4

;(@fin-@debut)/4 pour obtenir la longueur de

DCD 0

Tableau.
ALIGN

Result

DCW 0
END

; Initialisation de la case Result 0

Rle du programme :Ce programme permet de donner le maximum dun 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
LDR R1, Value1
LDR R2, Value2
LDR R3, Value3
CMP R1,R2
BLS Done
MOV R1,R2
Done

Done1
Value1

CMP R1,R3
BLS Done1
MOV R1,R3
STR R1, Result
SWI 0x11
DCD 0x91258465

Main

Value2
Value3
Result

ALIGN
DCD 0x102C2056
ALIGN
DCD 0x70409254
Result
DCD 0
END

Programme3 :
AREA Program, CODE, READONLY
ENTRY
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

Value1

DCD 0x205A15E3
ALIGN
DCD 0x256C8700
ALIGN
DCD 0x2954668F2
ALIGN
DCD 0x29856779
ALIGN
DCD 0x9147592A
ALIGN
DCD 0x20

Main

MAX

ALIGN
DCD 0
END

Programme4 :
AREA Program, CODE, READONLY
ENTRY
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

TAB

STR R4,Nb_occurence
SWI 0x11
Area Data1,Data
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

Main