부트로더 start.S 에서 질문 드립니다. .macro get_bad_stack
U-BOOT 부트로더의 start.S라는 화일에서 아래와 같은 매크로 함수를 발견했는데, 이해가 안가는 부분이 있어 여쭙니다.
.macro get_bad_stack -----------------------> get_bad_stack 매크로의 역할이 무엇입니까? bad_stack은 무엇을 말하는 것입니까?
ldr r13, IRQ_STACK_START_IN @ setup our mode stack (enter
@ in banked mode)
str lr, [r13] @ save caller lr in position 0----->saved stack의 position 0은 무엇을 말하는 것입니까?
@ of saved stack-------------------일반적으로 말하는 stack을 말하는 것입니까?
mrs lr, spsr @ get the spsr
str lr, [r13, #4] @ save spsr in position 1 of------->spsr값을 스택에 쌓으면 arm은 풀디센딩방식이어서 r13+4가 아니라
@ saved stack----------------------r13-4의 논리로 해야 타당한것 아닙니까? 주소가 줄어야 되는거 아닙니까?
mov r13, #MODE_SVC @ prepare SVC-Mode----------------->r13은 SP인데 어떻게 스택포인터에다가 번지가 아닌 상수를 입력합니까?
@ msr spsr_c, r13---------------------------------------------------------상수를 입력하면 sp는 어떻게 되는 것입니까?
msr spsr, r13 @ switch modes, make sure
@ moves will execute
mov lr, pc @ capture return pc--------------->pc에서 lr로 다시 lr에서 pc로 전송하는 이유가 뭡니까?
movs pc, lr @ jump to next instruction &-------원래 있던 pc를 그냥 그대로 두는 것과 무엇이 다릅니까?
@ switch modes.
.endm
댓글 달기