论坛大神
- 积分
- 1846
- 金钱
- 1846
- 注册时间
- 2013-4-15
- 在线时间
- 163 小时
|
本帖最后由 合肥-文盲 于 2021-5-14 09:35 编辑
.global _bss_start
_bss_start:
.word __bss_start
.global _bss_end
_bss_end:
.word __bss_end
ldr r0, =_bss_start // r0 = bss段起始地址
ldr r1, =_bss_end // r1 = bss段结束地址
mov r2, #0x00000000 // r2 = 0x00000000,用于清零bss段
clearbss: cmp r0, r1 // 比较运算,实际上就是进行 r0 - r1 运算,运算结果保存在CPSR程序状态寄存器中
// 下面几条指令都是条件执行指令,只有当r0小于r1的时候,下面指令才真正执行相应的操作,否则不做任何处理
strlo r2, [r0] // lo 是 判断是否小于 的意思,也就是如果r0 < r1,则把r2中的0全部写到r0对应的内存中去,否则不做任何处理,执行下条指令
addlo r0, r0, #4 // lo 是 判断是否小于 的意思,也就是如果r0 < r1,则把r0递增4个字节,否则不做任何处理,执行下条指令
blo clearbss // lo 是 判断是否小于 的意思,也就是如果r0 < r1,则跳转到标号 clearbss 处,再次比较r0和r1,否则不做任何处理,执行下条指令
|
|