这些指令都是基于汇编的(.s文件),写在FLASH上,然后再进一步解析。
指令机器码
搬移指令
条件执行指令
逻辑指令
例如:
- 使能中断和快速中断
- 判断当前工作状态是否是ARM状态,是则切换到user工作模式
算术指令
跳转指令
多说无益,从例子中品更有感觉
例子1
实现如下:
.text
main:
mov r5,#0
mov r0,#3
bl func1
main_end:
b main_end
func1:
mov r12,lr
cmp r0,#2
bleq func2
blne func3
func1_end:
mov pc,r12
func2:
add r0,#3
mov pc,lr
func3:
sub r0,#1
mov pc,lr
.end
例子2
实现延时函数:
Load/Store指令
以下是两种寻址模式:
前变址寻址(Pre-indexed addressing),后变址寻址(Post-indexed addressing)。
例子:
实现如下:
.text
main:
mov r5,#0
ldr r7,=buf
ldr r8,=destBuf
loop:
cmp r5,#3
beq main_end
add r5,#1
ldrb r0,[r7],#1
strb r0,[r8],#1
b loop
main_end:
b main_end
buf:
.byte 1,2,3
.data
destBuf:
.space 8
.end
GNU 汇编伪指令
例子
复制ROM中字符串到RAM中
.text
start:
ldr r5,=srcBuf
ldr r6,=destBuf
loop:
ldrb r4,[r5]
cmp r4,#0
beq main_end
ldrb r0,[r5],#1
strb r0,[r6],#1
b loop
main_end:
b main_end
srcBuf:
.string "abcdefg\0"
.data
destBuf:
.space 8
.end
批量操作指令
例子
批量复制数据
堆栈操作指令
软中断指令
swi 0x02 产生软中断,软中断号为2