Согласно руководству ARM, должно быть возможно получить доступ к окруженным валом регистрам для определенного режима CPU как, например, "r13_svc". Когда я пытаюсь сделать, этот gcc вопит на меня со следующей ошибкой:
непосредственное выражение требует # префикса - 'mov r2, sp_svc'
Что случилось?
Обновление. Следующий текст из Справочника Архитектуры ARM для ARMv5 и ARMv6 привел меня полагать, что это возможно, раздел A2.4.2:
Регистры R13 и R14 имеют шесть окруженных валом физических регистров каждый. Каждый используется в режимах User и System, и каждое оставление пять используется в одном из пяти режимов исключения. Где необходимо быть конкретным, о котором упоминается версия, Вы используете названия формы: R13_mode R14_mode, где режим является соответствующим из usr, svc (для Привилегированного режима), около, und, irq и fiq.
Я не думаю, что это возможно с помощью инструкции mov
; по крайней мере, согласно Справочному руководству по архитектуре ARM, которое я читаю. Какой у вас документ? Существует вариант ldm
, который может загружать регистры пользовательского режима из привилегированного режима (используя ^
). Единственный другой вариант - переключиться в режим SVC, выполнить mov r2, sp
, а затем переключиться обратно в любой другой режим, который вы использовали.
Вы получаете ошибку, потому что он не понимает sp_svc
, поэтому он думает, что вы пытаетесь выполнить немедленную mov
, которая будет выглядеть так:
mov r2, #0x14
Вот почему написано «требуется префикс #».
Вы используете mrs и msr для изменения режимов, изменяя биты в cpsr, а затем используете r13 нормально.
Из arm arm
MRS R0,CPSR BIC R0,R0,#0x1F ORR R0,R0,#0x13 MSR CPSR_c,R0
затем
mov sp,#0x10000000
или если вам нужно больше битов в immediate
ldr sp,=0x12345600
или если вы не хотите, чтобы ассемблер размещал ваши данные, вы можете разместить их сами.
ldr sp,svc_stack b 1f svc_stack: .word 0x12345600 1:
Вы увидите типичный код запуска arm, где приложение собирается поддерживать прерывания, прерывания и другие исключения, установить все ваши указатели стека, которые вам понадобятся, изменить режим, установить sp, изменить режим, установить sp, изменить режим ...