2013-12-18 4 views
4

Я пишу голый металлический код (без ОС) для процессора ARM Cortex A9.(ARM ASSEMBLY) MSR CPSR_C, # 0x13 не работает

Мне нужно прочитать регистр, доступный только в режиме супервизора (многопроцессорный регистр сродства, MPIDR).

Когда я вхожу в пользовательский режим и пытаюсь выполнить следующую инструкцию (для входа в режим супервизора) шаг за шагом с отладчиком, ничего не происходит.

MSR CPSR_C, #0x13 

И моя программа переходит к неопределенному режим, если я пытаюсь читать MPIDR регистр

Пожалуйста, вы знаете, что я не хватает?

Когда я использую окна отладчика и заставляю пять первых бит регистра CPSR на b10011, он работает, я иду к супервизору.

+3

Вы уверены, что письмо на 'CPSR_C' не является привилегированной операцией? Это не имеет большого смысла для защиты вещей, если нарушение защиты - это просто ... – unwind

+0

Я не уверен, когда я вступаю с отладчиком и перехожу в режим irq, а затем выполняю ту же инструкцию, это работает. – bonpiedlaroute

+0

, но если это привилегированная операция, как я могу это сделать, чтобы войти в режим супервизора, исходящий из пользовательского режима, это невозможно? – bonpiedlaroute

ответ

5

Вы не можете изменять режимы, используя инструкции, которые непосредственно записываются в биты режима CPSR в режиме пользователя. Правильный способ - использовать svc (вызов супервизора) и выполнить требуемую требуемую инструкцию.

Смежные вопросы