ARM指令SWI和SVC完全相同吗?

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

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

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

assembly arm embedded instruction-set
2个回答
29
投票

是的,

SWI
SVC
是一样的,只是换了个名字而已。以前,
SVC
指令称为
SWI
,软件中断。

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


6
投票

ARMv8附录K6“AArch32指令集的遗留指令语法”上有一个很好的UAL与pre-UAL助记表

该表的条目之一是:

Pre-UAL syntax    UAL equivalent
SWI               SVC

明确指出它们是等价的。

在 GNU GAS 上,您可以使用

.syntax unified
选择 UAL 语法。

在 GCC 中,您可以使用选项

-masm-syntax-unified
进行内联汇编,尽管由于当时修复的错误,它在 8.2.0 中不起作用:How to write .syntax Unified UAL ARMv7 inline assembly in GCC?

除了某些指令的名称之外,UAL 与 pre-UAL 还具有进一步的含义,例如某些整数文字中是否需要

#
ARM 汇编中的立即值是否需要哈希?

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