.align 5 의 뜻
vector base address register의 경우
bit[4:0]이 0이기 때문에 vector base address 는 2의 5승으로 align 되어야 한다(.align 5)
요게 존나 헷갈렸는데...이젠 좀 알겠다
2의 5승 = 32
2의 4승 = 16
보통 int나 unsigned int 같은건 4byte...cpu는 4byte 단위로 pc를 움직임
그래서 아래와 같은 구조체의 경우
struct a
{
int a;
char b;
int c;
}
메모리에 12 byte로 저장된다...align을 맞춰야 읽고 fetch하고 그러니깐
9byte로 저장하고 싶으면 b와 c를 바꾸면 되고
그럼 .align 5는 머냐...
끝의 5비트가 0인거랑 뭔 상관이냐 하면 저 레지스터는 제일 최소값이 32..그 다음이 64가 될듯
0x000000020 - 32가 아마 제일 최소값이고 그 다음이 0x00000040 - 64...
그렇기 때문에 new_vector_base가 저장될 공간이 32의 배수에 해당하지 않으면 저 레지스터(VBAR)은 new_vector_base를 가리킬 수 없기 때문에 .align 5로 하는듯...
아 존나 헷갈렸다
82000140 l .text 00000000 new_vector_base
82000160 l .text 00000000 _reset
82000164 l .text 00000000 _undefined_instruction
82000168 l .text 00000000 _software_interrupt
8200016c l .text 00000000 _prefetch_abort
82000170 l .text 00000000 _data_abort
82000174 l .text 00000000 _not_used
82000178 l .text 00000000 _irq
8200017c l .text 00000000 _fiq
82000180 l .text 00000000 reset
82000184 l .text 00000000 undefined_instruction
82000198 l .text 00000000 software_interrupt
820001ac l .text 00000000 prefetch_abort
820001c0 l .text 00000000 data_abort
820001e0 l .text 00000000 irq
82000200 l .text 00000000 fiq
8200012c: e8bd8000 pop {pc}
82000130: e320f000 nop {0}
82000134: e320f000 nop {0}
82000138: e320f000 nop {0}
8200013c: e320f000 nop {0}
82000140 <new_vector_base>:
12c = 300
140 = 320
아 그럼 int는.align x ?
.align 5 - 32
.align 4 - 16
.align 3 - 8
.align 2 - 4
.align 1 - 2
이거 맞나?