Professional Documents
Culture Documents
CS 160
Ward 1
CS 160
Ward 2
ARM:
ADR LDR ADR LDR ADD ADR LDR SUB ADR STR
CS 160
ARM:
; ; ; ; ; ; ; ; ; ; get address for a get value of a get address for b, reusing r4 get value of b compute a+b get address for c get value of c complete computation of x get address for x store value of x
Ward 3
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]
; ; ; ; ; ; ; ; ; ;
get address for b get value of b get address for c get value of c compute partial result get address for a get value of a compute final value for y get address for y store y
Ward 4
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
(assume i in R1)
SUBS ADDEQ
CS 160
Ward 5
CS 160
Ward 6
ARM:
; compute and test condition ADR r4,a ; get address for a LDR r0,[r4] ; get value of a ADR r4,b ; get address for b LDR r1,[r4] ; get value for b CMP r0,r1 ; compare a < b BGE fblock ; if a >= b, branch to false block
ARM:
start SUB CMP ADDLT ADDLT BLT R0, R0, R0 R0, #15 R1, R1, R1 R0, R0, #1 start ; i -> R0 and i = 0 ; is i < 15? ; j = j + j ; i++
CS 160
Ward 7
CS 160
Ward 8
CS 160
Ward 9
CS 160
Ward 10
CS 160
ARM Assembler
CS 160
Ward 13
CS 160
Ward 14
General Layout
CS 160
Ward 15
CS 160
Ward 16
Assembly Directives
CS 160
Ward 17
CS 160
Ward 18
r1,#0
; set sum = 0
pc,lr
r0,r1 pc,lr
Ward 20
LOG, CODE, READONLY log input variable n output variable m (0 by default) output variable k (n <= 2^k)
; set m = 0 ; set k = -1
r0, #1 r2, r2, #1 r1, r1, #1 r0, r0, LSR #1 log_loop r2, #1 r0, #1
; ; ; ; ;
test LSB(n) == 1 set m = m+1 if true set k = k+1 set n = n>>1 continue if n != 0
pc,lr
Ward 21
END