Инструкции ARM SWI и SVC - это одно и то же? - PullRequest
16 голосов
/ 10 декабря 2011

Сборка ARM содержит инструкции SWI и SVC для входа в «режим супервизора».

Что меня смущает, так почему их два? Здесь сказано, что SVC раньше был SWI.Значит ли это, что в основном они изменили мнемонику?Это одно и то же?Могу ли я использовать их взаимозаменяемо?Один из них существует до архитектуры, а другой после?

Ответы [ 2 ]

21 голосов
/ 11 декабря 2011

Да, SWI и SVC - это одно и то же, это просто смена имени. Ранее инструкция SVC называлась программным прерыванием SWI.

Код операции для SVC (и SWI) частично определяется пользователем (бит 0-23 определяется пользователем и является параметром для обработчика SVC). Биты 24-27 - это b1111, и эти 4 бита заставляют CPU понимать, что код операции - это SVC (или SWI). Подробнее см. Информационный центр ARM .

3 голосов
/ 07 января 2019

Существует хорошая мнемоническая таблица UAL по сравнению с UAL до ARMv8 Приложение K6 "Устаревший синтаксис инструкций для наборов инструкций AArch32"

Одна из записей этой таблицы:

Pre-UAL syntax    UAL equivalent
SWI               SVC

, в котором явно указано, что они эквивалентны.

В GNU GAS вы можете выбрать синтаксис UAL с помощью .syntax unified.

В GCC вы можете использовать опцию-masm-syntax-unified для встроенной сборки, хотя она не работала в 8.2.0 из-за исправленной ошибки: Как написать встроенную сборку UAL ARMv7 в формате .syntax в GCC?

UALvs pre-UAL также имеет дополнительные значения помимо имен определенных инструкций, например, требование для # или нет в определенных целочисленных литералах: Требуется ли хэш для непосредственных значений в сборке ARM?

...