2012-10-06 2 views
2

ARM 프로세서의 여러 모드 (IRQ, 관리자, 사용자 등)에 대한 스택 설정 주제를 연구 중입니다. 다른 스택을 설정하려면 동일한 명령어 순서 (기본적으로 스택 주소 변경 만 필요함)가 필요하므로 IRQ 스택 설정 문제에 의문을 제기합니다. 단지 r2는 대한로드 라인 1DCD 명령어 및 IRQ 스택

1. MOV r2, #NoInt|IRQ32md 
2. MSR CPSR_c, r2 
3. LDR r13_irq, =IRQ_NewStack 
4. ... 
5. ... 
6. IRQ_NewStack: 
7. DCD IRQ_Stack 

:

은 다음 코드는 설치에 스택을 사용
IRQ_Stack EQU 0x8000 
NoInt  EQU 0xC0 
IRQ32md EQU 0x12 

(I 댓글을 가능하게하는 줄 번호를 추가) : 나는 다음과 같은 정의를 가지고 제공 인터럽트를 비활성화하고 CPSR_c에 값을로드하여 라인에 을 입력하는 것입니다. 그런 다음 에서 LDRIRQ_NewStack 레이블의 (32 비트) 주소를 IRQ 모드로 뱅크 된 스택 포인터에로드하는 데 사용됩니다.

내게 명령의 목적이 무엇인지 설명해 주시겠습니까 ?

DCD에 "32 비트 워드 예약"을 사용하는 ARM 설명서를 읽었습니다. "32 비트 단어 예약"을 읽으면 단일 32 비트 변수의 공간을 예약하는 것과 같습니다. DCDEQU (DCD ...의 매크로 일 수 있음)을 의미합니다. 그러나이 경우, 전체 스택의 32 비트 워드가 하나의 32 비트 워드보다 커질 수있는 이유는 무엇입니까?

감사합니다.

+0

코드에 버그가 있다고 생각합니다. 그것은'LDR r13_irq, = IRQ_Stack' 또는'LDR r13_irq, IRQ_NewStack' 중 하나 여야합니다. –

+0

네 말이 맞아 ... 고마워. – salvo

답변

4

DCD는 스택을 가리키는 1 32 비트 워드를 예약합니다. 스택 자체는 아닙니다.