QQ登录

只需一步,快速开始

 找回密码
 注册

QQ登录

只需一步,快速开始

查看: 904|回复: 0

请教:关于blob代码_trampoline的疑问

[复制链接]
发表于 2005-4-21 14:56:58 | 显示全部楼层 |阅读模式
这是blob里的_trampoline的部分代码:我有几个地方不明白。

.globl _trampoline
_trampoline:
/* clear the BSS section */
ldr r1, bss_start
ldr r0, bss_end
sub r0, r0, r1

/* r1 = start address */
/* r0 = #number of bytes */
mov r2, #0

clear_bss:
stmia r1!, {r2}
subs r0, r0, #4
bne clear_bss

/* setup the stack pointer */

/*从这里开始它说是设置堆栈指针,但是下面几段代码几乎都是重复的,这样做有什么意义吗? 这是针对s3c44b0x移植的,但是我在手册上找不到cpsr_cxsf
这个寄存器,这里它是什么?有什么作用? adr指令书上介绍说是将基于PC相对偏移的地址值或基于寄存器相对偏移的地址值读取到寄存器中。这里是这样的吗,那这个堆栈指针的设置又有什么用呢,是全局的堆栈指针吗? irqstack在哪里定义了,它指的是内存中的哪里?我只在blob.map中找到了irqstack。顺便问一下,blob.map对我读blob源代码有用吗,我该如何去用它?打扰了,谢谢!!
mrs r0, cpsr
bic r0, r0, #0x1f
orr r1, r0, #0xdb
msr cpsr_cxsf, r1
adr sp, irqstack

mrs r0, cpsr
bic r0, r0, #0x1f
orr r1, r0, #0xd7
msr cpsr_cxsf, r1
adr sp, irqstack

mrs r0, cpsr
bic r0, r0, #0x1f
orr r1, r0, #0xd2
msr cpsr_cxsf, r1
adr sp, irqstack

mrs r0, cpsr
bic r0, r0, #0x1f
orr r1, r0, #0xd1
msr cpsr_cxsf, r1
adr sp, irqstack

bic r0, r0, #0x1f
orr r1, r0, #0xd3
msr cpsr_cxsf, r1
ldr r0, stack_end
sub sp, r0, #4

mrs r0, cpsr
bic r0, r0, #0x80
msr cpsr, r0


/* jump to C code */
bl main
/* if main ever returns we just call it again */
b _trampoline


.global ticks
ticks: .word 1
bss_start: .word __bss_start
bss_end: .word __bss_end
stack_end: .word __stack_end
.space(12
irqstack:
您需要登录后才可以回帖 登录 | 注册

本版积分规则

GMT+8, 2024-11-5 13:33 , Processed in 0.061517 second(s), 15 queries .

© 2021 Powered by Discuz! X3.5.

快速回复 返回顶部 返回列表