ARM ASM EXAMPLES-from-UT PDF
ARM ASM EXAMPLES-from-UT PDF
CS 160
Ward 1
ARM:
ARM:
CS 160
Ward 2
C:
x = (a + b) - c;
ADR
LDR
ADR
LDR
ADD
ADR
LDR
SUB
ADR
STR
CS 160
r4,a
r0,[r4]
r4,b
r1,[r4]
r3,r0,r1
r4,c
r2,[r4]
r3,r3,r2
r4,x
r3,[r4]
;
;
;
;
;
;
;
;
;
;
ADR
LDR
ADR
LDR
ADD
ADR
LDR
MUL
ADR
STR
CS 160
r4,b
r0,[r4]
r4,c
r1,[r4]
r2,r0,r1
r4,a
r0,[r4]
r2,r2,r0
r4,y
r2,[r4]
;
;
;
;
;
;
;
;
;
;
C:
C:
z = (a << 2) |
(b & 15);
if (i == 0)
{
i = i +10;
}
ARM:
ADR
LDR
MOV
ADR
LDR
AND
ORR
ADR
STR
r4,a
r0,[r4]
r0,r0,LSL#2
r4,b
r1,[r4]
r1,r1,#15
r1,r0,r1
r4,z
r1,[r4]
;
;
;
;
;
;
;
;
;
ARM:
z
z
CS 160
Ward 5
C:
if (a < b) { x = 5; y = c + d; } else x = c - d;
ARM:
ARM:
CS 160
R0, R0, R0
R0, #15
R1, R1, R1
R0, R0, #1
start
Ward 6
C:
for ( i = 0 ; i < 15 ; i++)
{
j = j + j;
}
SUB
CMP
ADDLT
ADDLT
BLT
R1, R1, #0
R1, R1, #10
CS 160
start
(assume i in R1)
SUBS
ADDEQ
; i -> R0 and i = 0
;
is i < 15?
;
j = j + j
;
i++
Ward 7
CS 160
Ward 8
;
;
;
;
;
;
;
;
;
;
;
CS 160
Ward 9
ADR
for
LDR
a
ADR
CS 160
r4,a
a
r0,[r4]
r4,b
; get address
; get address
Ward 10
; false block
ADRGE r4,c
; get value of
Ward 11
CS 160
ADRLT
STRLT
ADRLT
LDRLT
ADRLT
LDRLT
ADDLT
ADRLT
STRLT
;
;
;
;
;
;
;
CS 160
;
;
;
;
;
;
;
;
;
x
c
d
r0,[r4]
r4,d
r1,[r4]
r0,r0,r1
r4,x
r0,[r4]
;
;
;
;
;
;
get value of c
get address for d
get value for d
compute a-b
get address for x
store value of x
CS 160
ARM Assembler
Ward 13
CS 160
CS 160
Ward 14
General Layout
Ward 15
CS 160
Ward 16
Assembly Directives
CS 160
Ward 17
CS 160
Ward 18
AREA
EXPORT
; r0 =
; r0 =
sum1
MOV
r1,#0
; set sum = 0
sum
MLA
MOV
sum_loop
ADD
SUBS
BNE
r1,r1,r0
r0,r0,#1
sum_loop
sum_rtn
MOV
MOV
r0,r1
pc,lr
sum_rtn
MOV
r1,r0,r0,r0
r0,r1,LSR#1
; n*(n+1) = n*n + n
; divide by 2
pc,lr
END
END
CS 160
Ward 19
CS 160
Ward 20
MOV
MOV
r2, #0
r1, #-1
; set m = 0
; set k = -1
r0, #1
r2, r2, #1
r1, r1, #1
r0, r0, LSR #1
log_loop
;
;
;
;
;
CMP
MOVEQ
r2, #1
r0, #1
; test m ==1
; set m = 1 if true
MOV
pc,lr
log
log_loop
TST
ADDNE
ADD
MOVS
BNE
test LSB(n) == 1
set m = m+1 if true
set k = k+1
set n = n>>1
continue if n != 0
log_rtn
CS 160
END
Ward 21