gpt4 book ai didi

assembly - assembly 中的搬迁

转载 作者:行者123 更新时间:2023-12-02 19:50:35 30 4
gpt4 key购买 nike

我有一个用汇编语言编写的裸机 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

最佳答案

我的猜测是应用程序从RAM运行,并且在调试应用程序时,作者可能使用某种引导加载程序和/或jtag将测试应用程序直接加载到RAM中,因此没有理由复制和运行(这可能会导致崩溃)。

这样做的另一个原因是为了避免无限循环。例如,如果您想从闪存启动(通常必须)但从RAM执行,最简单的方法是将整个闪存或整个闪存 block 复制到RAM,然后分支到RAM的开头。当你这样做时,意味着你再次点击“将应用程序复制到内存和分支”循环,以避免第二次(这可能会让你崩溃),你有某种我是从闪存运行这个循环还是不测试。

关于assembly - assembly 中的搬迁,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15671717/

30 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com