这是一个ARC程序,它调用子程序foo,并传递三个参数a
,b
和c
。子例程有两个局部变量m
和n
。我正在尝试理解并显示堆栈指针的位置和相关堆栈元素的内容,以便在下面显示的程序中的基于堆栈的调用约定。请注意,子程序foo不会返回任何内容。
x
; 在标签z执行ld之前(即调用例程恢复时)。
! Push the arguments a, b, and c
x: call foo
z: ld %r1, %r2
.
.
.
foo: ! Subroutine starts here
.
.
y: jmpl %r15 + 4, %r0
任何帮助都值得赞赏!
答案 0 :(得分:1)
检查here,章节4.6子程序链接和堆栈 第13页,“第三个调用约定使用堆栈”。
请注意,在调用中,不会自动使用堆栈。你必须推动回报 子程序代码中的地址。这在RISC架构中有点常见。