ARM 程序集具有用于进入“主管模式”的 SWI 和 SVC 指令。
令我困惑的是,为什么有两个?据说SVC以前是SWI 。这是否意味着他们基本上改变了助记词?它们是一样的吗?我可以互换使用它们吗?它们中的一个是否存在于架构之前,而另一个存在于架构之后?
ARM 程序集具有用于进入“主管模式”的 SWI 和 SVC 指令。
令我困惑的是,为什么有两个?据说SVC以前是SWI 。这是否意味着他们基本上改变了助记词?它们是一样的吗?我可以互换使用它们吗?它们中的一个是否存在于架构之前,而另一个存在于架构之后?
是的,SWI 和 SVC 是一回事,只是名称的改变。以前,SVC 指令被称为 SWI,软件中断。
SVC(和 SWI)的操作码部分是用户定义的(位 0-23 是用户定义的,就像 SVC 处理程序的参数)。第 24-27 位是 b1111,这 4 位使 CPU 意识到操作码是 SVC(或 SWI)。有关详细信息,请参阅ARM 信息中心。
ARMv8附录 K6“AArch32 指令集的传统指令语法”上有一个很好的 UAL 与 pre-UAL 助记表
该表的条目之一是:
Pre-UAL syntax UAL equivalent
SWI SVC
它明确指出它们是等价的。
在 GNU GAS 上,您可以使用.syntax unified
.
在 GCC 中,您可以使用-masm-syntax-unified
内联汇编的选项,尽管由于当时修复的错误,它在 8.2.0 中不起作用:如何在 GCC 中编写 .syntax 统一的 UAL ARMv7 内联汇编?
除了某些指令的名称之外,UAL 与 pre-UAL 还具有进一步的含义,例如是否要求#
某些整数文字:ARM 汇编中的立即值是否需要散列?
已删除 - 发现我的错误并删除了 contri。