ARM汇编中如何使用寄存器来指定SVC函数的参数?

问题描述 投票:0回答:1

我见过汇编代码,其中寄存器 R0-R2 为 SVC 函数指定某些参数,但不知道这是否始终特定于这些寄存器。另外,如果参数特定于这些寄存器,我如何找出关于 SVC 函数哪些有效参数可以传递给这些寄存器?

我尝试在 Google 上搜索,看看 SVC 是如何工作的,还搜索了哪些内容可以作为 SVC 参数有效地传递到寄存器中,但没有找到任何内容。

assembly arm
1个回答
0
投票

svc
指令本身没有太多作用——它将CPU切换到管理模式,并跳转到预定义的地址:0x00000008或0xFFFF0008。如果您的计算机上正在运行操作系统 - 它会在这些地址上安装其功能之一。

行为完全取决于操作系统。

svc
指令使所有寄存器保持不变 - 因此操作系统可以检查其中的任何一个。它还可以在返回控制权之前修改任何寄存器 - 如果它返回的话。

您应该参考特定操作系统的文档来了解哪些寄存器的含义。但请注意,并非所有操作系统都会公开

svc
接口。对于那些没有的库,您应该使用操作系统开发人员提供的库。在内部,该库仍将使用
svc
指令 - 但寄存器的含义可能没有记录,甚至可以在版本之间发生变化。

© www.soinside.com 2019 - 2024. All rights reserved.