В одну сторону (синтаксис газа):
.thumb_func
.globl GET32
GET32:
ldr r0,[r0]
bx lr
extern unsigned int GET32 ( unsigned int );
unsigned int x;
...
x = GET32(0x00000000);
...
x = GET32(0x00000004);
другой способ, не требуется asm:
#define ZERO (*((volatile unsigned int *)0x00000000))
#define FOUR (*((volatile unsigned int *)0x00000004))
...
unsigned int x;
...
x = ZERO;
...
x = FOUR;
Может использовать uint32_t вместо unsigned int, если у вас есть stdint.h или эквивалентный. (приведет к неподписанному int для gcc и clang / llvm).
получено из вашего кода / синтаксиса
__asm uint32_t read_zero(void)
{
MOVS R0,#0
LDR R0,[R0]
BX LR
}
__asm uint32_t read_four(void)
{
MOVS R0,#4
LDR R0,[R0]
BX LR
}