【发布时间】:2013-03-18 07:02:45
【问题描述】:
我有一个用汇编语言编写的裸机 ARM 的启动代码,我正试图了解它是如何工作的。该二进制文件被写入一些外部闪存中,并在启动时将其自身的一部分复制到 RAM 中。尽管我读了wikipedia entry,但在这种情况下我仍然没有完全理解重定位的概念。 RAM 映射到低地址窗口,闪存映射到高地址窗口。有人能解释一下为什么我们在这里测试链接寄存器的值吗?
/* Test if we are running from an address, we are not linked at */
bl check_position
check_position:
mov r0, lr
ldr r1, =check_position
cmp r0, r1 /* ; don't relocate during debug */
beq relocated_entry
【问题讨论】:
-
感谢您的两个出色回答!如果我能做到,我会接受这两个,因为一个解释了代码的目标(JTAG 程序加载器假设是正确的),第二个解释了它是如何工作的。
标签: assembly arm bare-metal