; ARM assembly tutorial for Asmonite, example 07: variables in the RAM (Raspberry Pi Pico 2, Arm Cortex-M33).
; Adapted from the ARM-ASM-Tutorial by Niklas Guertler (example RAMVariables); see LICENSE.txt.
;
; The program is in the RAM itself, so its variables can simply follow it: "var1" is a word (dd, 4 bytes),
; "var2" a byte (db). "adr" puts the address of a label into a register. Watch the Memory view: set the
; address to var1 and step with F7.
.target pico2
.arch thumb
.imagebase 0x20000000

_start:
    adr  r0, var1               ; r0 = the address of var1
    ldr  r1, value
    str  r1, [r0]               ; var1 = 0x12345678
    ldr  r1, [r0]               ; read var1 back
    and  r1, r1, #0xff          ; keep bits 0..7: 0x78
    adr  r0, var2
    strb r1, [r0]               ; one byte into var2
    b    $

    align 4
value:  dd 0x12345678
var1:   dd 0                    ; 4 bytes
var2:   db 0                    ; 1 byte
