부트섹터에서 프로그램 실행시키기.

;파일 시스템을 배운 보람(?) 이 있습니다..
;저기 FAT12다루는 부분.. FAT16이랑 비슷합니다..
;파일시스템도 fat만 거의 다 끝내놓고 더이상 진적이 없는..
;과연 스터디는 할수 있을지..
;모책을 보고 있는 예제를 혼자서 비스므리 하게 짜봤습니다
;모르는 부분은 상당히 보고 했으므로 비슷한 부분이 많을듯.
;nask라는 이상한(?) 어셈블러로 해서 nasm이랑 약간 문법이 틀린데가 있습니다
;resb는 nasm의 times로 어떻게 대체 가능한합니다.
;부트섹터에서 부트섹터 외에 있는 프로그램으로 이동시켜서 실행하게 해주는 프로그램이
;부트로더인모양? 초보라 잘 모르겠네요.
;개인 기억용, 틀려도 절대 책임같은건 지지 않음..(아마 틀린거 많을걸?)
;영어에 태클 걸지 말것!

부연설명 (잊어버릴까봐..)
mov ax,0 ; ax = 0
int 0x10  ;번호에 해당하는 인터럽트 발생
(쉽게 말해 ax,bx,cx,dx,같은게 인자고 이걸사용하면 함수를 부르는거라 생각하면 될듯)

inc  ax   ; ax ++
dec ax    ; ax--
add ax,3  ; ax = ax + 3
sub ax,3  ; ax = ax - 3

cmp ax,3  ; if문, ax가 (뒤에 따라 점프)
jmp lable; goto label
jc        : jump carry,에러가 난다면.. 점프
je        ; jump equal 같으면 점프
jb        ; jemp below 작으면 점프
jbe       ; jemp below equal 작거나 같으면 점프
jnc       ; jemp not carry

db        ; byte (db 0x00 이면 현재위치에 1byte 만큼 0을 쓴다 라는 뜻인듯)
dw        ;word  (마찬가지)
dd        ; double word (마찬가지)

[]         ; c와 같다(배열과 포인터에 나오는 그거임... *(변수))
$          ; 현재 위치
resb      ; 0로 범위까지 채운다 (nasm에는 없음 times로 대체)

;main
;Program start place
ORG 0x7c00

;#define READ_CYRINDERS 10
READ_CYLINDER EQU 10

;FAT12 Boot record setting
jmp init_register       ;Jump boot code (3byte)
db  0x90                 ;padding (jump boot code)
db  "Lowid   "           ;OEM Name (8byte)
dw  512                  ;Bytes per secter
db  1                     ;Secter per Cluster
dw  1                     ;Reserved Secter count
db  2                     ;Number of fats
dw  224                  ;Boot entry count
dw  2880                ;Total secter 16
db  0xf0                 ;Media(now,floppy disk)
dw  9                    ;Fat size 16
dw  18                   ;Sector per track
dw  2                    ;Number of heads
dd  0                    ;Hidden secter    (no use partition)
dd  2280                ;Total secter32?? (drive size)
db  0                    ;Drive Number
db  0                    ;Reseved1
db  0x29                ;Boot signature(must 0x29?)
dd  0xffffffff        ;Volume serial num??
db  "Lowid_vol  "       ;Volume label (11byte)
db  "FAT12   "          ;Filesystem Type (8byte)
resb 18

init_register:
    mov ax,0
    mov sp,0x7c00
    mov ds,ax
    mov ss,ax

;(Read)Segment + offset
    mov ax,0x0820
    mov es,ax
    mov bx,0

;init_CHS
    mov ch,0    ;Cyrinder
    mov dh,0    ;Head
    mov cl,2    ;Sector

init_di_register:
    mov di,0    ;error count

read_disk:
    mov ah,0x02 ;read_mode
    mov al,1    ;read secter size
    mov dl,0    ;drive
    int 0x13    ;disk nterrupt

    jnc succeed ;no error.. jump (read)succeed

    ;error
    inc di      ;di ++
    cmp di,5    ;if 5
    je error    ;equal.. goto error

    jmp read_disk

print:
    mov al,[si] ;print character
    mov ah,0x0e ;mode
    mov bh,0x15 ;color
    int 0x10    ;video interrupt

    inc si
    cmp al,0
    je finish

    jmp print

error:
    mov si,error_string
    jmp print

;MAX(floppy disk?) - cylinder:40, head:2 sector:18
;cylinder:0 head:0 sector:1
;cylinder:0 head:0 sector:2
;cylinder:0 head:0 sector:3
;         .......
;cylinder:0 head:0 sector:17
;cylinder:0 head:0 sector:18
;cylinder:0 head:1 sector:1
;cylinder:0 head:1 secter:2
;         .......
;cylinder:0 head:1 secter:17
;cylinder:0 head:1 secter:18
;cylinder:1 head:0 secter:1

succeed:
;Move Segment and offset
    mov ax,es
    add ax,512/16
    mov es,ax
;Read 18 secter
    inc cl
    cmp cl,18
    jbe init_di_register
;Read 2 head
    mov cl,0    ;init secter
    inc dh
    cmp dh,2
    jb  init_di_register
;Read 10 cylinder
    mov dh,0    ;init head
    inc ch
    cmp ch,READ_CYLINDER
    jb  init_di_register
;All compleate!.. print succeed
    mov si,succeed_string
    jmp print

;jemp! (video file)
finish:
    jmp 0xc200

error_string:
    db "Read Failed - Check please!!"
    db 0x0a,0x00

succeed_string:
    db "Read Succeed - Check OK !!"
    db 0x0a,0x00

    ;for Dos Table Signature
    resb 0x7dfe - $ ;padding(0)
    db 0x55,0xaa    ;Dos Table Signature

;video
ORG 0xc200

;VGA 320x200x8bit
mov al,0x13
mov ah,0x00
int 0x10

finish:
    hlt
    jmp finish

Trackback 0 Comment 14
  1. Favicon of http://blog.naver.com/khmirage.do BlogIcon 환상경 2007.07.23 09:36 address edit & del reply

    훠;;;; 이건 뭔가효~ -0-
    알수없는 코드들이 잔뜩.....

    • lowid 2007.07.24 01:08 address edit & del

      환상경님은 아시는 언어 많잖아요뭘..
      저도 이참에 1개정도는 늘려볼려고 노력은 하는데
      원채 했갈려서..;

  2. Favicon of http://firion.tistory.com BlogIcon 프리오닐 2007.07.23 13:05 address edit & del reply

    이자슥 -_-; 스킨까지 바뀐데에다가 어셈으로 전향하다니

    • lowid 2007.07.24 01:09 address edit & del

      아! 용케도 잘 들어왔네.. 그곳에서 접속하기 힘들텐데..
      스킨은.. 바로 어제 바꿨는데! 참 타이밍 좋네..
      어셈은.. 아무래도 cpu,os를 알려고 하면 알아야 하겠더
      라고.. 그래서 조금만 맛보기로 해보는거야.. 깊게 파고들
      만한 실력은 아니고.. 하는데 까지 해보는거지뭘..ㅋ

  3. Favicon of http://blog.naver.com/khmirage.do BlogIcon 환상경 2007.07.24 08:53 address edit & del reply

    전 어셈이라는게 뭔지 몰라요~
    어셈이 뭔가요? -0-
    후.... 학교에서 어셈과정은 제가 입학하기전에 폐지되어서
    이제는 구경조차 못하는;;;;;;;
    어셈좀 알려줘효~;;;;

    • lowid 2007.07.25 17:16 address edit & del

      저도 학교에서는 그냥 간단히 개념 잡는거만 하더군요
      덕분에 혼자서 뻘짓중,..이지만요..
      그래서,아직 누구에게 가르켜 주기는 좀 무리인듯해요ㅜ

  4. Favicon of http://sakuragi.org BlogIcon sakuragi 2007.07.25 00:32 address edit & del reply

    우워~~ 이제는 범접 할 수 없는 세계로 가시는군요~~ :)

    • lowid 2007.07.25 17:16 address edit & del

      아무리 그래도,
      sakuragi 님만 할까봐요? ㅋ

  5. Favicon of http://heizelnut.zetyx.net BlogIcon 헤즐넛 2007.07.25 16:35 address edit & del reply

    워....역시 굇수님....어셈을 손대시다니....
    리눅스이후로 어셈으로 삽질을 시작하시다니;;
    역시 삽질의 굇수님이십니다a

    • lowid 2007.07.25 17:17 address edit & del

      뭐 인생이 삽질(?) 이니 미리 삽질한다고 생각해주져뭘..ㅋ
      많이 아는거 처럼 보여두 책보고 한거라니깐요..;
      어셈아는거는.. 얼마안되요.. 잘해봐야 헤즐넛님 정도
      될까...

  6. Favicon of http://oseb.egloos.com BlogIcon oseb 2007.07.25 21:08 address edit & del reply

    다들 멋진 격려 한마디씩 해 주시는군요. ;)
    어셈은 리눅스 사용하는 것 전 처음 봤습니다. 보기 좋습니다.

    • lowid 2007.07.26 12:34 address edit & del

      운영체제가 다른거 뿐이라 리눅스에서 사용하는거
      자체가 어렵진않네요..
      잘은 몰라도 계속 할 생각입니다..

  7. Favicon of http://koyul.egloos.com BlogIcon 고율 2007.07.27 00:19 address edit & del reply

    안녕하세요. ^^ 블로그에 답글 남기신거 보고 왔어요. 포스트를 읽어보니 저에 비하면 진도를 엄청 많이 나가셨네요.

    근데 혹시 NASK 어디서 구하셨는지 좀 말씀해주시면 안될까요. ㅜㅜ 지금 그거 못 구해서 NASM을 깔아야 하나 고민하고 있는 중이거든요.

    그럼 종종 들릴께요. ^^;;

    • lowid 2007.07.27 19:54 address edit & del

      안녕하세요.
      여기도 글올리셧군요..
      앞으로도 자주 방문해 주세요.. >_<

prev 1 ··· 188 189 190 191 192 193 194 195 196 ··· 342 next