我之前看过延迟函数的段。
delay:
ldr r2,=7000000
ldr r3,=0x0
delay_loop:
sub r2、r2、#1 //r2=r2-1
cmp r2,r3 //cmp影响z标志位,r2=r3时Z=1; 以下语句中eq成立
bne delay_loop //
mov pc,lr //函数返回延迟函数
让我们分析一下这个函数的各个指令。
1、cmp比较指令
假设现在AX寄存器的数量为0004H,BX寄存器的数量为0007H。
要执行的命令是CMP AX、BX
运行此命令时,首先从AX的数量中减去BX的数量。 每个标志位分别设置为以下值:
CF :有进位或借位吗
ZF:0标志位,结果是否为0
OF :溢出标志,计算机结果是否溢出
SF :符号位,0为正,1为负
2、bne指令
BNE:标志寄存器的z标志位非零时,跳至bne后的标签
BEQ:标志寄存器的z标志位为零时,跳至beq后的标签处
上面的函数比较r2和r3,并减去它们,如果结果为0,则z标志的位置位不跳。 否则,跳下去,变成循环
3、子r2、r2、#1
减去r2中的数,返回r2中。
转载于:https://blog.51cto.com/11962449/1837571