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 0xeb, 0x4e, 0x90; .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 0, 0, 0x29; .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 0x0a, 0x0a; .ascii "Hello, World!"; .byte 0x0a; .byte 0x00; .org 510-(.-..); .byte 0x55, 0xaa; /* 부트로더 이외의 부분에 기술 */ .byte 0xf0, 0xff, 0xff, 0x00, 0x00, 0x00, 0x00, 0x00; .fill 4600; .byte 0xf0, 0xff, 0xff, 0x00, 0x00, 0x00, 0x00, 0x00; .fill 1469432; | cs |
이걸 알아 보는 방향으로 이글을 마친다.
'연습' 카테고리의 다른 글
NVIDIA에서 듀얼 모니터 주 모니터 설정방법 (0) | 2016.07.06 |
---|---|
Windows API 프로그래밍 -16. 마우스 입력. - (0) | 2016.07.05 |
GAS로 OS 구조와 원리 짜기. -2. 꽤 그럴듯한 소스 프로그램- (0) | 2016.07.03 |
GCC 릴리즈와 디버그 컴파일 방법. (0) | 2016.07.02 |
Windows API 프로그래밍 -15. 비프음 출력. - (0) | 2016.07.02 |