본문 바로가기

↘ [C]/↘ [OS]

[OS/] 어셈블리

helloos.img
  1 ;hello-os 
  2 ;TAB=4 
  3  
  4 ; 이하는 표준적인 FAT12 포멧 플로피디스크를 위한 서술 
  5  
  6     DB      0xeb, 0x4e, 0x90
  7     DB      "HELLOIPL"      ; 부트섹터의 이름을 자유롭게 써도 좋음 
  8     DW      512             ; 1섹터의 크기(바이트 단위. 512로 해야함) 
  9     DB      1               ; 클러스터의 크기(1섹터로 해야 함) 
 10     DW      1               ; 예약된 섹터의 수 
 11     DB      2               ; 디스크의 FAT 테이블의 수 
 12     DW      224             ; 루트 디렉토리의 엔트리의 수(보통은 224엔트리) 
 13     DB      0xf0            ; 미디어 타입(0xf0으로 해야함) 
 14     DW      9               ; 하나의 FAT 테이블의 섹터 수(9섹터로 해야함) 
 15     DW      18              ; 1트랙에 몇 섹터가 있는가 (18로 해야 함) 
 16     DW      2               ; 헤드의 수(2로 해야함) 
 17     DD      0               ; 파티션을 사용하지 않으므로 이곳은 반드시 0 
 18     DD      2880            ; 이 드라이브의 크기를 한 번 더 씀 
 19     DB      0,0,0x29        ; 잘 모르겠지만 이 값을 넣어 두면 좋다고 함 
 20     DD      0xffffffff      ; 아마 볼륨 시리얼 번호 
 21     DB      "HELLO-OS   "   ; 디스크의 이름 
 22     DB      "FAT12  "       ; 포멧의 이름(8바이트) 
 23     RESB    18              ; 어쩃든 18바이트를 남겨둠 
 24  
 25 ; 프로그램 본체 
 26  
 27     DB      0xb8, 0x00, 0x00, 0x8e, 0xd0, 0xbc, 0x00, 0x7c
 28     DB      0x8e, 0xd8, 0x8e, 0xc0, 0xbe, 0x74, 0x7c, 0x8a
 29     DB      0xb4, 0x83, 0xc6, 0x01, 0x3c, 0x00, 0x74, 0x09
 30     DB      0xb4, 0x0e, 0xbb, 0x0f, 0x00, 0xcd, 0x10, 0xeb
 31     DB      0xee, 0xf4, 0xeb, 0xfd
 32  
 33 ; 메세지 부분 
 34  
 35     DB      0x0a, 0x0a      ; 줄 바꿈 2 36     DB      "hello, world" 
 37     DB      0x0a            ; 줄 바꿈 
 38     DB      0 
 39  
 40     RESB        0x1fe-$     ; 0x001fe까지를 0x00으로 채우는 명령 
 41     DB      0x55, 0xaa
 42  
 43 ; 이하는 부트섹터 이외의 부분에 기술 
 44  
 45     DB      0xf0, 0xff, 0xff, 0x00, 0x00, 0x00, 0x00, 0x00
 46     RESB    4600 
 47     DB      0xf0, 0xff, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
 48     RESB    1496432 
 49