.text
.extern uart_init
@终端的输出
.extern printf
.global _start
_start:
mov r7,lr
@先把lr原始地址给r7放着,后面发生bl跳转后,要退回到bootcmd
bl uart_init
@mov r1,#0x1110
@这个定义的数值有规范,这里采用ldr。而且要放在bl uart_init
ldr r1,=0x1110
bic r1,r1,#0x100
ldr r0,=fmt
bl printf
mov lr,r7
@就把r7存的地址给回lr,最后跳转出去。
bx lr
fmt:
.asciz ">>>>>>>> welcome to asm r1=0x%x<<<<<<<\n\r"
@这里输出字符串是r0,然后后面有多少个%x的就按顺序输出r1,r2那样
.end
makefile
all:start.bin clean
start.bin:start.o uart.o libc.a
arm-linux-ld -Ttext=0x40000000 start.o uart.o libc.a -o start.elf
arm-linux-objcopy -O binary -S start.elf start.bin
arm-linux-objdump -d start.elf > debug
start.o:start.S
arm-linux-gcc -c -nostdlib -nostdinc start.S -o start.o
clean:
rm -rf start.o start.elf
还需要libc.a,types.h,uart.o,stdio.h文件