[커널] visual 2008에서 부트로더에서 c언어로 점프시 에러..

intmain1202의 이미지

현재 c로 점프를 할려고 하는데요
컴파일 프로그램으로는 visual 2008을 사용하고있습니다.
현재 visual2008의 옵션은 빌드전 이벤트에서
ml /c /Fl /coff Sload.asm 을 하고있습니다.
근데 여기서 에러가
1>빌드 전 이벤트를 수행하고 있습니다...
1> Assembling: Sload.asm
1>Sload.asm(81) : error A2155:cannot use 16-bit register with a 32-bit address
1>Sload.asm(12) : error A2022:instruction operands must be the same size
1>Sload.asm(22) : error A2004:symbol type conflict
1>Sload.asm(42) : error A2006:undefined symbol : _GDT
1>Sload.asm(53) : error A2071:initializer magnitude too large for specified size
1>Sload.asm(71) : error A2004:symbol type conflict

이렇게 나옵니다.. 현재 원인을 모르겟습니다..
어떤것 때문일까요..

링커에서 출력파일에서 ssmos.bin 으로 출력파일을 생성하게했습니다.
나머지옵션은 아래와 같습니다..

C/C++ > 일반 :
- 디버깅 정보 형식 : 사용 안함
- 64bit 이식성 문제점 검색 : 아니오

C/C++ > 최적화 :
- 최적화 : 사용 안함
- 전체 프로그램 최적화 : 아니오

C/C++ > 전처리기
- 전처리기 정의 : _DEBUG-
표준 포함 경로 무시 : 예

C/C++ > 코드 생성
- 문자열 풀링 사용 : 예
- 최소 다시 빌드 가능 : 아니오
- 구조체 멤버 맞춤 : 1byte
- 버퍼 보안 검사 : 아니오
- 함수 수준 링크 사용 : 예

C/C++ > 미리 컴파일된 헤더
- 미리 컴파일된 헤더 만들기 / 사용 : 미리 컴파일된 헤더 사용 안함

C/C++ > 출력 파일
- 어셈블러 출력 : 어셈블리, 기계어 코드, 소스(/FAcs)

C/C++ > 고급
- 모든 전처리기 정의 해제 : 예

링커 > 입력
- 모든 기본 라이브러리 무시 : 예
링커 > 디버깅
- 디버그 정보 생성 : 아니오
- 맵 파일 생성 : 예
- 맵 파일 이름 : SSMos.map
링커 > 시스템
링커 > 고급
- 진입점 : EntryPoint16

- 기준 주소 : 7e00

저의 소스 파일입니다.. sload.asm
.386p
.MODEL FLAT

public _EntryPoint16
extern _SSMOS_MAIN:NEAR

.CODE
_EntryPoint16 PROC NEAR
mov ax, 07E0h
push word ptr ax
mov ax, offset init
push word ptr ax
retf
init:
; Set DS and ES to the data segment.
MOV AX, CS
MOV DS, AX
MOV ES, AX
MOV SS, AX

mov dx, 3F2h ;플로피디스크를 끈다.
xor al, al
out dx, al

;push OFFSET msg_loader ; kernel_loading
;call MSGOUT
;add sp, 2

CLI mov al, 0FFh
out 0A1h, al

db 3eh ; LGDT 명령어 기계어
db 67h
db 0fh
db 01h
db 15h
dd GDT-7E00h

mov eax, cr0 ; protected Mode 진입
or al, 1
mov cr0, eax
jmp $+2
nop
nop

db 66h ;
db 0eah
dw _EntryPoint32
db 08h


finish:
HLT ;
jmp finish

_EntryPoint16 ENDP
_EntryPoint32 PROC NEAR
mov ax, 10h ; ds segment descriptor
mov ds, ax
mov es, ax
mov fs, ax
mov gs, ax
mov ss, ax
mov esp, 1ffffh

call _SSMOS_MAIN
finish:
hlt
jmp finish
_EntryPoint32 ENDP

MSGOUT PROC NEAR
push bp
mov bp, sp
pusha
mov si, WORD ptr [bp+4]
print:
lodsb
or al, al
jz finish
mov ah, 0eh ; teletype output function
mov bx, 08h ; back/fore ground color
int 10h
jmp print
finish:
popa
pop bp
ret
MSGOUT ENDP

.DATA
;===============================================================================
; GDT table descriptor
;===============================================================================
GDT_DESCR STRUCT
GDTRDESC dw GDT_SIZE -1
dd GDT
GDT_DESCR ENDS

;===============================================================================
; GDT table
;===============================================================================
;----------------------------------
; GDT TABLE INDEX #0
; INDEX : NULL SELECTOR
;----------------------------------
GDT dd 0
dd 0
;----------------------------------
; GDT TABLE INDEX #1
; INDEX : 0x0008h
; TYPE : CODE SEGMENT
; RING LEVEL : 0
; ATTRIBUTES : Excute/Read, Nonconforming, 4GB
;----------------------------------
dw 0ffffh ; segment limit 15:00
dw 0000h ; base address 15:00
db 00h ; base address 23:16
db 10011010b ; P | DPL | S | TYPE
db 11001111b ; G | D/B | 0 | AVL | segment limit 19:16
db 00h ; base address 31:24

;----------------------------------
; GDT TABLE INDEX #2
; INDEX : 0x0010h
; TYPE : DATA SEGMENT
; RING LEVEL : 0
; ATTRIBUTES : Read/Write, 4GB
;----------------------------------
dw 0ffffh
dw 0000h
db 00h
db 10010010b
db 11001111b
db 00h

GDT_SIZE EQU $-GDT

msg_loader db "kernel loading...", 0h

END

KLDP의 커널관련 해서 하시는분들은 어떻게해서 VISUAL 2008에서 C로 점프를 시켯나요..ㅠㅠ

댓글 달기

Filtered HTML

  • 텍스트에 BBCode 태그를 사용할 수 있습니다. URL은 자동으로 링크 됩니다.
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param><hr>
  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <code>, <blockcode>, <apache>, <applescript>, <autoconf>, <awk>, <bash>, <c>, <cpp>, <css>, <diff>, <drupal5>, <drupal6>, <gdb>, <html>, <html5>, <java>, <javascript>, <ldif>, <lua>, <make>, <mysql>, <perl>, <perl6>, <php>, <pgsql>, <proftpd>, <python>, <reg>, <spec>, <ruby>. 지원하는 태그 형식: <foo>, [foo].
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.
댓글 첨부 파일
이 댓글에 이미지나 파일을 업로드 합니다.
파일 크기는 8 MB보다 작아야 합니다.
허용할 파일 형식: txt pdf doc xls gif jpg jpeg mp3 png rar zip.
CAPTCHA
이것은 자동으로 스팸을 올리는 것을 막기 위해서 제공됩니다.