Недавно я наткнулся на эти инструкции ASM и попытался выяснить, что они делают. Я просмотрел несколько сборников ARM (например, THIS) и смог выяснить, что делают несколько инструкций.Что делают инструкции по сборке ARM?
Например, MRS (Move to Register from Status)
копирует статус из PSR (Program Status Register)
Зарегистрируйтесь на %0
(что, я считаю, регистрируется 0).
Я не могу понять, что такое : "=r" (Cs)
и другие подобные инструкции.
UINT32 Cp;
if((Cp & 0x1) == 0)
{
UINT32 Cs;
__asm
(
" MRS %0, PSR\n"
"BIC %1, %2, #0x80\n"
"cpsie i"
: "=r" (Cs), "=r" (Cp)
: "r" (Cs)
);
}
Может кто-нибудь объяснить это?
Редактировать 1: Это функция выпуска GlobalLock. cpsie i
позволяет прерываниям.
Спасибо, бесполезно. Да, это внутри функции, которая должна очищать GlobalLock, и, как вы уже сказали, она кажется неправильной и не работает так, как она должна быть. Я пытаюсь выяснить, что не так, и попытаться это исправить. Я отредактирую свой вопрос, чтобы добавить больше контекста. Я не могу поддержать ваш ответ, поскольку у меня нет необходимой репутации. – Sarvavyapi
У вас неверная интерпретация этих строк. Первая строка указывает, что как 'Cs', так и' Cp' используются как выходы регистров. Вторая строка, обозначенная как 'Cs', также используется в качестве входа регистра. –
О да, привет, я совершенно неправильно понял, что – Useless