我想在armv8裸机应用程序的程序集启动文件中初始化堆栈和堆。 我正在使用AArch64 Fast Modal模拟器进行测试。 模拟器始终停留在执行" stp"装配说明。 这是我的代码。
.section .text, "ax"
.global _start
_start:
ldr x1, _heap_start_ptr
movz w0, #0x16 /* SWI: Heapinfo */
hlt #0xf000
/* Pointer to heap start */
ldr x2, _heap_start_ptr
/* Pointer to stack base */
ldr x1, _stack_ptr
mov sp, x1
ldr x0,[x2,#16] /* Stack base */
and sp, x0, #~15
/* Pointer to heap start */
ldr x1, _heap_limit
ldr x0, [x2, #8] /* heap limit */
and x1,x0, #~15
/* Now this code stuck the simulator */
/* Setup an initial dummy frame with saved fp=0 and saved lr=0 */
mov x29, #0
stp x29, x29, [sp, #-16]!
mov x29, sp
ldr w1, =hello
movz w0, #0x04 /* SWI: write0 */
hlt #0xf000
b _start_c_code /* This code initialize some newlib routine and jump to c/c++ code */
hello:
.ascii "Hello, world!\n"
.align 3
_heap_start_ptr:
.dword _heap_start
_heap_limit_ptr:
.dword _heap_limit
_stack_ptr:
.dword _stack
我正在初始化堆栈和堆以运行c / c ++裸机应用程序。
评论" stp"指令行
//stp x29, x29, [sp, #-16]!
simulator show print" Hello World!"在托管模式。 但是" stp"指令,快速模态始终处于卡住状态。 请注意" stp"是平等的#34;推" armv8中的指令,没有" stp"我们甚至无法在堆栈上推送任何东西。
现在问题: *为什么" sp"不提供推送堆栈的特权? *我实际上是在初始化正确的堆和堆栈吗? *是否需要任何其他低级初始化才能使用堆栈?