시스템 해킹

 1576, 1/79 회원가입  로그인  
   dhxkgozj
   OS 제작 부트섹터 부분 질문

http://www.hackerschool.org/HS_Boards/zboard.php?AllArticle=true&no=1582 [복사]


; hello-os
; TAB=4

                ORG                0x7c00                        ; 이 프로그램이 어디에 read되는가

; 이하는 표준적인 FAT12 포맷 플로피 디스크를 위한 기술

                JMP                entry
                DB                0x90
                DB                "HELLOIPL"                ; boot sector이름을 자유롭게 써도 좋다(8바이트)
                DW                512                        ; 1섹터 크기(512로 해야 함)
                DB                1                        ; 클러스터 크기(1섹터로 해야 함)
                DW                1                        ; FAT가 어디에서 시작될까(보통 1섹터째부터)
                DB                2                        ; FAT 개수(2로 해야 함)
                DW                224                        ; 루트 디렉토리 영역의 크기(보통 224엔트리로 해야 한다)
                DW                2880                        ; 드라이브 크기(2880섹터로 해야 함)
                DB                0xf0                        ; 미디어 타입(0xf0로 해야 함)
                DW                9                        ; FAT영역 길이(9섹터로 해야 함)
                DW                18                        ; 1트럭에 몇 개의 섹터가 있을까(18로 해야 함)
                DW                2                        ; 헤드 수(2로 해야 함)
                DD                0                        ; 파티션을 사용하지 않기 때문에 여기는 반드시 0
                DD                2880                        ; 드라이브 크기를 한번 더 write
                DB                0,0,0x29                ; 잘 모르지만 이 값으로 해 두면 좋은 것 같다
                DD                0xffffffff                ; 아마, 볼륨 시리얼 번호
                DB                "HELLO-OS   "                ; 디스크 이름(11바이트)
                DB                "FAT12   "                ; 포맷 이름(8바이트)
                RESB        18                                ; 우선 18바이트를 비어 둔다

; 프로그램 본체

entry:
                MOV                AX, 0                        ; 레지스터 초기화
                MOV                SS,AX
                MOV                SP,0x7c00
                MOV                DS,AX
                MOV                ES,AX

                MOV                SI,msg
putloop:
                MOV                AL,[SI]
                ADD                SI, 1                        ; SI에 1을 더한다
                CMP                AL,0
                JE                fin
                MOV                AH, 0x0e                ; 한 글자 표시 Function
                MOV                BX, 15                        ; 칼라 코드
                INT                0x10                        ; 비디오 BIOS 호출
                JMP                putloop
fin:
                HLT                                        ; 무엇인가 있을 때까지 CPU를 정지시킨다
                JMP                fin                        ; Endless Loop

msg:
                DB                0x0a, 0x0a                ; 개행을 2개
                DB                "hello, world"
                DB                0x0a                        ; 개행
                DB                0

소스가 이렇습니다.

여기서 궁금한것은
DB                0x90
                DB                "HELLOIPL"                ; boot sector이름을 자유롭게 써도 좋다(8바이트)
                DW                512                        ; 1섹터 크기(512로 해야 함)
                DB                1                        ; 클러스터 크기(1섹터로 해야 함)
                DW                1                        ; FAT가 어디에서 시작될까(보통 1섹터째부터)
                DB                2                        ; FAT 개수(2로 해야 함)
                DW                224                        ; 루트 디렉토리 영역의 크기(보통 224엔트리로 해야 한다)
                DW                2880                        ; 드라이브 크기(2880섹터로 해야 함)
                DB                0xf0                        ; 미디어 타입(0xf0로 해야 함)
                DW                9                        ; FAT영역 길이(9섹터로 해야 함)
이부분이 왜  클러스터 크기(1섹터로 해야 함) 이런식으로 인식이 돼는지 궁금합니다.
DB명령어는 분명히 파일의 내용을 1바이트만 직접쓰는건데 어쨰서 이런 명령문으로 인식돼는건가요?

  Hit : 3619     Date : 2012/06/14 09:39



    
cd80 명령어로 인식되는 것이 아닌 저건 설정파일을 다루는것과 비슷하다고 보시면 됩니다.
설정파일들에 예를들어
nick=cd80
age=87
girlfriendEnabled=False
이런식으로 써져있다고 명령어는 아니 듯이
저기에서도 메모리에 데이타들을 다 써놓고 CPU가 읽어나가면서 처리하는것입니다
2012/06/15  
dhxkgozj 감사합니다 ㅎㅎ 2012/06/15