mvn r1,#0x2fc00
sub r1,r1,#0x3e0
sub r1,r1,#0x3
将 0xfffd001c 放入 r1 寄存器中,那为什么不直接将这个数送入 r1 呢?是不是因为arm的指令编码对立即数的限制所造成的呢?那我们平时编写代码该如何进行转换?
@boot.S
.text
.align 4
.global begin
.type begin, function
begin:
mov r0, #0xd2
msr cpsr, r0
mvn r1,#0x2fc00
sub r1,r1,#0x3e0
sub r1,r1,#0x3
mov r0,#0x41
str r0,[r1]
l:
b l
#Makefile
CFLAGS=-mapcs-32 -march=armv4 -mtune=arm7tdmi
LFLAGS=-e begin -Ttext 0x1000000 -s
all:
arm-elf-gcc $(CFLAGS) -c boot.S -o boot.o
arm-elf-ld $(LFLAGS) -o boot boot.o
#skyeye.conf
#skyeye config file sample
cpu: arm7tdmi
mach: at91
mem_bank: map=M, type=RW, addr=0x01000000, size=0x00400000
mem_bank: map=I, type=RW, addr=0xf0000000, size=0x10000000
log: logon=0, logfile=./sk1.log, start=0, end=200000