assembly arm embedded instruction-set

assembly - ¿Son las instrucciones de ARM SWI y SVC exactamente lo mismo?



embedded instruction-set (2)

Sí, SWI y SVC son lo mismo, es solo un cambio de nombre. Anteriormente, la instrucción SVC se llamaba SWI, Interrupción de software.

El código de operación para SVC (y SWI) está parcialmente definido por el usuario (el bit 0-23 es definido por el usuario y es como un parámetro para el controlador SVC). Los bits 24-27 son b1111 y estos 4 bits hacen que la CPU se dé cuenta de que el código de operación es SVC (o SWI). Consulte el Centro de información de ARM para obtener más detalles.

El ensamblaje ARM tiene instrucciones SWI y SVC para ingresar al ''modo supervisor''.

Lo que me confunde es, ¿por qué hay dos de ellos? Here se dice que SVC fue anteriormente SWI. ¿Significa que básicamente cambiaron la mnemotecnia? ¿Son la misma cosa? ¿Puedo usarlos indistintamente? ¿Existe uno de ellos antes de una arquitectura, y otro después?


Hay una buena tabla mnemotécnica UAL vs pre-UAL en ARMv8 Apéndice K6 "Sintaxis de instrucciones heredadas para conjuntos de instrucciones AArch32"

Una de las entradas de esa tabla es:

Pre-UAL syntax UAL equivalent SWI SVC

Lo que declara explícitamente que son equivalentes.

En GNU GAS, puede seleccionar la sintaxis UAL con .syntax unified .

Desde GCC, puede usar la opción -masm-syntax-unified para ensamblaje en línea, aunque no funcionó en 8.2.0 debido a un error reparado: ¿Cómo escribir .syntax unificado en línea UAL ARMv7 en GCC?

UAL vs pre-UAL también tiene otras implicaciones además de los nombres de ciertas instrucciones, por ejemplo, el requisito de # o no en ciertos literales enteros: ¿Se requiere el hash para los valores inmediatos en el ensamblaje ARM?