.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檔案
ARM彙編和內嵌彙編
彙編指令 跳轉指令 b bl blxbx 資料處理指令 mov mvnadd adcsub rsbrsc andor eorbic cmncmp tstteq 狀態暫存器指令 mrs msrldr strldm stmmcr arm和協處理器之間資料交換 mrccond 可選的條件 rd 存放返回狀...
arm彙編相關
cmp rn rm operand tst logical and ldr用法 摘自arm嵌入式系統開發一書 資料 基址暫存器 示例 mem base offset 基址暫存器加上偏移 ldr r0,r1,offset mem base offset 不變 ldr r0,r1,offset mem ...
arm 彙編學習
一 暫存器和定址 arm有16個暫存器,r0 r15 pc r15 lr r14 sp r13 ip r12 push sp減少,pop sp增加 1.定址方式 從操作位址尋找運算元的方式 2.arm的定址方式 a 暫存器定址,運算元在暫存器中 b 立即定址,運算元就在指令中 subs r0,r0,...