ARM指令中的SWI和SVC是否完全相同?

20

ARM汇编有SWI和SVC指令,可以进入“监管模式”。

让我感到困惑的是,为什么会有两个?这里说SVC曾经是SWI。这是否意味着它们基本上改变了助记符号?它们是一样的吗?我可以互换使用它们吗?一个是在架构之前存在的,另一个是架构之后才有的吗?

2个回答

27

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

SVC(和SWI)的操作码部分由用户定义(位0-23是用户定义的,类似于SVC处理程序的参数)。位24-27是b1111,这4位使CPU意识到操作码是SVC(或SWI)。 更多细节请参见ARM信息中心


4

ARMv8的附录K6“AArch32指令集的传统指令语法”中,有一个很好的UAL vs pre-UAL助记符表。

其中一个条目如下:

Pre-UAL syntax    UAL equivalent
SWI               SVC

该文明确说明它们是等效的。

在GNU GAS中,您可以使用.syntax unified选择UAL语法。

从GCC开始,您可以使用-masm-syntax-unified选项进行内联汇编,尽管由于一些已经修复的错误,在8.2.0版本中无法正常工作: 如何在GCC中编写.syntax unified UAL ARMv7内联汇编?

UAL与pre-UAL除了某些指令名称之外,还有进一步的影响,例如在某些整数文字中是否需要#: ARM汇编中立即值是否需要哈希标记?


你可以直接查看文档以查看指令本身。 - old_timer

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接