17

ARM 程序集具有用于进入“主管模式”的 SWI 和 SVC 指令。

令我困惑的是,为什么有两个?据说SVC以前是SWI 这是否意味着他们基本上改变了助记词?它们是一样的吗?我可以互换使用它们吗?它们中的一个是否存在于架构之前,而另一个存在于架构之后?

4

3 回答 3

23

是的,SWI 和 SVC 是一回事,只是名称的改变。以前,SVC 指令被称为 SWI,软件中断。

SVC(和 SWI)的操作码部分是用户定义的(位 0-23 是用户定义的,就像 SVC 处理程序的参数)。第 24-27 位是 b1111,这 4 位使 CPU 意识到操作码是 SVC(或 SWI)。有关详细信息,请参阅ARM 信息中心

于 2011-12-10T20:52:39.367 回答
4

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 汇编中的立即值是否需要散列?

于 2019-01-07T17:05:27.940 回答
-2

已删除 - 发现我的错误并删除了 contri。

于 2022-03-03T09:56:15.197 回答