汇编尾缀.s
@是注释。
LDR 有等号就是伪指令
LDR R1,=0xC001E020 @把寄存器GPIOEALTFN0的地址放入R1
LDR 加载指令
LDR R0,[R1] @将R1加载到R0中
BIC 清零指令。
BIC R0,R0,#(3<<26) @相当于 R0 &= ~(3<<26),清零
ORR
ORR R0,R0,#(1<<13) @相当于RO|=(1<
STR 保存指令
STR R0,[R1] @把R0的值存入R1中
(B 跳转名) 跳转指令
LOOP:
...
...
B LOOP@ 跳转到跳转名处,类似c语言go to、while循环。
BL 函数名 带返还的跳转指令。
BX 带状态切换的跳转指令。
BLX 带返还和状态切换的跳转指令。
lr R14寄存器 连接下一个寄存器。
MOV move移动指令
MOV R2,XXX @将xxx写入R2中。
SUB 减法指令
SUB R2,R2,#1 @相当于R2=R2-1,SUBS表示减法操作会影响标志位。
CMP 比较指令。
CMP R2,#0x0@R2和0做比较
.global _start
_start: @程序入口
@以下四条指令是把GPIOE13设置为复用功能0(GPIO)
LDR R1,=0xC001E020 @把寄存器GIPOEALTFN0的地址放入R1
LDR R0,[R1] @把寄存器GIPOEALTFN0的值加载到R0
BIC R0,R0,#(3<<26) @ R0 = R0 & ~(3<<26)
STR R0,[R1] @把修改好的R0的值存入GIPOEALTFN0
@以下四条指令是把GPIOE13设置为输出模式
LDR R1,=0xC001E004 @把寄存器GIPOEOUTENB的地址放入R1
LDR R0,[R1] @把寄存器GIPOEOUTENB的值加载到R0
ORR R0,R0,#(1<<13)@ R0 = R0 | (1<<13)
STR R0,[R1]@把修改好的R0的值存入GIPOEOUTENB
loop: @相当于while(1)
@以下四条指令是把GPIOE13输出高电平
LDR R1,=0xC001E000 @把寄存器GIPOEOUT的地址放入R1
LDR R0,[R1] @把寄存器GIPOEOUT的值加载到R0
ORR R0,R0,#(1<<13)@ R0 = R0 | (1<<13)
STR R0,[R1]@把修改好的R0的值存入GIPOEOUT
BL delay
@以下四条指令是把GPIOE13输出低电平
LDR R1,=0xC001E000 @把寄存器GIPOEOUT的地址放入R1
LDR R0,[R1] @把寄存器GIPOEOUT的值加载到R0
BIC R0,R0,#(1<<13) @ R0 = R0 & ~(1<<13)
STR R0,[R1] @把修改好的R0的值存入GIPOEOUT
BL delay
B loop
delay:
MOV R2,#0xfffffff
temp:
SUBS R2,R2,#1 @R2 = R2 -1 S 表示减法操会影响标志位
CMP R2,#0X0 @cpsr 标志位 N C Z V
BNE temp @NE 不等于 如果R2 不等于0 跳到temp
MOV PC,LR @子程序delay 返回到调用处的下一条指令
@BX,LR