[어셈블리 ]ORG 디렉티브는 왜?
글쓴이: dalant019 / 작성시간: 일, 2009/03/22 - 10:43오후
어셈블하면 기계어에 보이지 않는지요?
어쨋든 CPU가 다음 명령어를 가져오기 위해 pc와 같이 사용하는 기준 주소의 값을 바꾸려면(org가 이 일을 하는 거 맞죠?) 이에 해당하는 명령이 cpu에 전달되야 가능하잖아요.(제 부끄러운 상식선에선요 ㅜㅜ)
org의 레퍼런스를 보면 어셈블러가 여차 여차 알아서 한다고 나와있는 거 같은데... 그런데 부팅할 때를 생각해보면(어셈블러가 개입하지 못하는 상황) 처음 512 바이트를 메모리에 읽오온 뒤 하나 하나 실행하는 거니깐 이때에는 이에 해당하는 명령이 있어야 될 거 같은데요??? 왜 그런거죠???
제 짧은 지식이 여러분을 괴롭히네요... 죄송합니다...
Forums:
부트로더... 부팅하는
부트로더...
부팅하는데 당연히 어셈블러 안들어갑니다만....
런타임에서도 어셈블러 안들어갑니다= _=;;;
어셈블러는 컴파일할 때 쓰이는 녀석입니다.
동적 링커하고 햇갈리신것 같네요.
...
ORG 디렉티브,,, 어셈블러에서 처리하는 녀석입니다.
기계어에 대응되는 명령이 아닙니다 = ㅅ=);;;
그 뒤 코드의 segment offset을 변경하는 녀석으로,
상황에 따라서 "그냥 그런거임", 혹은 "패딩질 필요함" 등등으로 해석이 됩니다.
그리고 PC를 변경하는게 아니라
어셈블러 작동시에 location counter라고, 코드 줄을 기억하는 녀석을 변경시킵니다.
세그먼트
세그먼트 시작지점(코드 중간에 start니 뭐니로 설정한 프로그램 실행시작지점 말고, 세그먼트시작 지점)의 오프셋이 0이 아닌 org로 선언한 값이라는 뜻입니다.
부트로더도 쓰이고 있고요
도스의 EXE가 아닌 COM파일 같은 경우에는 시작오프셋이 무조건 0x100으로 고정되어있습니다. 이런넘들 만들때 씁니다.
그리고 이런 환경은 이미 주소가 고정되었다는 것을 가정하고 만들기 때문에 링커 필요 없습니다.
어셈블러에 만들어낸 코드 실행시키면 그대로 다 됩니다.
Written By the Black Knight of Destruction
Written By the Black Knight of Destruction
댓글 달기