2일차에 대한 것으로 개발 재개를 위해서 helloos.nas을 조금 개량되어 있다. (동작은 동일하다.)


 제대로된 어셈블리 명령어를 이용해서 제작하는 것을 목표로 하고 있는 것이다.


 그 전에 방식은 어셈블리어의 데이터만을 이용해서 만드는 것이라고 한다면, 이번 방식은 어셈블리어의 명령어를 제대로 처리하는 것이다.


 차이점은 이전 글은 기계어를 전부다 알고 있어야 된다면, 이번은 어셈블리어를 알고 있으면 제작이 가능하다는 점이다.


 중간 중간 오류가 나는 소스이다. 일단, 올려 놓고 어떤 문제점이 있는지 기록하면, 조금 더 차이점을 이해 할 수 있을 거라고 생각한다. 그래서 소스를 일단, 올린다.


 

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
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
/*
    Hello-os
    TAB=4
*/
 
//.org    0x7c00;
 
/*
    표준적인 FAT12 포맷 플로피 디스크를 위한 서술
*/
/*
jmp    entry;
.byte    0x90;
*/
.byte    0xeb0x4e0x90;
.ascii    "HELLOIPL";
.word    512;
.byte    1;
.word    1;
.byte    2;
.word    224;
.word    2880;
.byte    0xf0;
.word    9;
.word    18;
.word    2;
.int    0;
.int    2880;
.byte    000x29;
.int    0xffffffff;
.ascii    "HELLO-OS   ";
.ascii    "FAT12   ";
.fill    18;
 
/*
    프로그램 본체
*/
 
entry:
    movw    $0, %ax;
    movw    %ax, %ss;
    movw    $0x7c00, %sp;
    movw    %ax, %ds;
    movw    %ax, %es;
    
    movw    msg, %si;
 
putloop:
    movb    (%si), %al;
    add        $1, %si;
    cmp        $0, %al;
    je        fin;
    movb    $0x0e, %ah;
    movw    $15, %bx;
    int        $0x10;
    jmp        putloop;
    
fin:
    hlt;
    jmp        fin;
    
msg:
    .byte    0x0a0x0a;
    .ascii    "Hello, World!";
    .byte    0x0a;
    .byte    0x00;
 
.org    510-(.-..);
 
.byte    0x550xaa;
 
/*
    부트로더 이외의 부분에 기술
*/
.byte    0xf00xff0xff0x000x000x000x000x00;
.fill    4600;
.byte    0xf00xff0xff0x000x000x000x000x00;
.fill    1469432;
 
cs


 이걸 알아 보는 방향으로 이글을 마친다.

Posted by JunkMam
,