기존 이솝 임베디드 포럼의 지식인 서비스가 게시판 형태로 변경되었습니다.

start.S에서 처음 벡터

.globl _start  

_start: b       reset    // exception의 처음인 0x0000_0000번지이다. reset함수로 분기
ldr pc, _undefined_instruction
ldr pc, _software_interrupt      
ldr pc, _prefetch_abort          
ldr pc, _data_abort  
ldr pc, _not_used
ldr pc, _irq
ldr pc, _fiq

_undefined_instruction: .word undefined_instruction
_software_interrupt: .word software_interrupt
_prefetch_abort: .word prefetch_abort
_data_abort:  .word data_abort
_not_used:  .word not_used
_irq:   .word irq
_fiq:   .word fiq


.balignl 16,0xdeadbeef

이 코드가 있는데 궁금 한 것이  .balignl 16,0xdeadbeef <==
이것을 왜 쓰느냐 하는 것 이고. 이것 때문에 reset의 위치가
0x0000_0010으로 된다고 설명이 나와있는데... 이해가 안 갑니다.
열심히 해 볼려고 하는데... 기초가 넘 없어서..... 큰일인거 같습니다.

김광준

2008.03.05 22:32:02
*.94.41.89

_start: 의 위치가 0번지가 되어야 할겁니다.
b reset보담은 ldr pc,_reset을 사용하세요.

고현철

2008.03.05 22:50:14
*.70.26.43

상관이 없을겁니다......

실제 start는 0번지고, 0번지가 실행이 되면 바로 reset으로 branch하는 것입니다.

0xdeadbeef는 그냥 align을 맞추기 위한 것입니다.
보통 호환성을 위해서 이런 일을 한다고 생각이 됩니다.(컴파일러 버전이나 cpu등등....)

손성원

2008.03.06 02:49:32
*.104.144.107

아~ 감사합니다 ㅠ.ㅠ
List of Articles
번호 제목 글쓴이 날짜 조회 수

사용자 로그인