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
에 값을로드하여 라인에 을 입력하는 것입니다. 그런 다음 에서 LDR
은 IRQ_NewStack
레이블의 (32 비트) 주소를 IRQ 모드로 뱅크 된 스택 포인터에로드하는 데 사용됩니다.
내게 명령의 목적이 무엇인지 설명해 주시겠습니까 ?
DCD
은 에 "32 비트 워드 예약"을 사용하는 ARM 설명서를 읽었습니다. "32 비트 단어 예약"을 읽으면 단일 32 비트 변수의 공간을 예약하는 것과 같습니다. DCD
은 EQU
(DCD
...의 매크로 일 수 있음)을 의미합니다. 그러나이 경우, 전체 스택의 32 비트 워드가 하나의 32 비트 워드보다 커질 수있는 이유는 무엇입니까?
감사합니다.
코드에 버그가 있다고 생각합니다. 그것은'LDR r13_irq, = IRQ_Stack' 또는'LDR r13_irq, IRQ_NewStack' 중 하나 여야합니다. –
네 말이 맞아 ... 고마워. – salvo