[OS만들기] day 02: bootloader 만들기
오늘 만든 결과물 소스코드 부트로더를 이용해서 커널로 점프한 후, 글자 출력 bootloader.asm ; bootloader.asm [org 0] jmp 07C0h:start ; cs, ds, es 세그먼트를 초기화 start: mov ax, cs; BIOS에서 cs를 0, ip를 07c0으로 셋팅했음 mov ds, ax mov es, ax mov ax, 0xB800 mov es, ax ; es에 비디오 메모리 영역을 넣음 mov di, 0 ; destination index를 0으로 세팅 mov ax, word [msgBack] mov cx, 0x7FF ;2047 paint: ; 화면 전부를 .으로 찍음 mov word [es:di], ax add di, 2 dec cx jnz paint ; int ..
더보기
[OS만들기] day 20: 유저 모드와 콜 게이트
# src/init.inc SysCodeSelector equ 0x08 SysDataSelector equ 0x10 VideoSelector equ 0x18 TSSSelector equ 0x20 UserCodeSelector equ 0x28+3 UserDataSelector equ 0x30+3 # src/boot.asm %include "init.inc" [org 0] jmp 07C0h:start start: mov ax, cs mov ds, ax mov es, 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 read: ..
더보기
[OS만들기] day19: usermode task switching
# init.inc SysCodeSelector equ 0x08 SysDataSelector equ 0x10 VideoSelector equ 0x18 TSSSelector equ 0x20 UserCodeSelector equ 0x28+3 UserDataSelector equ 0x30+3 # boot.asm %include "init.inc" [org 0] jmp 07C0h:start start: mov ax, cs mov ds, ax mov es, 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 read: mov ax, ..
더보기