我的powerpc装配程序中我做错了什么?

时间:2015-09-11 18:32:20

标签: assembly linker qemu powerpc

我整理了一个简单的汇编程序,以熟悉QEMU。我一直在关注这两个教程(opensourceforu.efytimes.com/2011/07/qemu-for-embedded-systems-development-part-2/)(http://www.csd.uwo.ca/~mburrel/stuff/ppc-asm.html)以下是我为PowerPC编写的汇编程序从第二个教程略微修改。

.global _Start
_Start:
addi 3, 0, 0xa #load 0xA into r3
addi 4, 0, 0xb #load 0xB into r4
addi 5, 0, 0xc #load 0xB into r5
b .

这是基本的,只需将随机值加载到通用寄存器3-5中。

当我交叉编译它时,我使用以下链接描述文件。

ENTRY(_Start)
SECTIONS
{
. = 0x10000;
startup : { dummyStartup.o(.text)}
}

我通过第一个教程中的说明使用交叉编译器将所有内容放在一起,当我在QEMU中运行时,寄存器3-5具有预期值。

我的问题是当我将0x10000改为不同的东西时,比如0x10500或0x9999,程序仍然可以正常运行。该教程指出QEMU的-kernel选项需要一切都在0x10000以便我的代码被执行,但似乎并非如此。这是为什么?

1 个答案:

答案 0 :(得分:1)

我认为0x10000值取决于平台。因此,根据QEMU模拟的机器,内核加载地址是不同的。

如果您在QEMU来源中查找KERNEL_LOAD_ADDR,您会看到有几个不同的值:

https://github.com/qemu/qemu/search?q=KERNEL_LOAD_ADDR