ARM汇编程序设计
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
cmp r0,#5
bcs aaa
add r0,r0,#1
aaa nop
cmp r0,#5
addcc r0,r0,#1
bl指令完成两个功能:将子程序的返回地址保存在LR即R14同时将PC的值改为目标子程序的第一条指令的地址。
Start:
Mov r0,#10
Mov r1,#3
Bl doadd
Mov r1,r1,r0
Doadd
Add r0,r0,r1
Mov pc,lr
.end
用汇编程序实现IF语句的功能:
Mov r0,#15
Mov r1,#12
Cmp r0,r1
Movhi r2,#100
Movls r2,#50
用汇编程序实现FOR循环的功能:Mov r0,#0
Mov r1,#10
Mov r2,#0
L1: cmp r0,r1
Bhs l2
Add r2,r2,#1
Add r0,r0,#1
B l1
L2: .end
用汇编语言实现WHILE循环While(x<=y)
X=x*2;
mov r0,#1
mov r1,#20
b l2
l1: mov r0,r0, lsl #1
l2: cmp r0,r1
bls l1
end
用汇编语言实现计算算术功能:n equ 100
.global _start
-start:
.arm
arm_code:
Ldr sp,=0x40003f00
Adr r0,thumbcode+1
Bx r0
.ltorg
.thumb
Thumb_code:
Ldr r0,=n
Bl sum_n
B thumb_code
Sum_n:
Push {r1-r7,lr}
Movs r2,r0
Beq sum_end
Cmp r2,#1
Beq sum_end
Mov r1,#1
Mov r0,#0
Sum_l1: add r0,r0,r1
Bcs sum_err
Cmp r1,r2
Bhs sum_end
Add r1,r1, #1
B sum_l1
Sum_err: mov r0,#0
Sum_end: pop {r1-r7,pc}
.end
数据块的复制(SRC——DST):.global _start
_start:
Ldr r0,=src
Ldr r1,=dst
Mov r2,#num
Mov sp,#0x400 Blockcopy:
Movs r3,r2, lsr #3
Beq copywords
Stmfd sp!,{r4-r11} Octcopy:
Ldmia r0!,{r4-r11}
Stmia r1!,{r4-r11}
Subs r3,r3,#1
Bne octcopy
Ldmfd sp!,{r4-r11}
Copywords:
Ands r2,r2,#7
Beq stop
Wordcopy:
Ldr r3,[r0],#4
Str r3,[r1],#4
Subs r2,r2,#1
Bne wordcopy
Stop: mov r0,#0x18
Ldr r1,=0x20026
Swi 0x123456
Src dcd 1,2,3,4,5,6,7,8,1,2,3,4,5,6,7,8,1,2,3,4 Dst dcd 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 .end