본문 바로가기

컴퓨터 과학 & 영상처리 관련/임베디드

.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

이거 맞나?


 

'컴퓨터 과학 & 영상처리 관련 > 임베디드' 카테고리의 다른 글

ldr 에서 pre-indexed(선증가), post-indexed(후증가)  (0) 2012.04.26
arm v7 and, orr 연산 실습  (0) 2012.04.19
stack 테스트  (1) 2012.04.11
ldd /bin/ls  (0) 2012.04.07
메모리 alignment  (0) 2012.04.03