【发布时间】:2012-01-17 13:25:31
【问题描述】:
ARM 程序集具有用于进入“主管模式”的 SWI 和 SVC 指令。
让我困惑的是,为什么会有两个? Here据说SVC以前是SWI。这是否意味着他们基本上改变了助记词?它们是一样的吗?我可以互换使用它们吗?其中一个存在于架构之前,而另一个存在于之后?
【问题讨论】:
标签: assembly arm embedded instruction-set
ARM 程序集具有用于进入“主管模式”的 SWI 和 SVC 指令。
让我困惑的是,为什么会有两个? Here据说SVC以前是SWI。这是否意味着他们基本上改变了助记词?它们是一样的吗?我可以互换使用它们吗?其中一个存在于架构之前,而另一个存在于之后?
【问题讨论】:
标签: assembly arm embedded instruction-set
是的,SWI 和 SVC 是一回事,只是名称的改变。以前,SVC 指令被称为 SWI,软件中断。
SVC(和 SWI)的操作码部分是用户定义的(位 0-23 是用户定义的,类似于 SVC 处理程序的参数)。第 24-27 位是 b1111,这 4 位使 CPU 意识到操作码是 SVC(或 SWI)。 有关详细信息,请参阅ARM Information Center。
【讨论】:
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 相比,除了某些指令的名称外,还有其他含义,例如# 的要求是否在某些整数文字中:Is the hash required for immediate values in ARM assembly?
【讨论】: