Untitled
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 5Editor is loading...
Leave a Comment