2014-03-14 10 views
1
.syntax unified 
.thumb 

.cpu cortex-m4 
.arch armv7e-m 
.fpu fpv4-sp-d16 

/* Changes from unprivileged to privileged mode. */ 
.thumb_func 
.section .kernel 
.global  raise_privilege 
.type  raise_privilege, %function 
raise_privilege: 
mrs  r0, control 
bic  r0, r0, #1 
msr  control, r0 
dsb 
isb 
bx  lr 

이것은 암 어셈블리 코드의 일부입니다. 지침의 의미를 알아 내기 위해 칩 설명서를 확인할 수 있습니다. 하지만 .thumb_func 같은 어셈블러 지시문의 동작을 파악하는 방법을 모르겠습니다. 게다가,이 파트 코드를 사용하는 방법을 알지 못하는데, '일반적인 기능처럼 보이지 않습니다. 그래서 나는 그것을 "부르는 법"을 모른다.이 파트 암 어셈블리 코드 이해하기

+0

의사 작전은 ** 코드가 않습니다 ** 알아내는 아마 관련이 있습니다. * [ARM *]이 아닌 [cortex-M] [contrl 레지스터] (http://infocenter.arm.com/help/index.jsp?topic=/com.arm.doc.dui0552a/CHDBIBGJ.html)를 참조하십시오. * 특정. Thumb 인터 네트워킹은 아마 너무 유용하지 않으며 * 피질 -M *에 대해 '통합'되지 않습니다. –

답변

4
  • 지침 정말 어셈블러 지시어입니다. GAS: ARM machine directives
  • .syntax unified에서 통합 ARM/Thumb 어셈블리 구문을 사용하도록 신호를 보낼 수 있습니다. 이 개념은 herehere으로 설명됩니다.
  • .thumb_func은 ARM-Thumb 인터 워킹을위한 Thumb 모드 기능의 시작을 알립니다. 이 개념은 herehere으로 설명됩니다.
  • raise_privilegevoid raise_privilege(void)잎 기능 (즉 다른 기능을 호출하지 않음)이 C에서 나와 같은 모양입니다. 로 전화 :
 
bl raise_privilege 
0

GNU 어셈블러가 고장 , 구피는 어색한는 플러스 레이블이 위해 필요로하는 모든이 thumb_func 해당 레이블을 호출 할 수있다 .thumb_func 워드 ...이 경우

선택은 어셈블러를 알려줍니다 다음 레이블은 내가 전화를 걸거나 주소를로드하고 bx를 사용하고자하는 것입니다.

그래서이 코드 또는 다른 할 수 있습니다 단순히

bl raise_priviliedge 

합니다 (BL 도달 할 수 및/또는 링커가 트램 폴린을 추가하는 경우). 또는하실 수 있습니다

ldr rX,=raise_priviledge 
blx rX 

여기서 rX는 몇 가지 범용 레지스터 (예 : r3)입니다. .로 시작