我正在与ARM汇编一起工作,在这里我必须编写一个遵循ARM调用约定的子程序(该子程序必须与其他地方的某些单独的更高级实现集成在一起)以传递参数和返回值。
现在,在组装时,通常我不确定这是什么。
因此,按照惯例,如果我理解得很好,则将参数从寄存器r0-r4开始按顺序传递,然后使用其他参数堆栈。返回值传递到r0。
现在,这就是我感到困惑的地方。如果我应该保存r0的上下文并在之后将其弹出,则没有办法返回结果,唯一可以解决的方法是破坏第一个参数。
有某种解决方法吗?
最佳答案
当您传回r0中的返回值时,调用者希望您会这样做。调用者不希望r0仍包含与原始第一个参数相同的值,因为r0特别是返回值所在的位置。
通常是ARM calling convention requires that the subroutine preserves r4 through r11,而不是r0到r3。所以反正没有矛盾。
关于assembly - 为汇编中的子例程传递参数和返回值,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/12486918/