Ниже приведен фрагмент кода из библиотеки ARM CMSIS, который используется для установки значения регистра PRIMASK.
/**
* @brief Set the Priority Mask value
*
* @param priMask PriMask
*
* Set the priority mask bit in the priority mask register
*/
static __INLINE void __set_PRIMASK(uint32_t priMask)
{
register uint32_t __regPriMask __ASM("primask");
__regPriMask = (priMask);
}
Часть, которую я не понимаю, - это встроенная инструкция по сборке.
__ASM("primask");
Я ничего не читал о такой адресации регистров по имени. Как вы можете иметь встроенную сборку без кода операции? Назначает ли это __regPriMask этому местоположению регистра? Может ли кто-нибудь указать на справочный документ?