Untitled

 avatar
unknown
assembly_x86
2 months ago
2.1 kB
6
Indexable
.global _start

.equ LED_ADDR,     0xFF200000
.equ SWITCH_ADDR,  0xFF200040
.equ PB_ADDR,      0xFF200050

.text

_start:

@-------------------------------
@ LOAD FROM MEMORY (array base)
@-------------------------------

LDR R0, =array        @ R0 = base address
LDR R1, =N
LDR R1, [R1]          @ R1 = length

@-------------------------------
@ ARRAY ACCESS (A[i])
@-------------------------------

MOV R2, #2            @ index i = 2
MOV R3, #4
MUL R4, R2, R3        @ offset = i*4
ADD R5, R0, R4        @ address of A[i]
LDR R6, [R5]          @ R6 = A[i]

@-------------------------------
@ BASIC ARITHMETIC
@-------------------------------

ADD R7, R6, #5        @ add
SUB R7, R7, #2        @ subtract
MOV R8, #3
MUL R7, R7, R8        @ multiply

MOV R9, #2
SDIV R7, R7, R9       @ divide

@-------------------------------
@ BRANCHING EXAMPLE
@-------------------------------

CMP R7, #10
BGT greater

MOV R10, #0
B continue

greater:
MOV R10, #1

continue:

@-------------------------------
@ CALL SUBROUTINE
@-------------------------------

BL sum_array

@ result returned in R0

@-------------------------------
@ WRITE TO LED PERIPHERAL
@-------------------------------

LDR R11, =LED_ADDR
STR R0, [R11]         @ show result on LEDs

@-------------------------------
@ READ SWITCH INPUT
@-------------------------------

LDR R11, =SWITCH_ADDR
LDR R12, [R11]        @ read switches

@-------------------------------
@ READ PUSH BUTTON INPUT
@-------------------------------

LDR R11, =PB_ADDR
LDR R4, [R11]

stop:
B stop


@================================
@ SUBROUTINE: SUM ARRAY
@ input: R0 = array base
@        R1 = length
@ output: R0 = sum
@================================

sum_array:

PUSH {R2,R3,R4,LR}

MOV R2, #0            @ index
MOV R3, #0            @ sum

loop:

CMP R2, R1
BEQ done

LDR R4, [R0], #4
ADD R3, R3, R4

ADD R2, R2, #1
B loop

done:

MOV R0, R3

POP {R2,R3,R4,LR}
BX LR


.data

array:
.word 4,8,3,7,2

N:
.word 5
Editor is loading...
Leave a Comment