ARM Assembly Language Language Examples & Assembler ARM Assembly Language Examples
CS 160
Ward 1
Example 1: C to ARM Assembler
Ward 2
Example 2: C to ARM Assembler • C:
• C: x = ( a + b) - c; r 4, 4, a r 0, 0, [ r 4] 4] r 4, 4, b r 1, 1, [ r 4] 4] r 3, r 0, r 1 r 4, 4, c r 2, 2, [ r 4] 4] r 3, r 3, r 2 r 4, 4, x r 3, 3, [ r 4]
y = a*( a* ( b+c) ;
• ARM:
• ARM: ADR L DR ADR L DR ADD ADR L DR SUB ADR STR
CS 160
; ; ; ; ; ; ; ; ; ;
get ad addr es es s f or or a get val ue of a get ad addr es es s f or b, b, r eu eus i ng r 4 get val ue of b comput e a+b ge get ad addr es es s f or or c get val ue of c com compl et e com comput at i on of x get ad addr es es s f or or x s t or e val ue of x
ADR LDR ADR LDR ADD ADR LDR MUL ADR STR
r 4, b r 0, [ r 4] r 4, c r 1, [ r 4] r 2, r 0, r 1 r 4, a r 0, [ r 4] r 2, r 2, r 0 r 4, y r 2, [ r 4]
; ; ; ; ; ; ; ; ; ;
get addr ess f or b get val val ue of b get addr ess f or c get val val ue of c com comput e par t i al r esul sul t get addr ess f or a get val val ue of a com comput e f i nal val ue f or y get addr ess f or y st or e y
Example 3: C to ARM Assembler
Example 4: Condition Codes
• C: z = ( a << 2) |
C:
( b & 15) ;
i f ( i == 0) { i = i +10; }
• ARM: ADR LDR MOV ADR LDR AND ORR ADR STR
r 4, a r 0, [ r 4] r 0, r 0, LSL#2 r 4, b r 1, [ r 4] r 1, r 1, #15 r 1, r 0, r 1 r 4, z r 1, [ r 4]
; ; ; ; ; ; ; ; ;
get addr ess f or get val ue of a per f or m shi f t get addr ess f or get val ue of b per f or m AND per f or m OR get addr ess f or st or e val ue f or
a
b
ARM: z z
CS 160
Ward 5
C: f or ( i = 0 ; i < 15 ; i ++) { j = j + j ; }
ARM: start
R0, R0, R0 R0, #15 R1, R1, R1 R0, R0, #1 start
; i - > R0 and i = 0 ; i s i < 15? ; j =j +j ; i ++
R1, R1, #0 R1, R1, #10
CS 160
Example 5: Condition Codes
SUB CMP ADDLT ADDLT BLT
(assume i in R1)
SUBS ADDEQ
Ward 6
Example 6: if statement [1] • C: i f ( a < b) { x = 5; y = c + d; } el se x = c - d;
• ARM: ; comput e and t est condi t i on ADR r 4, a ; get addr ess f or a LDR r 0, [ r 4] ; get val ue of a ADR r 4, b ; get addr ess f or b LDR r 1, [ r 4] ; get val ue f or b CMP r 0, r 1 ; compar e a < b BGE f bl ock ; i f a >= b, br anch t o f al se bl ock
Example 6: if statement [2] ; t r ue bl ock MOV r 0, #5 ADR r 4, x STR r 0, [ r 4] ADR r 4, c LDR r 0, [ r 4] ADR r 4, d LDR r 1, [ r 4] ADD r 0, r 0, r 1 ADR r 4, y STR r 0, [ r 4] B af t er
; ; ; ; ; ; ; ; ; ; ;
Example 6: if statement [3] ; f al s e bl ock f bl ock ADR LDR ADR LDR SUB ADR STR after ...
gener at e val ue f or x get addr ess f or x st or e x get addr ess f or c get val ue of c get addr ess f or d get val ue of d comput e y get addr ess f or y st or e y br anch ar ound f al se bl ock
CS 160
Ward 9
Example 6: Heavy Conditional Instruction Use [1]
Same C code; different ARM implementation ARM: ; Comput e and t est t he condi t i on ADR r 4, a for a LDR r 0, [ r 4] a
; get addr ess ; get val ue of
r 4, c r 0, [ r 4] r 4, d r 1, [ r 4] r 0, r 0, r 1 r 4, x r 0, [ r 4]
; ; ; ; ; ; ;
get addr ess f or c get val ue of c get addr ess f or d get val ue f or d comput e a- b get addr ess f or x st or e val ue of x
CS 160
Ward 10
Example 6: Heavy Conditional Instruction Use [2] ADRLT STRLT ADRLT LDRLT ADRLT LDRLT ADDLT ADRLT STRLT
r 4, x r 0, [ r 4] r 4, c r 0, [ r 4] r 4, d r 1, [ r 4] r 0, r 0, r 1 r 4, y r 0, [ r 4]
; f al s e bl ock ADRGE r 4, c
; ; ; ; ; ; ; ; ;
get addr ess f or st or e x get addr ess f or get val ue of c get addr ess f or get val ue of d comput e y get addr ess f or s t or e y
x c d
y
; get addr ess f or c
Example 6: Heavy Conditional Instruction Use [3] LDRGE ADRGE LDRGE SUBGE ADRGE STRGE
r 0, [ r 4] r 4, d r 1, [ r 4] r 0, r 0, r 1 r 4, x r 0, [ r 4]
; ; ; ; ; ;
get val ue of c get addr ess f or d get val ue f or d comput e a- b get addr ess f or x s t or e val ue of x
CS 160
ARM Assembler
Ward 13
Assembly Language Basics
CS 160
Ward 14
General Layout
Simple Example Description
Assembly Directives
and memory type.
CS 160
Ward 17
CS 160
sum1.s: Compute 1+2+…+n AREA EXPORT ; r0 = ; r0 =
sum2.s: Compute 1+2+…+n
SUM, CODE, READONLY sum1 i nput var i abl e n out put var i abl e sum
AREA EXPORT ; r0 = ; r0 =
sum1 MOV
r 1, #0
; set sum = 0
sum_l oop ADD SUBS BNE
r 1, r 1, r 0 r 0, r 0, #1 sum_l oop
; s et s um = s um+n ; s et n = n- 1
sum_r t n MOV MOV
r 0, r 1 pc, l r
; set r et ur n val ue
Ward 18
SUM, CODE, READONLY sum i nput var i abl e n out put var i abl e sum
sum MLA MOV sum_r t n MOV END
r 1, r 0, r 0, r 0 r 0, r 1, LSR#1
pc, l r
; n*( n+1) = n*n + n ; di vi de by 2
log.s: Compute k (n <= 2^k) AREA EXPORT ; r0 = ; r0 = ; r1 =
LOG, CODE, READONLY l og i nput var i abl e n out put var i abl e m ( 0 by def aul t ) out put vari abl e k ( n <= 2^k)
l og MOV MOV
r 2, #0 r 1, #- 1
; set m = 0 ; set k = - 1
r 0, #1 r 2, r 2, #1 r 1, r 1, #1 r 0, r 0, LSR #1 l og_l oop
; ; ; ; ;
CMP MOVEQ
r 2, #1 r 0, #1
; t est m ==1 ; set m = 1 i f t r ue
MOV
pc, l r
l og_l oop TST ADDNE ADD MOVS BNE
t est LSB( n) == 1 set m = m+1 i f t r ue set k = k+1 set n = n>>1 cont i nue i f n ! = 0
l og_ r t n
CS 160
END
Ward 21