일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | 6 | 7 |
8 | 9 | 10 | 11 | 12 | 13 | 14 |
15 | 16 | 17 | 18 | 19 | 20 | 21 |
22 | 23 | 24 | 25 | 26 | 27 | 28 |
29 | 30 | 31 |
- BOB
- 2965
- EOF
- acmicpc
- 정보보호 영재교육원
- 4101
- 5086
- 2476
- 2501
- BoB 7기
- 2506
- 2605
- 영재교육원
- 영재원
- 1547
- 10995
- text
- 공주대 정보보호
- 11943
- BoB 후기
- 11109
- 리뷰
- 5586
- Best of the Best
- boj
- Python
- 정보보호 영재원
- 10833
- 차세대 보안 리더 양성 프로그램
- 차세대 보안 리더 양성
- Today
- Total
짱해커가 되어보자
[#1] 시작해보자 본문
OS 개발 프로젝트 #1
[2017/07/14 - [프로젝트/OS 개발!] - [#0] 들어가기 전]
저번에 올린 글을 이어서 작성해볼까 한다
먼저, 프로그래밍을 배울 때 개발환경을 구축하듯이, OS도 개발환경을 만들어 줄 것이다.
1. 소스코드를 작성한다
2. 컴파일러로 컴파일한다
3. 가상머신으로 실행한다
이러한 과정을 거친다 보면 된다.
필자(나)가 각 과정에서 사용하는 프로그램을 소개해보자면
Sublime Text 3 | |
1번 항목의 프로그램이다 텍스트를 수정할 수 있는, 텍스트 에디터이다 |
Nasm | |
2번 항목의 컴파일러이다 Nasm은 어셈블리어를 컴파일해준다 |
Vmware Workstation | |
3번 항목의 프로그램이다 가상머신을 만들어, 우리가 만든 OS를 구동할 것이다 |
이렇게 개발환경을 갖추었다.
컴파일러 같은 경우, 나중에 더 필요로 하는데 나중에 필요에 따라 차차 추가하겠다
그러면, 설치한 프로그램들의 사용법을 익히기 위해, 예제 소스를 가지고 테스트를 해보겠다.
[org 0]
[bits 16]
jmp 0x07c0:start
start:
mov ax, 0xb800
mov es, ax
mov byte[es:0], 'a'
mov byte[es:1], 0x07
jmp $
times 510 - ($ - $$) db 0
dw 0xAA55
이러한 코드를 작성하고, '.asm' 확장자로 저장해준다.
('.asm'은 어셈블리의 확장자이다)
저장을 했으면, 컴파일하는 과정을 거칠 것이다
nasm -f bin code1.asm -o code1.img
이런 식으로 컴파일하게 되면, 'code1.img'파일이 생기는 것을 볼 수 있다.
(Nasm으로도 할 수 있지만, 책의 저자는 최적화 능력을 높인 어셈블러를 따로 제공한다)
이제 이렇게 만들어진 이미지파일(.img)을 가지고 실행을 해보겠다.
VMware로 MS-DOS 용도의 가상머신을 만든 후에 이미지 파일을 넣고 실행을 해보겠다.
그러나 일반적으로 VMware로 만든 가상머신은 하드디스크만을 제공한다.
하드디스크에는 iso파일은 가능하지만, 이미지파일(.img)은 실행을 할 수가 없다.
그래서 가상머신 세팅에서 가상의 플로피 디스크를 추가하게 되면, 이미지파일(.img)을 넣고 실행을 할 수가 있다.
이제 한 번 실행을 해보겠다.
Code1.img 실행 사진
화면에 'a'가 찍히는 걸 볼 수 있다.
이렇게 실행하면 a가 나오는 OS를 만든 것이다.
이번에는 원래 코드에서 추가와 수정을 한 후 다시 실행해보겠다.
[org 0]
[bits 16]
jmp 0x07C0:start
start:
mov ax, cs
mov ds, ax
mov ax, 0xB800
mov es, ax
mov di, 0
mov ax, word [msgBack]
mov cx, 0x7FF
paint:
mov word [es:di], ax
add di, 2
dec cx
jnz paint
mov edi, 0
mov byte [es:edi], 'S'
inc edi
mov byte [es:edi], 0x16
inc edi
mov byte [es:edi], 'T'
inc edi
mov byte [es:edi], 0x16
inc edi
mov byte [es:edi], 'A'
inc edi
mov byte [es:edi], 0x16
inc edi
mov byte [es:edi], 'R'
inc edi
mov byte [es:edi], 0x16
inc edi
mov byte [es:edi], 'T'
inc edi
mov byte [es:edi], 0x16
inc edi
jmp $
msgBack db '.', 0xB7
times 510-($-$$) db 0
dw 0xAA55
이 코드도 Code1과 같이
nasm -f bin code1.asm -o code1.img
이렇게 컴파일해주면 된다.
Code2.img 실행 사진
여태까지 했던 것들은 프로그램을 익혀보기 위해 사용한 것도 있지만,
우리가 초반부에 하려는 내용과 관련도 있기에 했던 것이다.
그것에 대한 것은 이제부터 차차 알아가 보도록 하겠다.
[글의 내용이 길어져서, 2개로 나누게 되었다]
'프로젝트 > OS 개발!' 카테고리의 다른 글
[#2] Makefile제작해보자 (0) | 2017.07.20 |
---|---|
[#1.5] 시작해보자 (0) | 2017.07.17 |
[#0] 들어가기 전 (0) | 2017.07.14 |