堆栈指针寄存器为AArch64

时间:2015-01-22 14:43:01

标签: assembly stack arm heap arm64

我想在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"不提供推送堆栈的特权? *我实际上是在初始化正确的堆和堆栈吗? *是否需要任何其他低级初始化才能使用堆栈?

0 个答案:

没有答案