CnUnix

[알림판목록 I] [알림판목록 II] [글목록][이 전][다 음]
[ CnUnix ] in KIDS
글 쓴 이(By): guest (x86) <61.74.154.218>
날 짜 (Date): 2003년 5월 23일 금요일 오후 05시 00분 04초
제 목(Title): [Q] x86 assembler관련


보드의 제목과 맞지 않지만...

LinuxBIOS의 source중 일부를 windows환경으로 가져와서 다른 코드에 
넣고 있는데요, x86 assembler에 익숙치 않아서 고전하고 있습니다.

linuxbios의 source중 아래 코드는, linux 커널을 메모리의 0x100000에
올려놓은 후 'jump'하는 부분인데, c code내에서 inline assembler로 처리되어
있습니다.

    __asm__ __volatile__("movl $0x90000, %%esi\n\t"
                 "movl $0, %%ebx\n\t"
                 "ljmp $0x10, %0\n\t"
                 :: "i" (0x100000));
역어셈블 해보면..                 
 1b6:   be 00 00 09 00          mov    $0x90000,%esi
 1bb:   bb 00 00 00 00          mov    $0x0,%ebx
 1c0:   ea 00 00 10 00 10 00    ljmp   $0x10,$0x100000


이 코드를 windows환경으로 가져와서 동일한 일을 해주도록 해야 하는데,
1. Microsoft compiler에는 'ljmp'란 mnemonic이 없고,
2. 'ljmp $0x10, 0x1000000'의 의미도 정확히 의미도 모르겠네요.

Art of Assembly나 MASM등 관련 자료를 뒤져서 공부를 하고는 있지만,
아직 감이 안잡힙니다. gas reference manual은 어디서 구할수 있는지요.
검색하면 공장에서 가스 다루는 기계의 manual들이 나오네요 -..-

감사합니다.
[알림판목록 I] [알림판목록 II] [글 목록][이 전][다 음]
키 즈 는 열 린 사 람 들 의 모 임 입 니 다.